diff options
author | Daniel Verkamp <dverkamp@chromium.org> | 2018-12-12 15:20:30 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-01-18 00:45:57 -0800 |
commit | c195616e3f288672198961c043ba5a2a71b792b9 (patch) | |
tree | 4653283a499402428aff150f62ee041c2c80375b /aarch64 | |
parent | 68d0e7237e8ffac07239032c8d2ef0ccf3f1d312 (diff) | |
download | crosvm-c195616e3f288672198961c043ba5a2a71b792b9.tar crosvm-c195616e3f288672198961c043ba5a2a71b792b9.tar.gz crosvm-c195616e3f288672198961c043ba5a2a71b792b9.tar.bz2 crosvm-c195616e3f288672198961c043ba5a2a71b792b9.tar.lz crosvm-c195616e3f288672198961c043ba5a2a71b792b9.tar.xz crosvm-c195616e3f288672198961c043ba5a2a71b792b9.tar.zst crosvm-c195616e3f288672198961c043ba5a2a71b792b9.zip |
arch: add generic image loading function
Factor out the common parts of kernel loading code from x86_64 and aarch64. This will be used to load initrds as well. BUG=None TEST=Boot termina on kevin Change-Id: I0f61fdaf1067311d25393e8d64340f570f5a6ed7 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1407220 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'aarch64')
-rw-r--r-- | aarch64/src/lib.rs | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/aarch64/src/lib.rs b/aarch64/src/lib.rs index c1696e4..dda7bfc 100644 --- a/aarch64/src/lib.rs +++ b/aarch64/src/lib.rs @@ -135,7 +135,7 @@ pub enum Error { /// FDT could not be created FDTCreateFailure(Box<error::Error>), /// Kernel could not be loaded - KernelLoadFailure, + KernelLoadFailure(arch::LoadImageError), /// Failure to Create GIC CreateGICFailure(sys_util::Error), /// Couldn't register PCI bus. @@ -159,7 +159,7 @@ impl error::Error for Error { &Error::CreateSocket(_) => "failed to create socket", &Error::CreateVcpu(_) => "failed to create VCPU", &Error::FDTCreateFailure(_) => "FDT could not be created", - &Error::KernelLoadFailure => "Kernel cound not be loaded", + &Error::KernelLoadFailure(_) => "Kernel cound not be loaded", &Error::CreateGICFailure(_) => "Failure to create GIC", &Error::RegisterPci(_) => "error registering PCI bus", &Error::RegisterVsock(_) => "error registering virtual socket device", @@ -250,9 +250,15 @@ impl arch::LinuxArch for AArch64 { cmdline.insert_str(¶m).map_err(Error::Cmdline)?; } - // separate out load_kernel from other setup to get a specific error for + // separate out kernel loading from other setup to get a specific error for // kernel loading - Self::load_kernel(&mem, &mut components.kernel_image)?; + arch::load_image( + &mem, + &mut components.kernel_image, + get_kernel_addr(), + u64::max_value(), + ) + .map_err(Error::KernelLoadFailure)?; Self::setup_system_memory( &mem, components.memory_mb, @@ -276,22 +282,6 @@ impl arch::LinuxArch for AArch64 { } impl AArch64 { - /// Loads the kernel from an open file. - /// - /// # Arguments - /// - /// * `mem` - The memory to be used by the guest. - /// * `kernel_image` - the File object for the specified kernel. - fn load_kernel(guest_mem: &GuestMemory, mut kernel_image: &mut File) -> Result<()> { - let kernel_addr = get_kernel_addr(); - let kernel_meta = kernel_image.metadata()?; - let kernel_size = kernel_meta.len(); - guest_mem - .read_to_memory(kernel_addr, &mut kernel_image, kernel_size as usize) - .map_err(|_| Error::KernelLoadFailure)?; - Ok(()) - } - fn setup_system_memory( mem: &GuestMemory, mem_size: u64, |