From 82fce5a4e292e91c04586540cf7cf06b73fd0324 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Fri, 10 Jan 2020 15:52:23 +0000 Subject: [PATCH] vmm: Add support for resizing the memory used by the VM For now the new memory size is only used after a reboot but support for hotplugging memory will be added in a later commit. Signed-off-by: Rob Bradford --- vmm/src/api/mod.rs | 1 + vmm/src/api/openapi/cloud-hypervisor.yaml | 2 ++ vmm/src/lib.rs | 13 ++++++++++--- vmm/src/vm.rs | 5 ++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/vmm/src/api/mod.rs b/vmm/src/api/mod.rs index 23514c609..f3a8019c4 100644 --- a/vmm/src/api/mod.rs +++ b/vmm/src/api/mod.rs @@ -116,6 +116,7 @@ pub struct VmmPingResponse { #[derive(Clone, Deserialize, Serialize)] pub struct VmResizeData { pub desired_vcpus: Option, + pub desired_ram: Option, } pub enum ApiResponsePayload { diff --git a/vmm/src/api/openapi/cloud-hypervisor.yaml b/vmm/src/api/openapi/cloud-hypervisor.yaml index a4366cb79..f88416dcc 100644 --- a/vmm/src/api/openapi/cloud-hypervisor.yaml +++ b/vmm/src/api/openapi/cloud-hypervisor.yaml @@ -432,3 +432,5 @@ components: desired_vcpus: minimum: 1 type: integer + desired_ram: + type: integer diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs index 008f8b9bb..0416ac127 100644 --- a/vmm/src/lib.rs +++ b/vmm/src/lib.rs @@ -330,9 +330,13 @@ impl Vmm { self.vm_delete() } - fn vm_resize(&mut self, desired_vcpus: Option) -> result::Result<(), VmError> { + fn vm_resize( + &mut self, + desired_vcpus: Option, + desired_ram: Option, + ) -> result::Result<(), VmError> { if let Some(ref mut vm) = self.vm { - vm.resize(desired_vcpus) + vm.resize(desired_vcpus, desired_ram) } else { Err(VmError::VmNotRunning) } @@ -485,7 +489,10 @@ impl Vmm { } ApiRequest::VmResize(resize_data, sender) => { let response = self - .vm_resize(resize_data.desired_vcpus) + .vm_resize( + resize_data.desired_vcpus, + resize_data.desired_ram, + ) .map_err(ApiError::VmResize) .map(|_| ApiResponsePayload::Empty); sender.send(response).map_err(Error::ApiResponseSend)?; diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index 1a933f8e4..06a72bd9c 100755 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -482,7 +482,7 @@ impl Vm { Ok(()) } - pub fn resize(&mut self, desired_vcpus: Option) -> Result<()> { + pub fn resize(&mut self, desired_vcpus: Option, desired_memory: Option) -> Result<()> { if let Some(desired_vcpus) = desired_vcpus { self.cpu_manager .lock() @@ -495,6 +495,9 @@ impl Vm { self.config.lock().unwrap().cpus.boot_vcpus = desired_vcpus; } + if let Some(desired_memory) = desired_memory { + self.config.lock().unwrap().memory.size = desired_memory; + } Ok(()) }