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 <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2020-01-10 15:52:23 +00:00 committed by Samuel Ortiz
parent 78dcb1862c
commit 82fce5a4e2
4 changed files with 17 additions and 4 deletions

View File

@ -116,6 +116,7 @@ pub struct VmmPingResponse {
#[derive(Clone, Deserialize, Serialize)]
pub struct VmResizeData {
pub desired_vcpus: Option<u8>,
pub desired_ram: Option<u64>,
}
pub enum ApiResponsePayload {

View File

@ -432,3 +432,5 @@ components:
desired_vcpus:
minimum: 1
type: integer
desired_ram:
type: integer

View File

@ -330,9 +330,13 @@ impl Vmm {
self.vm_delete()
}
fn vm_resize(&mut self, desired_vcpus: Option<u8>) -> result::Result<(), VmError> {
fn vm_resize(
&mut self,
desired_vcpus: Option<u8>,
desired_ram: Option<u64>,
) -> 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)?;

View File

@ -482,7 +482,7 @@ impl Vm {
Ok(())
}
pub fn resize(&mut self, desired_vcpus: Option<u8>) -> Result<()> {
pub fn resize(&mut self, desired_vcpus: Option<u8>, desired_memory: Option<u64>) -> 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(())
}