@@ -14,13 +14,6 @@ use std::sync::{Arc, Mutex};
1414use  event_manager:: { MutEventSubscriber ,  SubscriberOps } ; 
1515use  libc:: EFD_NONBLOCK ; 
1616use  linux_loader:: cmdline:: Cmdline  as  LoaderKernelCmdline ; 
17- use  linux_loader:: loader:: KernelLoader ; 
18- #[ cfg( target_arch = "x86_64" ) ]  
19- use  linux_loader:: loader:: elf:: Elf  as  Loader ; 
20- #[ cfg( target_arch = "x86_64" ) ]  
21- use  linux_loader:: loader:: elf:: PvhBootCapability ; 
22- #[ cfg( target_arch = "aarch64" ) ]  
23- use  linux_loader:: loader:: pe:: PE  as  Loader ; 
2417use  userfaultfd:: Uffd ; 
2518use  utils:: time:: TimestampUs ; 
2619#[ cfg( target_arch = "aarch64" ) ]  
@@ -30,7 +23,7 @@ use vmm_sys_util::eventfd::EventFd;
3023
3124#[ cfg( target_arch = "x86_64" ) ]  
3225use  crate :: acpi; 
33- use  crate :: arch:: { BootProtocol ,  EntryPoint } ; 
26+ use  crate :: arch:: { ConfigurationError ,  EntryPoint ,  load_kernel } ; 
3427#[ cfg( target_arch = "aarch64" ) ]  
3528use  crate :: construct_kvm_mpidrs; 
3629use  crate :: cpu_config:: templates:: { 
@@ -66,11 +59,10 @@ use crate::persist::{MicrovmState, MicrovmStateError};
6659use  crate :: resources:: VmResources ; 
6760use  crate :: seccomp:: BpfThreadMap ; 
6861use  crate :: snapshot:: Persist ; 
69- use  crate :: vmm_config:: boot_source:: BootConfig ; 
7062use  crate :: vmm_config:: instance_info:: InstanceInfo ; 
7163use  crate :: vmm_config:: machine_config:: { MachineConfig ,  MachineConfigError } ; 
7264use  crate :: vstate:: kvm:: Kvm ; 
73- use  crate :: vstate:: memory:: { GuestAddress ,   GuestMemoryMmap } ; 
65+ use  crate :: vstate:: memory:: GuestMemoryMmap ; 
7466use  crate :: vstate:: vcpu:: { Vcpu ,  VcpuConfig ,  VcpuError } ; 
7567use  crate :: vstate:: vm:: Vm ; 
7668use  crate :: { EventManager ,  Vmm ,  VmmError ,  device_manager} ; 
@@ -83,7 +75,7 @@ pub enum StartMicrovmError {
8375    /// Unable to attach the VMGenID device: {0} 
8476     AttachVmgenidDevice ( kvm_ioctls:: Error ) , 
8577    /// System configuration error: {0} 
86-      ConfigureSystem ( crate :: arch :: ConfigurationError ) , 
78+      ConfigureSystem ( ConfigurationError ) , 
8779    /// Failed to create guest config: {0} 
8880     CreateGuestConfig ( #[ from]   GuestConfigError ) , 
8981    /// Cannot create network device: {0} 
@@ -105,8 +97,6 @@ pub enum StartMicrovmError {
10597     GetCpuTemplate ( #[ from]   GetCpuTemplateError ) , 
10698    /// Invalid kernel command line: {0} 
10799     KernelCmdline ( String ) , 
108-     /// Cannot load kernel due to invalid memory configuration or invalid kernel image: {0} 
109-      KernelLoader ( linux_loader:: loader:: Error ) , 
110100    /// Cannot load command line string: {0} 
111101     LoadCommandline ( linux_loader:: loader:: Error ) , 
112102    /// Cannot start microvm without kernel configuration. 
@@ -236,7 +226,8 @@ pub fn build_microvm_for_boot(
236226        . allocate_guest_memory ( ) 
237227        . map_err ( StartMicrovmError :: GuestMemory ) ?; 
238228
239-     let  entry_point = load_kernel ( boot_config,  & guest_memory) ?; 
229+     let  entry_point =
230+         load_kernel ( & boot_config. kernel_file ,  & guest_memory) . map_err ( ConfigureSystem ) ?; 
240231    let  initrd = InitrdConfig :: from_config ( boot_config,  & guest_memory) . map_err ( Initrd ) ?; 
241232    // Clone the command-line so that a failed boot doesn't pollute the original. 
242233    #[ allow( unused_mut) ]  
@@ -541,64 +532,6 @@ pub fn build_microvm_from_snapshot(
541532    Ok ( vmm) 
542533} 
543534
544- #[ cfg( target_arch = "x86_64" ) ]  
545- fn  load_kernel ( 
546-     boot_config :  & BootConfig , 
547-     guest_memory :  & GuestMemoryMmap , 
548- )  -> Result < EntryPoint ,  StartMicrovmError >  { 
549-     let  mut  kernel_file = boot_config
550-         . kernel_file 
551-         . try_clone ( ) 
552-         . map_err ( VmmError :: KernelFile ) ?; 
553- 
554-     let  entry_addr = Loader :: load :: < std:: fs:: File ,  GuestMemoryMmap > ( 
555-         guest_memory, 
556-         None , 
557-         & mut  kernel_file, 
558-         Some ( GuestAddress ( crate :: arch:: get_kernel_start ( ) ) ) , 
559-     ) 
560-     . map_err ( StartMicrovmError :: KernelLoader ) ?; 
561- 
562-     let  mut  entry_point_addr:  GuestAddress  = entry_addr. kernel_load ; 
563-     let  mut  boot_prot:  BootProtocol  = BootProtocol :: LinuxBoot ; 
564-     if  let  PvhBootCapability :: PvhEntryPresent ( pvh_entry_addr)  = entry_addr. pvh_boot_cap  { 
565-         // Use the PVH kernel entry point to boot the guest 
566-         entry_point_addr = pvh_entry_addr; 
567-         boot_prot = BootProtocol :: PvhBoot ; 
568-     } 
569- 
570-     debug ! ( "Kernel loaded using {boot_prot}" ) ; 
571- 
572-     Ok ( EntryPoint  { 
573-         entry_addr :  entry_point_addr, 
574-         protocol :  boot_prot, 
575-     } ) 
576- } 
577- 
578- #[ cfg( target_arch = "aarch64" ) ]  
579- fn  load_kernel ( 
580-     boot_config :  & BootConfig , 
581-     guest_memory :  & GuestMemoryMmap , 
582- )  -> Result < EntryPoint ,  StartMicrovmError >  { 
583-     let  mut  kernel_file = boot_config
584-         . kernel_file 
585-         . try_clone ( ) 
586-         . map_err ( VmmError :: KernelFile ) ?; 
587- 
588-     let  entry_addr = Loader :: load :: < std:: fs:: File ,  GuestMemoryMmap > ( 
589-         guest_memory, 
590-         Some ( GuestAddress ( crate :: arch:: get_kernel_start ( ) ) ) , 
591-         & mut  kernel_file, 
592-         None , 
593-     ) 
594-     . map_err ( StartMicrovmError :: KernelLoader ) ?; 
595- 
596-     Ok ( EntryPoint  { 
597-         entry_addr :  entry_addr. kernel_load , 
598-         protocol :  BootProtocol :: LinuxBoot , 
599-     } ) 
600- } 
601- 
602535/// Sets up the serial device. 
603536pub  fn  setup_serial_device ( 
604537    event_manager :  & mut  EventManager , 
@@ -725,7 +658,7 @@ pub fn configure_system_for_boot(
725658
726659        linux_loader:: loader:: load_cmdline :: < crate :: vstate:: memory:: GuestMemoryMmap > ( 
727660            vmm. guest_memory ( ) , 
728-             GuestAddress ( crate :: arch:: x86_64:: layout:: CMDLINE_START ) , 
661+             crate :: vstate :: memory :: GuestAddress ( crate :: arch:: x86_64:: layout:: CMDLINE_START ) , 
729662            & boot_cmdline, 
730663        ) 
731664        . map_err ( LoadCommandline ) ?; 
0 commit comments