Skip to content

Commit 7dcac19

Browse files
committed
feat: align frame range to (likely) page size when initializing physical memory
1 parent 916c0d1 commit 7dcac19

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
@@ -7,7 +7,7 @@ use memory_addresses::{PhysAddr, VirtAddr};
77

88
#[cfg(target_arch = "x86_64")]
99
use crate::arch::mm::paging::PageTableEntryFlagsExt;
10-
use crate::arch::mm::paging::{self, HugePageSize, PageSize, PageTableEntryFlags};
10+
use crate::arch::mm::paging::{self, HugePageSize, LargePageSize, PageSize, PageTableEntryFlags};
1111
use crate::env;
1212
use crate::mm::device_alloc::DeviceAlloc;
1313

@@ -78,9 +78,21 @@ fn detect_from_fdt() -> Result<(), ()> {
7878
let biggest_region = all_regions.max_by_key(|m| m.size.unwrap()).unwrap();
7979
found_ram = true;
8080

81+
let size = {
82+
let base = biggest_region.size.unwrap();
83+
if base.is_multiple_of(LargePageSize::SIZE as usize) {
84+
base
85+
} else {
86+
base.next_multiple_of(LargePageSize::SIZE as usize) - LargePageSize::SIZE as usize
87+
}
88+
};
89+
8190
let range = PageRange::from_start_len(
82-
biggest_region.starting_address.addr(),
83-
biggest_region.size.unwrap(),
91+
biggest_region
92+
.starting_address
93+
.addr()
94+
.next_multiple_of(LargePageSize::SIZE as usize),
95+
size,
8496
)
8597
.unwrap();
8698

0 commit comments

Comments
 (0)