Skip to content

Commit cbbdfb1

Browse files
committed
feat: align frame range to (likely) page size when initializing physical memory
1 parent be0a653 commit cbbdfb1

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/mm/physicalmem.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use free_list::{AllocError, FreeList, PageLayout, PageRange};
55
use hermit_sync::InterruptTicketMutex;
66
use memory_addresses::{PhysAddr, VirtAddr};
77

8-
use crate::arch::mm::paging::{self, BasePageSize, PageSize};
8+
use crate::arch::mm::paging::{self, BasePageSize, LargePageSize, PageSize};
99
use crate::env;
1010

1111
pub static PHYSICAL_FREE_LIST: InterruptTicketMutex<FreeList<16>> =
@@ -59,9 +59,21 @@ fn detect_from_fdt() -> Result<(), ()> {
5959
let biggest_region = all_regions.max_by_key(|m| m.size.unwrap()).unwrap();
6060
found_ram = true;
6161

62+
let size = {
63+
let base = biggest_region.size.unwrap();
64+
if base.is_multiple_of(LargePageSize::SIZE as usize) {
65+
base
66+
} else {
67+
base.next_multiple_of(LargePageSize::SIZE as usize) - LargePageSize::SIZE as usize
68+
}
69+
};
70+
6271
let range = PageRange::from_start_len(
63-
biggest_region.starting_address.addr(),
64-
biggest_region.size.unwrap(),
72+
biggest_region
73+
.starting_address
74+
.addr()
75+
.next_multiple_of(LargePageSize::SIZE as usize),
76+
size,
6577
)
6678
.unwrap();
6779

0 commit comments

Comments
 (0)