Blame SOURCES/kvm-virtio-net-setup-vhost_dev-and-notifiers-for-cvq-onl.patch

719b13
From 60224ca528f32d3f8e7a5ec65c1851c9b698dfb6 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
719b13
Subject: [PATCH 1/7] 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
719b13
RH-Author: Cindy Lu <lulu@redhat.com>
719b13
RH-MergeRequest: 203: vdpa :sync the Multiqueue fixes for vhost-vDPA
719b13
RH-Commit: [1/7] fe2e27958344b5d5089b383f36c5d9e08472a591
719b13
RH-Bugzilla: 2095794
719b13
RH-Acked-by: MST <mst@redhat.com>
719b13
RH-Acked-by: Eugenio PĂ©rez <eperezma@redhat.com>
719b13
RH-Acked-by: Jason Wang <jasowang@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)
719b13
Signed-off-by: Cindy Lu <lulu@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
-- 
719b13
2.31.1
719b13