mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
chore: kmem: make memory reserving rules more robust
This commit is contained in:
parent
95713e2af4
commit
a007e299d2
@ -32,14 +32,14 @@ pub unsafe fn setup_memory(fdt_addr: usize) {
|
||||
// Exclude memory occupied by UEFI
|
||||
for region in fdt.memory_reservations() {
|
||||
debug!(
|
||||
"Reserving memory:\tstart: {:x?}, size: {:x?}",
|
||||
"Reserving UEFI memory:\tstart: {:x?}, size: {:x?}",
|
||||
region.address(),
|
||||
region.size()
|
||||
);
|
||||
mem.reserve(PhysAddr::from(region.address()), align_up(region.size(), PAGE_SIZE));
|
||||
}
|
||||
|
||||
// Exclude memory occupied by OpenSBI
|
||||
// Exclude memory in /reserved-memory
|
||||
let reserved_memory = fdt
|
||||
.find_node("/reserved-memory")
|
||||
.map(|node| node.children())
|
||||
@ -47,7 +47,7 @@ pub unsafe fn setup_memory(fdt_addr: usize) {
|
||||
for child in reserved_memory {
|
||||
let region = child.reg().unwrap().next().unwrap();
|
||||
debug!(
|
||||
"Reserving memory:\tstart: {:x?}, size: {:x?}",
|
||||
"Reserving memory marked in /reserved-memory:\tstart: {:x?}, size: {:x?}",
|
||||
region.starting_address, region.size
|
||||
);
|
||||
mem.reserve(
|
||||
@ -56,6 +56,19 @@ pub unsafe fn setup_memory(fdt_addr: usize) {
|
||||
);
|
||||
}
|
||||
|
||||
// Exclude memory in mmode_resv
|
||||
fdt.all_nodes().filter(|n| n.name.starts_with("mmode_resv")).for_each(|node| {
|
||||
let region = node.reg().unwrap().next().unwrap();
|
||||
debug!(
|
||||
"Reserving memory marked in /mmode_resv:\tstart: {:x?}, size: {:x?}",
|
||||
region.starting_address, region.size
|
||||
);
|
||||
mem.reserve(
|
||||
PhysAddr::from(region.starting_address),
|
||||
align_up(region.size.unwrap(), PAGE_SIZE),
|
||||
);
|
||||
});
|
||||
|
||||
// Exclude kernel memory
|
||||
let kernel_start = kernel_virt_to_phys(KERNEL_START.as_virt_addr());
|
||||
let kernel_end = kernel_virt_to_phys(KERNEL_END.as_virt_addr()).align_up(PAGE_SIZE);
|
||||
|
Loading…
Reference in New Issue
Block a user