mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: arch: riscv: vspace: map_range: pass mapping addr to alloc_page callback
This commit is contained in:
parent
d30f87e8e7
commit
72a04f2905
@ -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 {
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user