From 1daef5e8c9ff6527dbe380b98dc2df5b0f42e957 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Fri, 14 Jan 2022 08:19:43 +0000 Subject: [PATCH] vmm: Propagate the set of memory slots to FDs received in migration Create the VM using the FDs (wrapped in Files) that have been received during the migration process. Signed-off-by: Rob Bradford --- vmm/src/lib.rs | 11 +++++++++-- vmm/src/vm.rs | 4 +++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs index 5d4731b1d..3510503d1 100644 --- a/vmm/src/lib.rs +++ b/vmm/src/lib.rs @@ -29,6 +29,7 @@ use memory_manager::MemoryManagerSnapshotData; use pci::PciBdf; use seccompiler::{apply_filter, SeccompAction}; use serde::ser::{Serialize, SerializeStruct, Serializer}; +use std::collections::HashMap; use std::fs::File; use std::io; use std::io::{Read, Write}; @@ -753,6 +754,7 @@ impl Vmm { &mut self, req: &Request, socket: &mut T, + existing_memory_files: Option>, ) -> std::result::Result where T: Read + Write, @@ -794,6 +796,7 @@ impl Vmm { self.hypervisor.clone(), activate_evt, &vm_migration_config.memory_manager_data, + existing_memory_files, ) .map_err(|e| { MigratableError::MigrateReceive(anyhow!("Error creating VM from snapshot: {:?}", e)) @@ -886,7 +889,7 @@ impl Vmm { let mut started = false; let mut vm: Option = None; - + let mut existing_memory_files = None; loop { let req = Request::read_from(&mut socket)?; match req.command() { @@ -905,7 +908,11 @@ impl Vmm { Response::error().write_to(&mut socket)?; continue; } - vm = Some(self.vm_receive_config(&req, &mut socket)?); + vm = Some(self.vm_receive_config( + &req, + &mut socket, + existing_memory_files.take(), + )?); } Command::State => { info!("State Command Received"); diff --git a/vmm/src/vm.rs b/vmm/src/vm.rs index ecd6f1057..8f549deb2 100644 --- a/vmm/src/vm.rs +++ b/vmm/src/vm.rs @@ -867,6 +867,7 @@ impl Vm { ) } + #[allow(clippy::too_many_arguments)] pub fn new_from_migration( config: Arc>, exit_evt: EventFd, @@ -875,6 +876,7 @@ impl Vm { hypervisor: Arc, activate_evt: EventFd, memory_manager_data: &MemoryManagerSnapshotData, + existing_memory_files: Option>, ) -> Result { hypervisor.check_required_extensions().unwrap(); let vm = hypervisor.create_vm().unwrap(); @@ -897,7 +899,7 @@ impl Vm { #[cfg(feature = "tdx")] false, Some(memory_manager_data), - None, + existing_memory_files, #[cfg(target_arch = "x86_64")] None, )