Browse Source

Oops...napot_bits should use ctz, not clz (#614)

pull/615/head
Daniel Lustig 6 years ago
committed by GitHub
parent
commit
d74b2cd324
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      riscv/mmu.cc

4
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 vpn = gpa >> PGSHIFT;
reg_t page_mask = (reg_t(1) << PGSHIFT) - 1; 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)) if (((pte & PTE_N) && (ppn == 0 || i != 0)) || (napot_bits != 0 && napot_bits != 4))
break; 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. // for superpage or Zsn NAPOT mappings, make a fake leaf PTE for the TLB's benefit.
reg_t vpn = addr >> PGSHIFT; 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)) if (((pte & PTE_N) && (ppn == 0 || i != 0)) || (napot_bits != 0 && napot_bits != 4))
break; break;

Loading…
Cancel
Save