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"); info!("Setting up kernel paging");
assert!(!is_kernel_pagetable_allocated(), "Kernel pagetable already allocated"); 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)); let mut kernel_pt = Table::<Level0>::new(mmap_phys_to_virt(root_pt));
macro_rules! map_section { 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))] #[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"); let addr = RAM_ALLOCATOR.lock().alloc(PAGE_LAYOUT).expect("Failed to allocate page");
unsafe { unsafe {
@ -29,7 +29,7 @@ pub fn alloc_page() -> PhysAddr {
} }
pub fn map_range( pub fn map_range(
mut alloc: impl FnMut() -> PhysAddr, mut alloc: impl FnMut(VirtAddr) -> PhysAddr,
pt: &mut Table<Level0>, pt: &mut Table<Level0>,
from: VirtAddr, from: VirtAddr,
to: PhysAddr, to: PhysAddr,
@ -63,8 +63,8 @@ pub fn map_range(
unsafe { unsafe {
Table::<$level>::new(mmap_phys_to_virt( Table::<$level>::new(mmap_phys_to_virt(
$pt.lookup_mut($addr).map(|e| e.paddr()).unwrap_or_else(|| { $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 addr = $addr.align_down(<$level as TableLevel>::PREVIOUS::LEVEL_SIZE);
let page = alloc(addr);
debug!("Creating new pagetable:\t{:?} -> {:?}", addr, page); debug!("Creating new pagetable:\t{:?} -> {:?}", addr, page);
$pt.map(addr, page, MapAttr::PAGE_TABLE).unwrap(); $pt.map(addr, page, MapAttr::PAGE_TABLE).unwrap();
page page