VHOST_NET_VQ_TX
struct vhost_net_virtqueue *tnvq = &net->vqs[VHOST_NET_VQ_TX];
poll[VHOST_NET_VQ_TX].work);
n->vqs[VHOST_NET_VQ_TX].xdp = xdp;
vqs[VHOST_NET_VQ_TX] = &n->vqs[VHOST_NET_VQ_TX].vq;
n->vqs[VHOST_NET_VQ_TX].vq.handle_kick = handle_tx_kick;
vhost_poll_init(n->poll + VHOST_NET_VQ_TX, handle_tx_net, EPOLLOUT, dev,
vqs[VHOST_NET_VQ_TX]);
*tx_sock = vhost_net_stop_vq(n, &n->vqs[VHOST_NET_VQ_TX].vq);
if (n->vqs[VHOST_NET_VQ_TX].ubufs) {
mutex_lock(&n->vqs[VHOST_NET_VQ_TX].vq.mutex);
mutex_unlock(&n->vqs[VHOST_NET_VQ_TX].vq.mutex);
vhost_net_ubuf_put_and_wait(n->vqs[VHOST_NET_VQ_TX].ubufs);
mutex_lock(&n->vqs[VHOST_NET_VQ_TX].vq.mutex);
atomic_set(&n->vqs[VHOST_NET_VQ_TX].ubufs->refcount, 1);
mutex_unlock(&n->vqs[VHOST_NET_VQ_TX].vq.mutex);
kfree(n->vqs[VHOST_NET_VQ_TX].xdp);
vhost_net_enable_zcopy(VHOST_NET_VQ_TX);
struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX];
struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX];
struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX];
struct vhost_net_virtqueue *nvq = &net->vqs[VHOST_NET_VQ_TX];
mutex_lock_nested(&vq->mutex, VHOST_NET_VQ_TX);