@@ -67,7 +67,7 @@ use crate::vmm_config::instance_info::InstanceInfo;
67
67
use crate :: vmm_config:: machine_config:: MachineConfigError ;
68
68
use crate :: vmm_config:: snapshot:: { LoadSnapshotParams , MemBackendType } ;
69
69
use crate :: vstate:: kvm:: Kvm ;
70
- use crate :: vstate:: memory:: { MaybeBounce , create_memfd} ;
70
+ use crate :: vstate:: memory:: { MaybeBounce , MemoryError , create_memfd} ;
71
71
use crate :: vstate:: vcpu:: { Vcpu , VcpuError } ;
72
72
use crate :: vstate:: vm:: { GUEST_MEMFD_FLAG_NO_DIRECT_MAP , GUEST_MEMFD_FLAG_SUPPORT_SHARED , Vm } ;
73
73
use crate :: { EventManager , Vmm , VmmError , device_manager} ;
@@ -482,10 +482,10 @@ pub enum BuildMicrovmFromSnapshotError {
482
482
/// Failed to load guest memory: {0}
483
483
GuestMemory ( #[ from] BuildMicrovmFromSnapshotErrorGuestMemoryError ) ,
484
484
/// Userfault bitmap memfd error: {0}
485
- UserfaultBitmapMemfd ( #[ from] crate :: vstate :: memory :: MemoryError ) ,
485
+ UserfaultBitmapMemfd ( #[ from] MemoryError ) ,
486
486
}
487
487
488
- fn memfd_to_slice ( memfd : & Option < File > ) -> Option < & mut [ u8 ] > {
488
+ fn memfd_to_slice ( memfd : & Option < File > ) -> Result < Option < & mut [ u8 ] > , MemoryError > {
489
489
if let Some ( bitmap_file) = memfd {
490
490
let len = u64_to_usize (
491
491
bitmap_file
@@ -507,16 +507,15 @@ fn memfd_to_slice(memfd: &Option<File>) -> Option<&mut [u8]> {
507
507
} ;
508
508
509
509
if bitmap_addr == libc:: MAP_FAILED {
510
- panic ! (
511
- "Failed to mmap userfault bitmap file: {}" ,
512
- std:: io:: Error :: last_os_error( )
513
- ) ;
510
+ return Err ( MemoryError :: Mmap ( std:: io:: Error :: last_os_error ( ) ) ) ;
514
511
}
515
512
516
513
// SAFETY: `bitmap_addr` is a valid memory address returned by `mmap`.
517
- Some ( unsafe { std:: slice:: from_raw_parts_mut ( bitmap_addr. cast ( ) , len) } )
514
+ Ok ( Some ( unsafe {
515
+ std:: slice:: from_raw_parts_mut ( bitmap_addr. cast ( ) , len)
516
+ } ) )
518
517
} else {
519
- None
518
+ Ok ( None )
520
519
}
521
520
}
522
521
@@ -616,7 +615,7 @@ pub fn build_microvm_from_snapshot(
616
615
}
617
616
} ;
618
617
619
- let mut userfault_bitmap = memfd_to_slice ( & userfault_bitmap_memfd) ;
618
+ let mut userfault_bitmap = memfd_to_slice ( & userfault_bitmap_memfd) ? ;
620
619
if let Some ( ref mut slice) = userfault_bitmap {
621
620
// Set all bits so a fault on any page will cause a VM exit
622
621
slice. fill ( 0xffu8 ) ;
0 commit comments