mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
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 <sebastien.boeuf@intel.com>
This commit is contained in:
@@ -2430,10 +2430,7 @@ impl DeviceManager {
|
|||||||
let mm = self.memory_manager.clone();
|
let mm = self.memory_manager.clone();
|
||||||
let mm = mm.lock().unwrap();
|
let mm = mm.lock().unwrap();
|
||||||
for (_memory_zone_id, memory_zone) in mm.memory_zones().iter() {
|
for (_memory_zone_id, memory_zone) in mm.memory_zones().iter() {
|
||||||
if let (Some(region), Some(resize)) = (
|
if let Some(virtio_mem_zone) = memory_zone.virtio_mem_zone() {
|
||||||
memory_zone.virtio_mem_region(),
|
|
||||||
memory_zone.virtio_mem_resize(),
|
|
||||||
) {
|
|
||||||
let id = self.next_device_name(MEM_DEVICE_NAME_PREFIX)?;
|
let id = self.next_device_name(MEM_DEVICE_NAME_PREFIX)?;
|
||||||
|
|
||||||
#[cfg(not(feature = "acpi"))]
|
#[cfg(not(feature = "acpi"))]
|
||||||
@@ -2445,8 +2442,9 @@ impl DeviceManager {
|
|||||||
let virtio_mem_device = Arc::new(Mutex::new(
|
let virtio_mem_device = Arc::new(Mutex::new(
|
||||||
virtio_devices::Mem::new(
|
virtio_devices::Mem::new(
|
||||||
id.clone(),
|
id.clone(),
|
||||||
®ion,
|
virtio_mem_zone.region(),
|
||||||
resize
|
virtio_mem_zone
|
||||||
|
.resize_handler()
|
||||||
.try_clone()
|
.try_clone()
|
||||||
.map_err(DeviceManagerError::TryCloneVirtioMemResize)?,
|
.map_err(DeviceManagerError::TryCloneVirtioMemResize)?,
|
||||||
self.seccomp_action.clone(),
|
self.seccomp_action.clone(),
|
||||||
|
|||||||
+27
-12
@@ -64,22 +64,32 @@ struct HotPlugState {
|
|||||||
removing: bool,
|
removing: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct VirtioMemZone {
|
||||||
|
region: Arc<GuestRegionMmap>,
|
||||||
|
resize_handler: virtio_devices::Resize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl VirtioMemZone {
|
||||||
|
pub fn region(&self) -> &Arc<GuestRegionMmap> {
|
||||||
|
&self.region
|
||||||
|
}
|
||||||
|
pub fn resize_handler(&self) -> &virtio_devices::Resize {
|
||||||
|
&self.resize_handler
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct MemoryZone {
|
pub struct MemoryZone {
|
||||||
regions: Vec<Arc<GuestRegionMmap>>,
|
regions: Vec<Arc<GuestRegionMmap>>,
|
||||||
virtio_mem_region: Option<Arc<GuestRegionMmap>>,
|
virtio_mem_zone: Option<VirtioMemZone>,
|
||||||
virtio_mem_resize: Option<virtio_devices::Resize>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MemoryZone {
|
impl MemoryZone {
|
||||||
pub fn regions(&self) -> &Vec<Arc<GuestRegionMmap>> {
|
pub fn regions(&self) -> &Vec<Arc<GuestRegionMmap>> {
|
||||||
&self.regions
|
&self.regions
|
||||||
}
|
}
|
||||||
pub fn virtio_mem_region(&self) -> &Option<Arc<GuestRegionMmap>> {
|
pub fn virtio_mem_zone(&self) -> &Option<VirtioMemZone> {
|
||||||
&self.virtio_mem_region
|
&self.virtio_mem_zone
|
||||||
}
|
|
||||||
pub fn virtio_mem_resize(&self) -> &Option<virtio_devices::Resize> {
|
|
||||||
&self.virtio_mem_resize
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -598,9 +608,11 @@ impl MemoryManager {
|
|||||||
|
|
||||||
virtio_mem_regions.push(region.clone());
|
virtio_mem_regions.push(region.clone());
|
||||||
|
|
||||||
memory_zone.virtio_mem_region = Some(region);
|
memory_zone.virtio_mem_zone = Some(VirtioMemZone {
|
||||||
memory_zone.virtio_mem_resize =
|
region,
|
||||||
Some(virtio_devices::Resize::new().map_err(Error::EventFdFail)?);
|
resize_handler: virtio_devices::Resize::new()
|
||||||
|
.map_err(Error::EventFdFail)?,
|
||||||
|
});
|
||||||
|
|
||||||
start_of_device_area = start_addr.unchecked_add(hotplug_size);
|
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> {
|
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(memory_zone) = self.memory_zones.get_mut(id) {
|
||||||
if let Some(resize) = &memory_zone.virtio_mem_resize {
|
if let Some(virtio_mem_zone) = memory_zone.virtio_mem_zone() {
|
||||||
resize.work(size).map_err(Error::VirtioMemResizeFail)?;
|
virtio_mem_zone
|
||||||
|
.resize_handler()
|
||||||
|
.work(size)
|
||||||
|
.map_err(Error::VirtioMemResizeFail)?;
|
||||||
} else {
|
} else {
|
||||||
error!("Failed resizing virtio-mem region: No virtio-mem handler");
|
error!("Failed resizing virtio-mem region: No virtio-mem handler");
|
||||||
return Err(Error::MissingVirtioMemHandler);
|
return Err(Error::MissingVirtioMemHandler);
|
||||||
|
|||||||
Reference in New Issue
Block a user