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)?;