mirror of
https://github.com/panpaul/tiny_os
synced 2024-09-20 09:45:19 +08:00
feat: riscv: vspace: always use virtual address with page table
This commit is contained in:
parent
8824345b17
commit
97392a5788
@ -109,7 +109,7 @@ pub unsafe fn setup_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();
|
||||||
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 {
|
macro_rules! map_section {
|
||||||
(($($section:ident),+),$attr:expr) => {
|
(($($section:ident),+),$attr:expr) => {
|
||||||
@ -152,10 +152,10 @@ pub unsafe fn setup_kernel_paging() {
|
|||||||
pub unsafe fn install_kernel_pagetable() {
|
pub unsafe fn install_kernel_pagetable() {
|
||||||
info!("Setting up new kernel pagetable");
|
info!("Setting up new kernel pagetable");
|
||||||
|
|
||||||
let kernel_pt = KERNEL_PAGETABLE.lock();
|
let vaddr = KERNEL_PAGETABLE.lock().as_ref().expect("No kernel pagetable found").vaddr();
|
||||||
let kernel_pt = kernel_pt.as_ref().expect("No kernel pagetable found");
|
let paddr = mmap_virt_to_phys(vaddr);
|
||||||
|
|
||||||
install_pagetable(kernel_pt)
|
install_pagetable(paddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -89,9 +89,7 @@ fn page_table_mode() -> riscv::register::satp::Mode {
|
|||||||
return riscv::register::satp::Mode::Sv57;
|
return riscv::register::satp::Mode::Sv57;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub unsafe fn install_pagetable(pt: &Table<Level0>) {
|
pub unsafe fn install_pagetable(addr: PhysAddr) {
|
||||||
let root_pt = PhysAddr::from(pt.entries.as_ptr());
|
riscv::register::satp::set(page_table_mode(), 0, addr.extract_ppn());
|
||||||
|
|
||||||
riscv::register::satp::set(page_table_mode(), 0, root_pt.extract_ppn());
|
|
||||||
riscv::asm::sfence_vma_all();
|
riscv::asm::sfence_vma_all();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user