vhost: Create accessors for virtqueues private_data
Signed-off-by: Eugenio Pérez <eperezma@redhat.com> Link: https://lore.kernel.org/r/20200331192804.6019-2-eperezma@redhat.com Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:

committed by
Michael S. Tsirkin

parent
21818ed0c6
commit
247643f857
@@ -424,7 +424,7 @@ static void vhost_net_disable_vq(struct vhost_net *n,
|
||||
struct vhost_net_virtqueue *nvq =
|
||||
container_of(vq, struct vhost_net_virtqueue, vq);
|
||||
struct vhost_poll *poll = n->poll + (nvq - n->vqs);
|
||||
if (!vq->private_data)
|
||||
if (!vhost_vq_get_backend(vq))
|
||||
return;
|
||||
vhost_poll_stop(poll);
|
||||
}
|
||||
@@ -437,7 +437,7 @@ static int vhost_net_enable_vq(struct vhost_net *n,
|
||||
struct vhost_poll *poll = n->poll + (nvq - n->vqs);
|
||||
struct socket *sock;
|
||||
|
||||
sock = vq->private_data;
|
||||
sock = vhost_vq_get_backend(vq);
|
||||
if (!sock)
|
||||
return 0;
|
||||
|
||||
@@ -524,7 +524,7 @@ static void vhost_net_busy_poll(struct vhost_net *net,
|
||||
return;
|
||||
|
||||
vhost_disable_notify(&net->dev, vq);
|
||||
sock = rvq->private_data;
|
||||
sock = vhost_vq_get_backend(rvq);
|
||||
|
||||
busyloop_timeout = poll_rx ? rvq->busyloop_timeout:
|
||||
tvq->busyloop_timeout;
|
||||
@@ -570,8 +570,10 @@ static int vhost_net_tx_get_vq_desc(struct vhost_net *net,
|
||||
|
||||
if (r == tvq->num && tvq->busyloop_timeout) {
|
||||
/* Flush batched packets first */
|
||||
if (!vhost_sock_zcopy(tvq->private_data))
|
||||
vhost_tx_batch(net, tnvq, tvq->private_data, msghdr);
|
||||
if (!vhost_sock_zcopy(vhost_vq_get_backend(tvq)))
|
||||
vhost_tx_batch(net, tnvq,
|
||||
vhost_vq_get_backend(tvq),
|
||||
msghdr);
|
||||
|
||||
vhost_net_busy_poll(net, rvq, tvq, busyloop_intr, false);
|
||||
|
||||
@@ -685,7 +687,7 @@ static int vhost_net_build_xdp(struct vhost_net_virtqueue *nvq,
|
||||
struct vhost_virtqueue *vq = &nvq->vq;
|
||||
struct vhost_net *net = container_of(vq->dev, struct vhost_net,
|
||||
dev);
|
||||
struct socket *sock = vq->private_data;
|
||||
struct socket *sock = vhost_vq_get_backend(vq);
|
||||
struct page_frag *alloc_frag = &net->page_frag;
|
||||
struct virtio_net_hdr *gso;
|
||||
struct xdp_buff *xdp = &nvq->xdp[nvq->batched_xdp];
|
||||
@@ -952,7 +954,7 @@ static void handle_tx(struct vhost_net *net)
|
||||
struct socket *sock;
|
||||
|
||||
mutex_lock_nested(&vq->mutex, VHOST_NET_VQ_TX);
|
||||
sock = vq->private_data;
|
||||
sock = vhost_vq_get_backend(vq);
|
||||
if (!sock)
|
||||
goto out;
|
||||
|
||||
@@ -1121,7 +1123,7 @@ static void handle_rx(struct vhost_net *net)
|
||||
int recv_pkts = 0;
|
||||
|
||||
mutex_lock_nested(&vq->mutex, VHOST_NET_VQ_RX);
|
||||
sock = vq->private_data;
|
||||
sock = vhost_vq_get_backend(vq);
|
||||
if (!sock)
|
||||
goto out;
|
||||
|
||||
@@ -1345,9 +1347,9 @@ static struct socket *vhost_net_stop_vq(struct vhost_net *n,
|
||||
container_of(vq, struct vhost_net_virtqueue, vq);
|
||||
|
||||
mutex_lock(&vq->mutex);
|
||||
sock = vq->private_data;
|
||||
sock = vhost_vq_get_backend(vq);
|
||||
vhost_net_disable_vq(n, vq);
|
||||
vq->private_data = NULL;
|
||||
vhost_vq_set_backend(vq, NULL);
|
||||
vhost_net_buf_unproduce(nvq);
|
||||
nvq->rx_ring = NULL;
|
||||
mutex_unlock(&vq->mutex);
|
||||
@@ -1521,7 +1523,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
|
||||
}
|
||||
|
||||
/* start polling new socket */
|
||||
oldsock = vq->private_data;
|
||||
oldsock = vhost_vq_get_backend(vq);
|
||||
if (sock != oldsock) {
|
||||
ubufs = vhost_net_ubuf_alloc(vq,
|
||||
sock && vhost_sock_zcopy(sock));
|
||||
@@ -1531,7 +1533,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
|
||||
}
|
||||
|
||||
vhost_net_disable_vq(n, vq);
|
||||
vq->private_data = sock;
|
||||
vhost_vq_set_backend(vq, sock);
|
||||
vhost_net_buf_unproduce(nvq);
|
||||
r = vhost_vq_init_access(vq);
|
||||
if (r)
|
||||
@@ -1568,7 +1570,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
|
||||
return 0;
|
||||
|
||||
err_used:
|
||||
vq->private_data = oldsock;
|
||||
vhost_vq_set_backend(vq, oldsock);
|
||||
vhost_net_enable_vq(n, vq);
|
||||
if (ubufs)
|
||||
vhost_net_ubuf_put_wait_and_free(ubufs);
|
||||
|
Reference in New Issue
Block a user