Lines Matching refs:ubufs

123 	struct vhost_net_ubuf_ref *ubufs;  member
229 struct vhost_net_ubuf_ref *ubufs; in vhost_net_ubuf_alloc() local
233 ubufs = kmalloc(sizeof(*ubufs), GFP_KERNEL); in vhost_net_ubuf_alloc()
234 if (!ubufs) in vhost_net_ubuf_alloc()
236 atomic_set(&ubufs->refcount, 1); in vhost_net_ubuf_alloc()
237 init_waitqueue_head(&ubufs->wait); in vhost_net_ubuf_alloc()
238 ubufs->vq = vq; in vhost_net_ubuf_alloc()
239 return ubufs; in vhost_net_ubuf_alloc()
242 static int vhost_net_ubuf_put(struct vhost_net_ubuf_ref *ubufs) in vhost_net_ubuf_put() argument
244 int r = atomic_sub_return(1, &ubufs->refcount); in vhost_net_ubuf_put()
246 wake_up(&ubufs->wait); in vhost_net_ubuf_put()
250 static void vhost_net_ubuf_put_and_wait(struct vhost_net_ubuf_ref *ubufs) in vhost_net_ubuf_put_and_wait() argument
252 vhost_net_ubuf_put(ubufs); in vhost_net_ubuf_put_and_wait()
253 wait_event(ubufs->wait, !atomic_read(&ubufs->refcount)); in vhost_net_ubuf_put_and_wait()
256 static void vhost_net_ubuf_put_wait_and_free(struct vhost_net_ubuf_ref *ubufs) in vhost_net_ubuf_put_wait_and_free() argument
258 vhost_net_ubuf_put_and_wait(ubufs); in vhost_net_ubuf_put_wait_and_free()
259 kfree(ubufs); in vhost_net_ubuf_put_wait_and_free()
304 n->vqs[i].ubufs = NULL; in vhost_net_vq_reset()
374 struct vhost_net_ubuf_ref *ubufs = ubuf->ctx; in vhost_zerocopy_callback() local
375 struct vhost_virtqueue *vq = ubufs->vq; in vhost_zerocopy_callback()
383 cnt = vhost_net_ubuf_put(ubufs); in vhost_zerocopy_callback()
625 struct vhost_net_ubuf_ref *uninitialized_var(ubufs); in handle_tx_zerocopy()
664 ubuf->ctx = nvq->ubufs; in handle_tx_zerocopy()
669 ubufs = nvq->ubufs; in handle_tx_zerocopy()
670 atomic_inc(&ubufs->refcount); in handle_tx_zerocopy()
674 ubufs = NULL; in handle_tx_zerocopy()
688 vhost_net_ubuf_put(ubufs); in handle_tx_zerocopy()
1107 n->vqs[i].ubufs = NULL; in vhost_net_open()
1160 if (n->vqs[VHOST_NET_VQ_TX].ubufs) { in vhost_net_flush()
1165 vhost_net_ubuf_put_and_wait(n->vqs[VHOST_NET_VQ_TX].ubufs); in vhost_net_flush()
1168 atomic_set(&n->vqs[VHOST_NET_VQ_TX].ubufs->refcount, 1); in vhost_net_flush()
1287 struct vhost_net_ubuf_ref *ubufs, *oldubufs = NULL; in vhost_net_set_backend() local
1317 ubufs = vhost_net_ubuf_alloc(vq, in vhost_net_set_backend()
1319 if (IS_ERR(ubufs)) { in vhost_net_set_backend()
1320 r = PTR_ERR(ubufs); in vhost_net_set_backend()
1336 oldubufs = nvq->ubufs; in vhost_net_set_backend()
1337 nvq->ubufs = ubufs; in vhost_net_set_backend()
1364 if (ubufs) in vhost_net_set_backend()
1365 vhost_net_ubuf_put_wait_and_free(ubufs); in vhost_net_set_backend()