Lines Matching refs:ubufs

92 	 *  1: no outstanding ubufs
93 * >1: outstanding ubufs
122 /* Reference counting for outstanding ubufs.
124 struct vhost_net_ubuf_ref *ubufs;
236 struct vhost_net_ubuf_ref *ubufs;
240 ubufs = kmalloc(sizeof(*ubufs), GFP_KERNEL);
241 if (!ubufs)
243 atomic_set(&ubufs->refcount, 1);
244 init_waitqueue_head(&ubufs->wait);
245 ubufs->vq = vq;
246 return ubufs;
249 static int vhost_net_ubuf_put(struct vhost_net_ubuf_ref *ubufs)
251 int r = atomic_sub_return(1, &ubufs->refcount);
253 wake_up(&ubufs->wait);
257 static void vhost_net_ubuf_put_and_wait(struct vhost_net_ubuf_ref *ubufs)
259 vhost_net_ubuf_put(ubufs);
260 wait_event(ubufs->wait, !atomic_read(&ubufs->refcount));
263 static void vhost_net_ubuf_put_wait_and_free(struct vhost_net_ubuf_ref *ubufs)
265 vhost_net_ubuf_put_and_wait(ubufs);
266 kfree(ubufs);
311 n->vqs[i].ubufs = NULL;
386 struct vhost_net_ubuf_ref *ubufs = ubuf->ctx;
387 struct vhost_virtqueue *vq = ubufs->vq;
395 cnt = vhost_net_ubuf_put(ubufs);
873 struct vhost_net_ubuf_ref *ubufs;
911 ubuf->ctx = nvq->ubufs;
918 ubufs = nvq->ubufs;
919 atomic_inc(&ubufs->refcount);
923 ubufs = NULL;
938 vhost_net_ubuf_put(ubufs);
1326 n->vqs[i].ubufs = NULL;
1385 if (n->vqs[VHOST_NET_VQ_TX].ubufs) {
1390 vhost_net_ubuf_put_and_wait(n->vqs[VHOST_NET_VQ_TX].ubufs);
1393 atomic_set(&n->vqs[VHOST_NET_VQ_TX].ubufs->refcount, 1);
1502 struct vhost_net_ubuf_ref *ubufs, *oldubufs = NULL;
1535 ubufs = vhost_net_ubuf_alloc(vq,
1537 if (IS_ERR(ubufs)) {
1538 r = PTR_ERR(ubufs);
1558 oldubufs = nvq->ubufs;
1559 nvq->ubufs = ubufs;
1586 if (ubufs)
1587 vhost_net_ubuf_put_wait_and_free(ubufs);