Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 5 additions & 8 deletions crates/vm-bootloader/src/boot_loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,12 @@ pub mod arch;

#[derive(Error, Debug)]
pub enum Error {
#[error("Load dtb failed, reason: {0}")]
LoadDtbFailed(String),

#[error("Failed to loader kernel, err: {0}")]
KernelLoader(#[from] KernelLoaderError),

#[error("Failed to load initrd, err: {0}")]
LoadInitrdFailed(#[from] InitrdLoaderError),

#[error("Memory overlap")]
MemoryOverlap,

#[error("Failed to reserve memory, err: {0}")]
ReserveMemory(#[from] RangeAllocatorError),

Expand All @@ -43,12 +37,15 @@ pub enum Error {
#[error("{0}")]
GenerateDtb(#[from] vm_fdt::Error),

#[error("Vcpu too much")]
VcpuExceedsAcpiCapability,
#[error("Load dtb failed, reason: {0}")]
LoadDtbFailed(String),

#[error("Failed to setup acpi, err: {0}")]
Acpi(#[from] AcpiError),

#[error("Vcpu too much")]
VcpuExceedsAcpiCapability,

#[error("Failed to setup gdt, err: {0}")]
Gdt(String),

Expand Down
18 changes: 9 additions & 9 deletions crates/vm-bootloader/src/initrd_loader.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use std::fs;
use std::path::Path;
use std::path::PathBuf;

use thiserror::Error;
use vm_mm::manager::MemoryAddressSpace;
Expand All @@ -8,11 +9,11 @@ use vm_utils::range_allocator::RangeAllocatorError;

#[derive(Error, Debug)]
pub enum InitrdLoaderError {
#[error("Read failed")]
ReadFailed,
#[error("Failed to read initramfs from {0}")]
ReadFailed(PathBuf),

#[error("Copy initrd failed")]
CopyFailed,
#[error("Copy initrd failed, err: {0}")]
CopyFailed(#[from] vm_mm::error::Error),

#[error("Failed to reserve ram for initramfs, err: {0}")]
ReserveRam(#[from] RangeAllocatorError),
Expand All @@ -29,7 +30,8 @@ pub struct InitrdLoader {

impl InitrdLoader {
pub fn new(path: &Path) -> Result<Self, InitrdLoaderError> {
let initrd = fs::read(path).map_err(|_| InitrdLoaderError::ReadFailed)?;
let initrd =
fs::read(path).map_err(|_| InitrdLoaderError::ReadFailed(path.to_path_buf()))?;

Ok(InitrdLoader { initrd })
}
Expand All @@ -40,11 +42,9 @@ impl InitrdLoader {
memory: &MemoryAddressSpace,
addr: u64,
) -> Result<InitrdLoadResult, InitrdLoaderError> {
ram_allocator.reserve(addr, self.initrd.len()).unwrap();
ram_allocator.reserve(addr, self.initrd.len())?;

memory
.copy_from_slice(addr, &self.initrd)
.map_err(|_| InitrdLoaderError::CopyFailed)?;
memory.copy_from_slice(addr, &self.initrd)?;

Ok(InitrdLoadResult {
initrd_start: addr,
Expand Down
10 changes: 1 addition & 9 deletions crates/vm-bootloader/src/kernel_loader/error.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
use thiserror::Error;
use vm_firmware::acpi::error::AcpiError;
use vm_utils::range_allocator::RangeAllocatorError;

#[derive(Error, Debug)]
Expand All @@ -20,7 +19,7 @@ pub enum KernelLoaderError {
InvalidAddressAlignment,

#[error("Copy kernel into memory failed, reason: {0}")]
CopyKernelFailed(vm_mm::error::Error),
CopyKernelFailed(#[from] vm_mm::error::Error),

#[error("Failed to reserve ram, err: {0}")]
ReserveRam(#[from] RangeAllocatorError),
Expand All @@ -33,11 +32,4 @@ pub enum KernelLoaderError {

#[error("Cmdline too large")]
CmdlineTooLarge,

#[cfg(target_arch = "x86_64")]
#[error("Copy cmdline into memory failed")]
CopyCmdlineFailed,

#[error("Acpi error: {0}")]
Acpi(#[from] AcpiError),
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,7 @@ impl Image {
let kernel_start = boot_params.ram_base + text_offset;

ram_allocator.reserve(kernel_start, kernel_len)?;
memory
.copy_from_slice(kernel_start, &self.kernel)
.map_err(KernelLoaderError::CopyKernelFailed)?;
memory.copy_from_slice(kernel_start, &self.kernel)?;

Ok(LoadResult {
start_pc: kernel_start,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,7 @@ impl BzImage {
let setup_size = (setup_sects as usize + 1) * 0x200;
let kernel_len = self.bzimage.len() - setup_size;
let range = ram_allocator.reserve(params.kernel_start as u64, kernel_len)?;
memory
.copy_from_slice(range.start, &self.bzimage[setup_size..])
.map_err(KernelLoaderError::CopyKernelFailed)?;
memory.copy_from_slice(range.start, &self.bzimage[setup_size..])?;
}

Ok(LoadResult {
Expand Down
Loading