In case this function resulted in adding a new memory region to the guest memory, the new region is returned to the caller. The virtio-mem use case never adds a new region as the whole hotpluggable memory has already been allocated at boot time.
(&mut self, desired_ram: u64)
| 2457 | /// use case never adds a new region as the whole hotpluggable memory has |
| 2458 | /// already been allocated at boot time. |
| 2459 | pub fn resize(&mut self, desired_ram: u64) -> Result<Option<Arc<GuestRegionMmap>>, Error> { |
| 2460 | if self.user_provided_zones { |
| 2461 | error!( |
| 2462 | "Not allowed to resize guest memory when backed with user \ |
| 2463 | defined memory zones." |
| 2464 | ); |
| 2465 | return Err(Error::InvalidResizeWithMemoryZones); |
| 2466 | } |
| 2467 | |
| 2468 | let mut region: Option<Arc<GuestRegionMmap>> = None; |
| 2469 | match self.hotplug_method { |
| 2470 | HotplugMethod::VirtioMem => { |
| 2471 | if desired_ram >= self.boot_ram { |
| 2472 | if !self.dynamic { |
| 2473 | return Ok(region); |
| 2474 | } |
| 2475 | |
| 2476 | self.virtio_mem_resize(DEFAULT_MEMORY_ZONE, desired_ram - self.boot_ram)?; |
| 2477 | self.current_ram = desired_ram; |
| 2478 | } |
| 2479 | } |
| 2480 | HotplugMethod::Acpi => { |
| 2481 | if desired_ram > self.current_ram { |
| 2482 | if !self.dynamic { |
| 2483 | return Ok(region); |
| 2484 | } |
| 2485 | |
| 2486 | region = |
| 2487 | Some(self.hotplug_ram_region((desired_ram - self.current_ram) as usize)?); |
| 2488 | self.current_ram = desired_ram; |
| 2489 | } |
| 2490 | } |
| 2491 | } |
| 2492 | Ok(region) |
| 2493 | } |
| 2494 | |
| 2495 | pub fn resize_zone(&mut self, id: &str, virtio_mem_size: u64) -> Result<(), Error> { |
| 2496 | if !self.user_provided_zones { |
no test coverage detected