4841a6
From bc307149fe4e3fe2a3e0ac52534383c955051e7e Mon Sep 17 00:00:00 2001
719b13
From: Si-Wei Liu <si-wei.liu@oracle.com>
719b13
Date: Fri, 6 May 2022 19:28:12 -0700
4841a6
Subject: [PATCH 14/24] virtio-net: setup vhost_dev and notifiers for cvq only
719b13
 when feature is negotiated
719b13
MIME-Version: 1.0
719b13
Content-Type: text/plain; charset=UTF-8
719b13
Content-Transfer-Encoding: 8bit
719b13
4841a6
RH-Author: Jason Wang <jasowang@redhat.com>
4841a6
RH-MergeRequest: 187: Multiqueue fixes for vhost-vDPA
4841a6
RH-Commit: [1/7] 38bcfaa661f437b3dfa6b6f152dffd60073dc054
4841a6
RH-Bugzilla: 2069946
719b13
RH-Acked-by: Eugenio PĂ©rez <eperezma@redhat.com>
4841a6
RH-Acked-by: Cindy Lu <lulu@redhat.com>
4841a6
RH-Acked-by: Laurent Vivier <lvivier@redhat.com>
719b13
719b13
When the control virtqueue feature is absent or not negotiated,
719b13
vhost_net_start() still tries to set up vhost_dev and install
719b13
vhost notifiers for the control virtqueue, which results in
719b13
erroneous ioctl calls with incorrect queue index sending down
719b13
to driver. Do that only when needed.
719b13
719b13
Fixes: 22288fe ("virtio-net: vhost control virtqueue support")
719b13
Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
719b13
Acked-by: Jason Wang <jasowang@redhat.com>
719b13
Message-Id: <1651890498-24478-2-git-send-email-si-wei.liu@oracle.com>
719b13
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
719b13
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
719b13
(cherry picked from commit aa8581945a13712ff3eed0ad3ba7a9664fc1604b)
4841a6
Signed-off-by: Jason Wang <jasowang@redhat.com>
719b13
---
719b13
 hw/net/virtio-net.c | 3 ++-
719b13
 1 file changed, 2 insertions(+), 1 deletion(-)
719b13
719b13
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
719b13
index e1f4748831..ec045c3f41 100644
719b13
--- a/hw/net/virtio-net.c
719b13
+++ b/hw/net/virtio-net.c
719b13
@@ -244,7 +244,8 @@ static void virtio_net_vhost_status(VirtIONet *n, uint8_t status)
719b13
     VirtIODevice *vdev = VIRTIO_DEVICE(n);
719b13
     NetClientState *nc = qemu_get_queue(n->nic);
719b13
     int queue_pairs = n->multiqueue ? n->max_queue_pairs : 1;
719b13
-    int cvq = n->max_ncs - n->max_queue_pairs;
719b13
+    int cvq = virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ) ?
719b13
+              n->max_ncs - n->max_queue_pairs : 0;
719b13
 
719b13
     if (!get_vhost_net(nc->peer)) {
719b13
         return;
719b13
-- 
4841a6
2.35.3
719b13