feat: riscv: vspace: always use virtual address with page table

This commit is contained in:
Paul Pan 2024-06-14 21:13:11 +08:00
parent 8824345b17
commit 97392a5788
2 changed files with 6 additions and 8 deletions

View File

@ -109,7 +109,7 @@ pub unsafe fn setup_kernel_paging() {
assert!(!is_kernel_pagetable_allocated(), "Kernel pagetable already allocated");
let root_pt = alloc_page();
let mut kernel_pt = Table::<Level0>::new(root_pt.as_usize().into());
let mut kernel_pt = Table::<Level0>::new(mmap_phys_to_virt(root_pt));
macro_rules! map_section {
(($($section:ident),+),$attr:expr) => {
@ -152,10 +152,10 @@ pub unsafe fn setup_kernel_paging() {
pub unsafe fn install_kernel_pagetable() {
info!("Setting up new kernel pagetable");
let kernel_pt = KERNEL_PAGETABLE.lock();
let kernel_pt = kernel_pt.as_ref().expect("No kernel pagetable found");
let vaddr = KERNEL_PAGETABLE.lock().as_ref().expect("No kernel pagetable found").vaddr();
let paddr = mmap_virt_to_phys(vaddr);
install_pagetable(kernel_pt)
install_pagetable(paddr)
}
#[inline]

View File

@ -89,9 +89,7 @@ fn page_table_mode() -> riscv::register::satp::Mode {
return riscv::register::satp::Mode::Sv57;
}
pub unsafe fn install_pagetable(pt: &Table<Level0>) {
let root_pt = PhysAddr::from(pt.entries.as_ptr());
riscv::register::satp::set(page_table_mode(), 0, root_pt.extract_ppn());
pub unsafe fn install_pagetable(addr: PhysAddr) {
riscv::register::satp::set(page_table_mode(), 0, addr.extract_ppn());
riscv::asm::sfence_vma_all();
}