diff --git a/src/kernel/memory.rs b/src/kernel/memory.rs index 2965dec..29d8a3d 100644 --- a/src/kernel/memory.rs +++ b/src/kernel/memory.rs @@ -59,6 +59,8 @@ pub fn deallocate_hardware() -> Result<(), AllocError> { | (entry.entry_type == EntryType::FRAMEBUFFER) { if let Err(error) = { + // Special handling for regions that are too small + // TODO: fix let adjusted_base = if (entry.length as usize) < PAGE_SIZE { entry.base as usize - (PAGE_SIZE - entry.length as usize) } else { @@ -69,11 +71,23 @@ pub fn deallocate_hardware() -> Result<(), AllocError> { } else { entry.length as usize }; - let range = PageRange::from_start_len(adjusted_base, adjusted_length as usize); - log_trace!("Deallocating 0x{:x} @ 0x{:x} hardware reserved memory", adjusted_length, adjusted_base); + let range = PageRange::from_start_len(adjusted_base, adjusted_length); + log_trace!( + "Deallocating 0x{:x} @ 0x{:x} hardware reserved memory", + adjusted_length, + adjusted_base + ); match range { - Ok(range_inner) => {unsafe { HW_FREELIST.lock().deallocate(range_inner) }}, - Err(err) => {Ok(log_error!("Failed to convert range 0x{:x} @ 0x{:x}: {}", adjusted_length, adjusted_base, err))}, + Ok(range_inner) => unsafe { HW_FREELIST.lock().deallocate(range_inner) }, + Err(err) => { + log_error!( + "Failed to convert range 0x{:x} @ 0x{:x}: {}", + adjusted_length, + adjusted_base, + err + ); + Ok(()) + } } } { any_error = Some(error); @@ -81,7 +95,10 @@ pub fn deallocate_hardware() -> Result<(), AllocError> { bytes_deallocated += entry.length; } } - log_trace!("Deallocated 0x{:x} bytes of hardware reserved memory", bytes_deallocated); + log_trace!( + "Deallocated 0x{:x} bytes of hardware reserved memory", + bytes_deallocated + ); if let Some(error) = any_error { Err(error) } else {