aboutsummaryrefslogtreecommitdiff
path: root/hw/virtio
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2021-04-29 19:13:16 +0200
committerKevin Wolf <kwolf@redhat.com>2021-05-18 12:57:39 +0200
commitc90bd505a3e8210c23d69fecab9ee6f56ec4a161 (patch)
tree4047a26f0dd7de9f3c6ea510790af7b20f8b65ea /hw/virtio
parent04ceb61a4075fadbf374ef89662c41999da83489 (diff)
downloadqemu-c90bd505a3e8210c23d69fecab9ee6f56ec4a161.zip
qemu-c90bd505a3e8210c23d69fecab9ee6f56ec4a161.tar.gz
qemu-c90bd505a3e8210c23d69fecab9ee6f56ec4a161.tar.bz2
vhost-user-blk: Check that num-queues is supported by backend
Creating a device with a number of queues that isn't supported by the backend is pointless, the device won't work properly and the error messages are rather confusing. Just fail to create the device if num-queues is higher than what the backend supports. Since the relationship between num-queues and the number of virtqueues depends on the specific device, this is an additional value that needs to be initialised by the device. For convenience, allow leaving it 0 if the check should be skipped. This makes sense for vhost-user-net where separate vhost devices are used for the queues and custom initialisation code is needed to perform the check. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1935031 Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Raphael Norwitz <raphael.norwitz@nutanix.com> Message-Id: <20210429171316.162022-7-kwolf@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'hw/virtio')
-rw-r--r--hw/virtio/vhost-user.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index ded0c10..ee57abe 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -1909,6 +1909,11 @@ static int vhost_user_backend_init(struct vhost_dev *dev, void *opaque)
return err;
}
}
+ if (dev->num_queues && dev->max_queues < dev->num_queues) {
+ error_report("The maximum number of queues supported by the "
+ "backend is %" PRIu64, dev->max_queues);
+ return -EINVAL;
+ }
if (virtio_has_feature(features, VIRTIO_F_IOMMU_PLATFORM) &&
!(virtio_has_feature(dev->protocol_features,