Index: head/sys/riscv/riscv/pmap.c =================================================================== --- head/sys/riscv/riscv/pmap.c +++ head/sys/riscv/riscv/pmap.c @@ -342,6 +342,8 @@ #define PTE_TO_PHYS(pte) \ ((((pte) & ~PTE_HI_MASK) >> PTE_PPN0_S) * PAGE_SIZE) +#define L2PTE_TO_PHYS(l2) \ + ((((l2) & ~PTE_HI_MASK) >> PTE_PPN1_S) << L2_SHIFT) static __inline pd_entry_t * pmap_l1(pmap_t pmap, vm_offset_t va) @@ -477,7 +479,7 @@ ("Invalid bootstrap L2 table")); /* L2 is superpages */ - ret = (l2[l2_slot] >> PTE_PPN1_S) << L2_SHIFT; + ret = L2PTE_TO_PHYS(l2[l2_slot]); ret += (va & L2_OFFSET); return (ret); @@ -825,7 +827,7 @@ } } else { /* L2 is superpages */ - pa = (l2 >> PTE_PPN1_S) << L2_SHIFT; + pa = L2PTE_TO_PHYS(l2); pa |= (va & L2_OFFSET); } } @@ -877,7 +879,7 @@ panic("pmap_kextract: No l2"); if ((pmap_load(l2) & PTE_RX) != 0) { /* superpages */ - pa = (pmap_load(l2) >> PTE_PPN1_S) << L2_SHIFT; + pa = L2PTE_TO_PHYS(pmap_load(l2)); pa |= (va & L2_OFFSET); return (pa); }