virtio-net: setup vhost_dev and notifiers for cvq only when feature is negotiated
When the control virtqueue feature is absent or not negotiated,
vhost_net_start() still tries to set up vhost_dev and install
vhost notifiers for the control virtqueue, which results in
erroneous ioctl calls with incorrect queue index sending down
to driver. Do that only when needed.
Fixes: 22288fe
("virtio-net: vhost control virtqueue support")
Signed-off-by: Si-Wei Liu <si-wei.liu@oracle.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Message-Id: <1651890498-24478-2-git-send-email-si-wei.liu@oracle.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
18aa91cddd
commit
aa8581945a
@ -245,7 +245,8 @@ static void virtio_net_vhost_status(VirtIONet *n, uint8_t status)
|
|||||||
VirtIODevice *vdev = VIRTIO_DEVICE(n);
|
VirtIODevice *vdev = VIRTIO_DEVICE(n);
|
||||||
NetClientState *nc = qemu_get_queue(n->nic);
|
NetClientState *nc = qemu_get_queue(n->nic);
|
||||||
int queue_pairs = n->multiqueue ? n->max_queue_pairs : 1;
|
int queue_pairs = n->multiqueue ? n->max_queue_pairs : 1;
|
||||||
int cvq = n->max_ncs - n->max_queue_pairs;
|
int cvq = virtio_vdev_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ) ?
|
||||||
|
n->max_ncs - n->max_queue_pairs : 0;
|
||||||
|
|
||||||
if (!get_vhost_net(nc->peer)) {
|
if (!get_vhost_net(nc->peer)) {
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user