From cdaa4d3ad7274768cc2ba950dc561c11ffbf9d23 Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Thu, 20 May 2021 23:43:40 +0200 Subject: [PATCH] virtio-devices: vhost_user: Set features once acknowledged by guest Make sure the virtio features are set upon device activation. At the time the device is activated, we know the guest acknowledged the features, which mean it's safe to set them back to the backend. Signed-off-by: Sebastien Boeuf --- virtio-devices/src/vhost_user/blk.rs | 2 ++ virtio-devices/src/vhost_user/fs.rs | 2 ++ virtio-devices/src/vhost_user/net.rs | 2 ++ virtio-devices/src/vhost_user/vu_common_ctrl.rs | 4 ++++ 4 files changed, 10 insertions(+) diff --git a/virtio-devices/src/vhost_user/blk.rs b/virtio-devices/src/vhost_user/blk.rs index fca5cd6bd..d6469711e 100644 --- a/virtio-devices/src/vhost_user/blk.rs +++ b/virtio-devices/src/vhost_user/blk.rs @@ -233,6 +233,8 @@ impl VirtioDevice for Blk { queues, queue_evts, &interrupt_cb, + self.common.acked_features + | (self.common.avail_features & VhostUserVirtioFeatures::PROTOCOL_FEATURES.bits()), ) .map_err(ActivateError::VhostUserBlkSetup)?; diff --git a/virtio-devices/src/vhost_user/fs.rs b/virtio-devices/src/vhost_user/fs.rs index d22dc3fa2..8363c5dab 100644 --- a/virtio-devices/src/vhost_user/fs.rs +++ b/virtio-devices/src/vhost_user/fs.rs @@ -474,6 +474,8 @@ impl VirtioDevice for Fs { queues, queue_evts, &interrupt_cb, + self.common.acked_features + | (self.common.avail_features & VhostUserVirtioFeatures::PROTOCOL_FEATURES.bits()), ) .map_err(ActivateError::VhostUserFsSetup)?; diff --git a/virtio-devices/src/vhost_user/net.rs b/virtio-devices/src/vhost_user/net.rs index a4738a22b..09f4396e7 100644 --- a/virtio-devices/src/vhost_user/net.rs +++ b/virtio-devices/src/vhost_user/net.rs @@ -226,6 +226,8 @@ impl VirtioDevice for Net { queues, queue_evts, &interrupt_cb, + self.common.acked_features + | (self.common.avail_features & VhostUserVirtioFeatures::PROTOCOL_FEATURES.bits()), ) .map_err(ActivateError::VhostUserNetSetup)?; diff --git a/virtio-devices/src/vhost_user/vu_common_ctrl.rs b/virtio-devices/src/vhost_user/vu_common_ctrl.rs index 1b6375e1a..aca14033f 100644 --- a/virtio-devices/src/vhost_user/vu_common_ctrl.rs +++ b/virtio-devices/src/vhost_user/vu_common_ctrl.rs @@ -74,7 +74,11 @@ pub fn setup_vhost_user( queues: Vec, queue_evts: Vec, virtio_interrupt: &Arc, + acked_features: u64, ) -> Result<()> { + vu.set_features(acked_features) + .map_err(Error::VhostUserSetFeatures)?; + // Let's first provide the memory table to the backend. update_mem_table(vu, mem)?;