@@ -72,7 +72,7 @@ use crate::vmm_config::boot_source::BootConfig;
7272use crate :: vmm_config:: instance_info:: InstanceInfo ;
7373use crate :: vmm_config:: machine_config:: { MachineConfig , MachineConfigError } ;
7474use crate :: vstate:: kvm:: Kvm ;
75- use crate :: vstate:: memory:: { GuestAddress , GuestMemory , GuestMemoryMmap } ;
75+ use crate :: vstate:: memory:: { GuestAddress , GuestMemory , GuestMemoryMmap , GuestRegionMmap } ;
7676use crate :: vstate:: vcpu:: { Vcpu , VcpuConfig , VcpuError } ;
7777use crate :: vstate:: vm:: Vm ;
7878use crate :: { EventManager , Vmm , VmmError , device_manager} ;
@@ -154,7 +154,6 @@ impl std::convert::From<linux_loader::cmdline::Error> for StartMicrovmError {
154154fn create_vmm_and_vcpus (
155155 instance_info : & InstanceInfo ,
156156 event_manager : & mut EventManager ,
157- guest_memory : GuestMemoryMmap ,
158157 uffd : Option < Uffd > ,
159158 vcpu_count : u8 ,
160159 kvm_capabilities : Vec < KvmCapability > ,
@@ -163,7 +162,6 @@ fn create_vmm_and_vcpus(
163162 // Set up Kvm Vm and register memory regions.
164163 // Build custom CPU config if a custom template is provided.
165164 let mut vm = Vm :: new ( & kvm) ?;
166- vm. memory_init ( guest_memory) ?;
167165
168166 let resource_allocator = ResourceAllocator :: new ( ) ?;
169167
@@ -250,12 +248,18 @@ pub fn build_microvm_for_boot(
250248 let ( mut vmm, mut vcpus) = create_vmm_and_vcpus (
251249 instance_info,
252250 event_manager,
253- guest_memory,
254251 None ,
255252 vm_resources. machine_config . vcpu_count ,
256253 cpu_template. kvm_capabilities . clone ( ) ,
257254 ) ?;
258255
256+ for region in guest_memory {
257+ vmm. vm
258+ . register_memory_region ( region)
259+ . map_err ( VmmError :: Vm )
260+ . map_err ( StartMicrovmError :: Internal ) ?;
261+ }
262+
259263 let entry_point = load_kernel ( boot_config, vmm. guest_memory ( ) ) ?;
260264 let initrd = load_initrd_from_config ( boot_config, vmm. guest_memory ( ) ) ?;
261265
@@ -433,7 +437,7 @@ pub fn build_microvm_from_snapshot(
433437 instance_info : & InstanceInfo ,
434438 event_manager : & mut EventManager ,
435439 microvm_state : MicrovmState ,
436- guest_memory : GuestMemoryMmap ,
440+ guest_memory : Vec < GuestRegionMmap > ,
437441 uffd : Option < Uffd > ,
438442 seccomp_filters : & BpfThreadMap ,
439443 vm_resources : & mut VmResources ,
@@ -443,13 +447,17 @@ pub fn build_microvm_from_snapshot(
443447 let ( mut vmm, mut vcpus) = create_vmm_and_vcpus (
444448 instance_info,
445449 event_manager,
446- guest_memory,
447450 uffd,
448451 vm_resources. machine_config . vcpu_count ,
449452 microvm_state. kvm_state . kvm_cap_modifiers . clone ( ) ,
450453 )
451454 . map_err ( Internal ) ?;
452455
456+ vmm. vm
457+ . register_memory_regions ( guest_memory)
458+ . map_err ( VmmError :: Vm )
459+ . map_err ( StartMicrovmError :: Internal ) ?;
460+
453461 #[ cfg( target_arch = "x86_64" ) ]
454462 {
455463 // Scale TSC to match, extract the TSC freq from the state if specified
0 commit comments