feat: arch: riscv: vspace: map_range: pass mapping addr to alloc_page callback

This commit is contained in:
Paul Pan 2024-06-16 23:35:12 +08:00
parent d30f87e8e7
commit 72a04f2905
2 changed files with 4 additions and 4 deletions

View File

@ -106,7 +106,7 @@ pub unsafe fn setup_kernel_paging() {
info!("Setting up kernel paging");
assert!(!is_kernel_pagetable_allocated(), "Kernel pagetable already allocated");
let root_pt = alloc_page();
let root_pt = alloc_page(VirtAddr(0));
let mut kernel_pt = Table::<Level0>::new(mmap_phys_to_virt(root_pt));
macro_rules! map_section {

View File

@ -16,7 +16,7 @@ fn alloc_callback() {
}
#[cfg_attr(debug_assertions, tracer::trace_callback(log = true, callback = alloc_callback))]
pub fn alloc_page() -> PhysAddr {
pub fn alloc_page(_mapped_addr: VirtAddr) -> PhysAddr {
let addr = RAM_ALLOCATOR.lock().alloc(PAGE_LAYOUT).expect("Failed to allocate page");
unsafe {
@ -29,7 +29,7 @@ pub fn alloc_page() -> PhysAddr {
}
pub fn map_range(
mut alloc: impl FnMut() -> PhysAddr,
mut alloc: impl FnMut(VirtAddr) -> PhysAddr,
pt: &mut Table<Level0>,
from: VirtAddr,
to: PhysAddr,
@ -63,8 +63,8 @@ pub fn map_range(
unsafe {
Table::<$level>::new(mmap_phys_to_virt(
$pt.lookup_mut($addr).map(|e| e.paddr()).unwrap_or_else(|| {
let page = alloc();
let addr = $addr.align_down(<$level as TableLevel>::PREVIOUS::LEVEL_SIZE);
let page = alloc(addr);
debug!("Creating new pagetable:\t{:?} -> {:?}", addr, page);
$pt.map(addr, page, MapAttr::PAGE_TABLE).unwrap();
page