From 7dcac1941f77f81f7f77e2c9f19c3f76105fa0ce Mon Sep 17 00:00:00 2001 From: Louis Vialar Date: Tue, 8 Jul 2025 18:23:20 +0200 Subject: [PATCH] feat: align frame range to (likely) page size when initializing physical memory --- src/mm/physicalmem.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/mm/physicalmem.rs b/src/mm/physicalmem.rs index 22a1776360..0d20562706 100644 --- a/src/mm/physicalmem.rs +++ b/src/mm/physicalmem.rs @@ -7,7 +7,7 @@ use memory_addresses::{PhysAddr, VirtAddr}; #[cfg(target_arch = "x86_64")] use crate::arch::mm::paging::PageTableEntryFlagsExt; -use crate::arch::mm::paging::{self, HugePageSize, PageSize, PageTableEntryFlags}; +use crate::arch::mm::paging::{self, HugePageSize, LargePageSize, PageSize, PageTableEntryFlags}; use crate::env; use crate::mm::device_alloc::DeviceAlloc; @@ -78,9 +78,21 @@ fn detect_from_fdt() -> Result<(), ()> { let biggest_region = all_regions.max_by_key(|m| m.size.unwrap()).unwrap(); found_ram = true; + let size = { + let base = biggest_region.size.unwrap(); + if base.is_multiple_of(LargePageSize::SIZE as usize) { + base + } else { + base.next_multiple_of(LargePageSize::SIZE as usize) - LargePageSize::SIZE as usize + } + }; + let range = PageRange::from_start_len( - biggest_region.starting_address.addr(), - biggest_region.size.unwrap(), + biggest_region + .starting_address + .addr() + .next_multiple_of(LargePageSize::SIZE as usize), + size, ) .unwrap();