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
|
// Exclude memory occupied by UEFI
|
||||||
for region in fdt.memory_reservations() {
|
for region in fdt.memory_reservations() {
|
||||||
debug!(
|
debug!(
|
||||||
"Reserving memory:\tstart: {:x?}, size: {:x?}",
|
"Reserving UEFI memory:\tstart: {:x?}, size: {:x?}",
|
||||||
region.address(),
|
region.address(),
|
||||||
region.size()
|
region.size()
|
||||||
);
|
);
|
||||||
mem.reserve(PhysAddr::from(region.address()), align_up(region.size(), PAGE_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
|
let reserved_memory = fdt
|
||||||
.find_node("/reserved-memory")
|
.find_node("/reserved-memory")
|
||||||
.map(|node| node.children())
|
.map(|node| node.children())
|
||||||
@ -47,7 +47,7 @@ pub unsafe fn setup_memory(fdt_addr: usize) {
|
|||||||
for child in reserved_memory {
|
for child in reserved_memory {
|
||||||
let region = child.reg().unwrap().next().unwrap();
|
let region = child.reg().unwrap().next().unwrap();
|
||||||
debug!(
|
debug!(
|
||||||
"Reserving memory:\tstart: {:x?}, size: {:x?}",
|
"Reserving memory marked in /reserved-memory:\tstart: {:x?}, size: {:x?}",
|
||||||
region.starting_address, region.size
|
region.starting_address, region.size
|
||||||
);
|
);
|
||||||
mem.reserve(
|
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
|
// Exclude kernel memory
|
||||||
let kernel_start = kernel_virt_to_phys(KERNEL_START.as_virt_addr());
|
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);
|
let kernel_end = kernel_virt_to_phys(KERNEL_END.as_virt_addr()).align_up(PAGE_SIZE);
|
||||||
|
Loading…
Reference in New Issue
Block a user