arch: preserve error chain for memmap table

On-behalf-of: SAP philipp.schuster@sap.com
Signed-off-by: Philipp Schuster <philipp.schuster@cyberus-technology.de>
This commit is contained in:
Philipp Schuster
2026-06-02 06:44:17 +02:00
committed by Rob Bradford
parent 67a661aff0
commit f607d0143d
2 changed files with 8 additions and 5 deletions
+3 -1
View File
@@ -35,7 +35,9 @@ pub enum Error {
#[error("The memory map table extends past the end of guest memory")] #[error("The memory map table extends past the end of guest memory")]
MemmapTablePastRamEnd, MemmapTablePastRamEnd,
#[error("Error writing memory map table to guest memory")] #[error("Error writing memory map table to guest memory")]
MemmapTableSetup, MemmapTableSetup(#[source] vm_memory::GuestMemoryError),
#[error("Error generating memory map table")]
MemmapTableGeneration,
#[error("The hvm_start_info structure extends past the end of guest memory")] #[error("The hvm_start_info structure extends past the end of guest memory")]
StartInfoPastRamEnd, StartInfoPastRamEnd,
#[error("Error writing hvm_start_info to guest memory")] #[error("Error writing hvm_start_info to guest memory")]
+5 -4
View File
@@ -1140,8 +1140,9 @@ pub fn generate_ram_ranges(guest_mem: &GuestMemoryMmap) -> super::Result<Vec<Ram
// Generate the first usable physical memory range before the gap. The e820 map // Generate the first usable physical memory range before the gap. The e820 map
// should only report memory above 1MiB. // should only report memory above 1MiB.
let first_ram_range = { let first_ram_range = {
let (first_region_start, first_region_end) = let (first_region_start, first_region_end) = ram_regions
ram_regions.first().ok_or(super::Error::MemmapTableSetup)?; .first()
.ok_or(super::Error::MemmapTableGeneration)?;
let high_ram_start = layout::HIGH_RAM_START.raw_value(); let high_ram_start = layout::HIGH_RAM_START.raw_value();
let mem_32bit_reserved_start = layout::MEM_32BIT_RESERVED_START.raw_value(); let mem_32bit_reserved_start = layout::MEM_32BIT_RESERVED_START.raw_value();
@@ -1154,7 +1155,7 @@ pub fn generate_ram_ranges(guest_mem: &GuestMemoryMmap) -> super::Result<Vec<Ram
high_ram_start: 0x{high_ram_start:08x}, mem_32bit_reserved_start: 0x{mem_32bit_reserved_start:08x}" high_ram_start: 0x{high_ram_start:08x}, mem_32bit_reserved_start: 0x{mem_32bit_reserved_start:08x}"
); );
return Err(super::Error::MemmapTableSetup); return Err(super::Error::MemmapTableGeneration);
} }
info!( info!(
@@ -1265,7 +1266,7 @@ fn configure_pvh(
for memmap_entry in memmap { for memmap_entry in memmap {
guest_mem guest_mem
.write_obj(memmap_entry, memmap_start_addr) .write_obj(memmap_entry, memmap_start_addr)
.map_err(|_| super::Error::MemmapTableSetup)?; .map_err(super::Error::MemmapTableSetup)?;
memmap_start_addr = memmap_start_addr =
memmap_start_addr.unchecked_add(mem::size_of::<hvm_memmap_table_entry>() as u64); memmap_start_addr.unchecked_add(mem::size_of::<hvm_memmap_table_entry>() as u64);
} }