From 7209834847b5ffcb6c5fe13e880b5779d1ede4f1 Mon Sep 17 00:00:00 2001 From: John Ingalls <43973001+ingallsj@users.noreply.github.com> Date: Sun, 5 Dec 2021 23:23:31 -0800 Subject: page fault when PTE_N bit set and not EXT_SVNAPOT (#875) --- riscv/mmu.cc | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'riscv/mmu.cc') diff --git a/riscv/mmu.cc b/riscv/mmu.cc index e33b814..275383d 100644 --- a/riscv/mmu.cc +++ b/riscv/mmu.cc @@ -291,6 +291,8 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty if (pte & PTE_RSVD) { break; + } else if (!proc->extension_enabled(EXT_SVNAPOT) && (pte & PTE_N)) { + break; } else if (!proc->extension_enabled(EXT_SVPBMT) && (pte & PTE_PBMT)) { break; } else if (PTE_TABLE(pte)) { // next level of page table @@ -379,6 +381,8 @@ reg_t mmu_t::walk(reg_t addr, access_type type, reg_t mode, bool virt, bool hlvx if (pte & PTE_RSVD) { break; + } else if (!proc->extension_enabled(EXT_SVNAPOT) && (pte & PTE_N)) { + break; } else if (!proc->extension_enabled(EXT_SVPBMT) && (pte & PTE_PBMT)) { break; } else if (PTE_TABLE(pte)) { // next level of page table -- cgit v1.1