feat: arch/vspace: kmem: exclude initrd

This commit is contained in:
Paul Pan 2024-06-02 16:13:20 +08:00
parent d53fa7b93e
commit 95713e2af4

View File

@ -1,6 +1,6 @@
use super::{alloc_page, install_pagetable, map_range, RAM_ALLOCATOR};
use crate::{arch::layout::*, vspace::*};
use log::{debug, info};
use log::{debug, info, trace};
use spin::Mutex;
use utils::{addr::*, size::*};
@ -65,8 +65,32 @@ pub unsafe fn setup_memory(fdt_addr: usize) {
// Exclude FDT table
let fdt_addr = PhysAddr::from(fdt_addr);
let fdt_size = align_up(fdt.total_size(), PAGE_SIZE);
debug!("Reserving FDT memory:\tstart: {:x?}, size: {:x?}", fdt_addr, fdt_size);
debug!("Reserving FDT table memory:\tstart: {:x?}, size: {:#x?}", fdt_addr, fdt_size);
mem.reserve(fdt_addr, fdt_size);
// Exclude memory for initrd
if let Some(chosen) = fdt.find_node("/chosen") {
let initrd_start = chosen
.properties()
.find(|n| n.name == "linux,initrd-start")
.map(|prop| prop.as_usize())
.flatten();
let initrd_end = chosen
.properties()
.find(|n| n.name == "linux,initrd-end")
.map(|prop| prop.as_usize())
.flatten();
if let (Some(initrd_start), Some(initrd_end)) = (initrd_start, initrd_end) {
let start = PhysAddr::from(initrd_start);
let size = align_up(initrd_end - initrd_start, PAGE_SIZE);
debug!("Reserving initrd memory:\tstart: {:x?}, size: {:#x?}", start, size);
mem.reserve(start, size);
}
}
trace!("Memory setup complete, memory info:\n{:#x?}", mem);
}
pub unsafe fn setup_kernel_paging() {
@ -107,7 +131,7 @@ pub unsafe fn setup_kernel_paging() {
#[cfg(debug_assertions)]
{
let count = ALLOC_COUNT.load(core::sync::atomic::Ordering::Acquire);
log::trace!("Kernel page table size: {:?}", count);
trace!("Kernel page table size: {:?}", count);
assert!(KERNEL_PAGETABLE_SIZE == count, "Kernel page table size mismatch");
}