From d74b2cd324bd88f7d824a8f106a63dce06038bcf Mon Sep 17 00:00:00 2001 From: Daniel Lustig Date: Mon, 7 Dec 2020 18:23:41 -0500 Subject: [PATCH] Oops...napot_bits should use ctz, not clz (#614) --- riscv/mmu.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/riscv/mmu.cc b/riscv/mmu.cc index 23f132e0..68d6839e 100644 --- a/riscv/mmu.cc +++ b/riscv/mmu.cc @@ -355,7 +355,7 @@ reg_t mmu_t::s2xlate(reg_t gva, reg_t gpa, access_type type, access_type trap_ty reg_t vpn = gpa >> PGSHIFT; reg_t page_mask = (reg_t(1) << PGSHIFT) - 1; - int napot_bits = ((pte & PTE_N) ? (clz(ppn) + 1) : 0); + int napot_bits = ((pte & PTE_N) ? (ctz(ppn) + 1) : 0); if (((pte & PTE_N) && (ppn == 0 || i != 0)) || (napot_bits != 0 && napot_bits != 4)) break; @@ -435,7 +435,7 @@ reg_t mmu_t::walk(reg_t addr, access_type type, reg_t mode, bool virt, bool mxr) // for superpage or Zsn NAPOT mappings, make a fake leaf PTE for the TLB's benefit. reg_t vpn = addr >> PGSHIFT; - int napot_bits = ((pte & PTE_N) ? (clz(ppn) + 1) : 0); + int napot_bits = ((pte & PTE_N) ? (ctz(ppn) + 1) : 0); if (((pte & PTE_N) && (ppn == 0 || i != 0)) || (napot_bits != 0 && napot_bits != 4)) break;