From 3faf8605f364b7386591e09bc6c1aeece2e4697e Mon Sep 17 00:00:00 2001 From: Sebastien Boeuf Date: Mon, 14 Sep 2020 22:24:36 +0200 Subject: [PATCH] vmm: Group virtio-mem fields under a dedicated structure This patch simplifies the code as we have one single Option for the VirtioMemZone. This also prepares for storing additional information related to the virtio-mem region. Signed-off-by: Sebastien Boeuf --- vmm/src/device_manager.rs | 10 ++++------ vmm/src/memory_manager.rs | 39 +++++++++++++++++++++++++++------------ 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/vmm/src/device_manager.rs b/vmm/src/device_manager.rs index d2267191d..40a88371a 100644 --- a/vmm/src/device_manager.rs +++ b/vmm/src/device_manager.rs @@ -2430,10 +2430,7 @@ impl DeviceManager { let mm = self.memory_manager.clone(); let mm = mm.lock().unwrap(); for (_memory_zone_id, memory_zone) in mm.memory_zones().iter() { - if let (Some(region), Some(resize)) = ( - memory_zone.virtio_mem_region(), - memory_zone.virtio_mem_resize(), - ) { + if let Some(virtio_mem_zone) = memory_zone.virtio_mem_zone() { let id = self.next_device_name(MEM_DEVICE_NAME_PREFIX)?; #[cfg(not(feature = "acpi"))] @@ -2445,8 +2442,9 @@ impl DeviceManager { let virtio_mem_device = Arc::new(Mutex::new( virtio_devices::Mem::new( id.clone(), - ®ion, - resize + virtio_mem_zone.region(), + virtio_mem_zone + .resize_handler() .try_clone() .map_err(DeviceManagerError::TryCloneVirtioMemResize)?, self.seccomp_action.clone(), diff --git a/vmm/src/memory_manager.rs b/vmm/src/memory_manager.rs index 7d9d9d092..2cfdbbbee 100644 --- a/vmm/src/memory_manager.rs +++ b/vmm/src/memory_manager.rs @@ -64,22 +64,32 @@ struct HotPlugState { removing: bool, } +pub struct VirtioMemZone { + region: Arc, + resize_handler: virtio_devices::Resize, +} + +impl VirtioMemZone { + pub fn region(&self) -> &Arc { + &self.region + } + pub fn resize_handler(&self) -> &virtio_devices::Resize { + &self.resize_handler + } +} + #[derive(Default)] pub struct MemoryZone { regions: Vec>, - virtio_mem_region: Option>, - virtio_mem_resize: Option, + virtio_mem_zone: Option, } impl MemoryZone { pub fn regions(&self) -> &Vec> { &self.regions } - pub fn virtio_mem_region(&self) -> &Option> { - &self.virtio_mem_region - } - pub fn virtio_mem_resize(&self) -> &Option { - &self.virtio_mem_resize + pub fn virtio_mem_zone(&self) -> &Option { + &self.virtio_mem_zone } } @@ -598,9 +608,11 @@ impl MemoryManager { virtio_mem_regions.push(region.clone()); - memory_zone.virtio_mem_region = Some(region); - memory_zone.virtio_mem_resize = - Some(virtio_devices::Resize::new().map_err(Error::EventFdFail)?); + memory_zone.virtio_mem_zone = Some(VirtioMemZone { + region, + resize_handler: virtio_devices::Resize::new() + .map_err(Error::EventFdFail)?, + }); start_of_device_area = start_addr.unchecked_add(hotplug_size); } @@ -1186,8 +1198,11 @@ impl MemoryManager { pub fn virtio_mem_resize(&mut self, id: &str, size: u64) -> Result<(), Error> { if let Some(memory_zone) = self.memory_zones.get_mut(id) { - if let Some(resize) = &memory_zone.virtio_mem_resize { - resize.work(size).map_err(Error::VirtioMemResizeFail)?; + if let Some(virtio_mem_zone) = memory_zone.virtio_mem_zone() { + virtio_mem_zone + .resize_handler() + .work(size) + .map_err(Error::VirtioMemResizeFail)?; } else { error!("Failed resizing virtio-mem region: No virtio-mem handler"); return Err(Error::MissingVirtioMemHandler);