From d75e7456fc1fbd7e002edab98662ff6e84b49eef Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Mon, 23 Mar 2020 13:47:55 +0100 Subject: [PATCH] vm-virtio: vhost-user: Send memory update to the backend In order to keep vhost-user backend to work across guest memory resizing happening when memory is hot-plugged or hot-unplugged, both blk, net and fs devices are implementing the notifier to let the backend know. Signed-off-by: Sebastien Boeuf --- vm-virtio/src/vhost_user/blk.rs | 4 ++++ vm-virtio/src/vhost_user/fs.rs | 6 +++++- vm-virtio/src/vhost_user/net.rs | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/vm-virtio/src/vhost_user/blk.rs b/vm-virtio/src/vhost_user/blk.rs index c7f441368..e5d183ffa 100644 --- a/vm-virtio/src/vhost_user/blk.rs +++ b/vm-virtio/src/vhost_user/blk.rs @@ -321,6 +321,10 @@ impl VirtioDevice for Blk { fn shutdown(&mut self) { let _ = unsafe { libc::close(self.vhost_user_blk.as_raw_fd()) }; } + + fn update_memory(&mut self, mem: &GuestMemoryMmap) -> std::result::Result<(), crate::Error> { + update_mem_table(&mut self.vhost_user_blk, mem).map_err(crate::Error::VhostUserUpdateMemory) + } } virtio_pausable!(Blk); diff --git a/vm-virtio/src/vhost_user/fs.rs b/vm-virtio/src/vhost_user/fs.rs index fe15eca62..e430eefa2 100644 --- a/vm-virtio/src/vhost_user/fs.rs +++ b/vm-virtio/src/vhost_user/fs.rs @@ -1,7 +1,7 @@ // Copyright 2019 Intel Corporation. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -use super::vu_common_ctrl::{reset_vhost_user, setup_vhost_user}; +use super::vu_common_ctrl::{reset_vhost_user, setup_vhost_user, update_mem_table}; use super::Error as DeviceError; use super::{Error, Result}; use crate::vhost_user::handler::{VhostUserEpollConfig, VhostUserEpollHandler}; @@ -529,6 +529,10 @@ impl VirtioDevice for Fs { None } } + + fn update_memory(&mut self, mem: &GuestMemoryMmap) -> std::result::Result<(), crate::Error> { + update_mem_table(&mut self.vu, mem).map_err(crate::Error::VhostUserUpdateMemory) + } } virtio_pausable!(Fs); diff --git a/vm-virtio/src/vhost_user/net.rs b/vm-virtio/src/vhost_user/net.rs index 358ceff79..293525dcf 100644 --- a/vm-virtio/src/vhost_user/net.rs +++ b/vm-virtio/src/vhost_user/net.rs @@ -358,6 +358,10 @@ impl VirtioDevice for Net { fn shutdown(&mut self) { let _ = unsafe { libc::close(self.vhost_user_net.as_raw_fd()) }; } + + fn update_memory(&mut self, mem: &GuestMemoryMmap) -> std::result::Result<(), crate::Error> { + update_mem_table(&mut self.vhost_user_net, mem).map_err(crate::Error::VhostUserUpdateMemory) + } } virtio_ctrl_q_pausable!(Net);