diff --git a/vmm/src/lib.rs b/vmm/src/lib.rs index 311ec84b8..be9ebf929 100644 --- a/vmm/src/lib.rs +++ b/vmm/src/lib.rs @@ -892,7 +892,7 @@ impl Vmm { }, Configured(memory_manager, guest_memory) => match req.command() { Command::Memory => { - self.vm_receive_memory(req, socket, &guest_memory)?; + migration_transport::receive_memory_ranges(&guest_memory, req, socket)?; Ok(Configured(memory_manager, guest_memory)) } Command::State => { @@ -1070,18 +1070,6 @@ impl Vmm { Ok(()) } - fn vm_receive_memory( - &mut self, - req: &Request, - socket: &mut SocketStream, - guest_mem: &GuestMemoryAtomic, - ) -> std::result::Result<(), MigratableError> { - let table = MemoryRangeTable::read_from(socket, req.length())?; - - // And then the memory itself - migration_transport::receive_memory_ranges(guest_mem, &table, socket) - } - /// Performs the initial memory transmission (iteration zero) plus a /// variable number of memory iterations with the goal to eventually migrate /// the VM in a reasonably small downtime. diff --git a/vmm/src/migration_transport.rs b/vmm/src/migration_transport.rs index cda22dfac..629412214 100644 --- a/vmm/src/migration_transport.rs +++ b/vmm/src/migration_transport.rs @@ -19,7 +19,7 @@ use vm_memory::{ Bytes, GuestAddress, GuestAddressSpace, GuestMemoryAtomic, ReadVolatile, VolatileMemoryError, VolatileSlice, WriteVolatile, }; -use vm_migration::protocol::{MemoryRangeTable, Request, Response}; +use vm_migration::protocol::{Command, MemoryRangeTable, Request, Response}; use vm_migration::{MigratableError, Snapshot}; use crate::{GuestMemoryMmap, VmMigrationConfig}; @@ -366,12 +366,17 @@ pub(crate) fn send_memory_ranges( ) } -/// Receive memory contents for the given range table into guest memory. +/// Receive memory contents for the given request and copy it into guest memory. pub(crate) fn receive_memory_ranges( guest_memory: &GuestMemoryAtomic, - ranges: &MemoryRangeTable, + req: &Request, socket: &mut SocketStream, ) -> Result<(), MigratableError> { + debug_assert_eq!(req.command(), Command::Memory); + // Read the memory table + let ranges = MemoryRangeTable::read_from(socket, req.length())?; + + // And then the memory itself let mem = guest_memory.memory(); for range in ranges.regions() {