From f94a5fb4e3b345b97291fc5492a35d38d4d47bc8 Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Wed, 6 Jul 2022 14:43:59 +0200 Subject: [PATCH] virtio-devices: Pass negotiated queue size to vhost-user backend The vhost-user backend was always provided the maximum queue size but this is incorrect. Instead it must be informed of the actual queue size that has been negotiated with the virtio driver running in the guest. This ensures proper functioning of vhost-user-block with the Rust Hypervisor Firmware, which uses a hardcoded queue size of 16. Partially fixes #4285 Signed-off-by: Sebastien Boeuf --- virtio-devices/src/vhost_user/vu_common_ctrl.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/virtio-devices/src/vhost_user/vu_common_ctrl.rs b/virtio-devices/src/vhost_user/vu_common_ctrl.rs index 3aa363444..53d273c67 100644 --- a/virtio-devices/src/vhost_user/vu_common_ctrl.rs +++ b/virtio-devices/src/vhost_user/vu_common_ctrl.rs @@ -173,7 +173,7 @@ impl VhostUserHandle { // at early stage. for (queue_index, queue) in queues.iter().enumerate() { self.vu - .set_vring_num(queue_index, queue.max_size()) + .set_vring_num(queue_index, queue.state.size) .map_err(Error::VhostUserSetVringNum)?; } @@ -184,7 +184,7 @@ impl VhostUserHandle { mmap_size: 0, mmap_offset: 0, num_queues: queues.len() as u16, - queue_size: queues[0].max_size(), + queue_size: queues[0].state.size, }; let (info, fd) = self .vu @@ -203,11 +203,11 @@ impl VhostUserHandle { let mut vrings_info = Vec::new(); for (queue_index, queue) in queues.into_iter().enumerate() { - let actual_size: usize = queue.max_size().try_into().unwrap(); + let actual_size: usize = queue.state.size.try_into().unwrap(); let config_data = VringConfigData { queue_max_size: queue.max_size(), - queue_size: queue.max_size(), + queue_size: queue.state.size, flags: 0u32, desc_table_addr: get_host_address_range( mem,