From 058946772af7d142af9dc3a6aa22b08807ce5d60 Mon Sep 17 00:00:00 2001 From: Jiachen Zhang Date: Thu, 3 Jun 2021 12:10:03 +0800 Subject: [PATCH] virtio-devices: vhost_user: Set proper avail index to vhost-user backend We should try to read the last avail index from the vring memory aera. This is necessary when handling vhost-user socket reconnection. Signed-off-by: Jiachen Zhang --- virtio-devices/src/vhost_user/mod.rs | 3 +++ virtio-devices/src/vhost_user/vu_common_ctrl.rs | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/virtio-devices/src/vhost_user/mod.rs b/virtio-devices/src/vhost_user/mod.rs index 3acdf61cd..698bd2c05 100644 --- a/virtio-devices/src/vhost_user/mod.rs +++ b/virtio-devices/src/vhost_user/mod.rs @@ -15,6 +15,7 @@ use vhost::vhost_user::message::VhostUserVirtioFeatures; use vhost::vhost_user::Master; use vhost::Error as VhostError; use vm_memory::{Error as MmapError, GuestAddressSpace, GuestMemoryAtomic}; +use vm_virtio::Error as VirtioError; use vmm_sys_util::eventfd::EventFd; use vu_common_ctrl::{connect_vhost_user, reinitialize_vhost_user}; @@ -111,6 +112,8 @@ pub enum Error { MissingRegionFd, /// Missing IrqFd MissingIrqFd, + /// Failed getting the available index. + GetAvailableIndex(VirtioError), } type Result = std::result::Result; diff --git a/virtio-devices/src/vhost_user/vu_common_ctrl.rs b/virtio-devices/src/vhost_user/vu_common_ctrl.rs index 21caffe98..834685add 100644 --- a/virtio-devices/src/vhost_user/vu_common_ctrl.rs +++ b/virtio-devices/src/vhost_user/vu_common_ctrl.rs @@ -143,8 +143,13 @@ pub fn setup_vhost_user( vu.set_vring_addr(queue_index, &config_data) .map_err(Error::VhostUserSetVringAddr)?; - vu.set_vring_base(queue_index, 0u16) - .map_err(Error::VhostUserSetVringBase)?; + vu.set_vring_base( + queue_index, + queue + .avail_index_from_memory(mem) + .map_err(Error::GetAvailableIndex)?, + ) + .map_err(Error::VhostUserSetVringBase)?; if let Some(eventfd) = virtio_interrupt.notifier(&VirtioInterruptType::Queue, Some(&queue)) {