PTE_RWX
_Static_assert(PTE_RWX == RISCV_PTE_RWX, "PTE_RWX mismatch");
#define PTE_PROMOTE (PTE_V | PTE_RWX | PTE_D | PTE_G | PTE_U | \
if ((l2e & PTE_RWX) != 0) {
if ((l2e & PTE_RWX) != 0) {
if ((l2 & PTE_RWX) == 0) {
} else if ((l2 & PTE_RWX) != 0) {
KASSERT((pmap_load(l1) & PTE_RWX) == 0,
(pmap_load(l2) & PTE_RWX) == 0) {
KASSERT((oldl2 & PTE_RWX) != 0,
if ((l2e & PTE_RWX) != 0) {
if ((l2e & PTE_RWX) != 0) {
if ((l2e & PTE_RWX) == 0) {
KASSERT((oldl1 & PTE_RWX) != 0,
KASSERT((oldl2 & PTE_RWX) != 0,
KASSERT((pmap_load(l2) & PTE_RWX) == 0,
((l2e & PTE_RWX) == 0 || pmap_demote_l2_locked(pmap, l2,
if ((oldl2 & PTE_RWX) != 0) {
if ((oldl2 & PTE_RWX) != 0)
if ((pmap_load(l2) & PTE_RWX) != 0)
if ((l2e & PTE_RWX) != 0) {
KASSERT((pmap_load(l2) & PTE_RWX) == 0,
if ((tpte & PTE_RWX) != 0) {
KASSERT((pmap_load(l2) & PTE_RWX) == 0,
KASSERT((pmap_load(l2) & PTE_RWX) == 0,
KASSERT((pmap_load(l2) & PTE_RWX) == 0,
if ((l1e & PTE_RWX) != 0) {
if ((l2e & PTE_RWX) != 0) {
if ((l1e & PTE_RWX) != 0) {
if ((l2e & PTE_RWX) != 0) {
if ((tpte & PTE_RWX) != 0) {
if ((l1e & PTE_RWX) != 0) {
attrs |= l1e & (PTE_RWX | PTE_U);
if ((l2e & PTE_RWX) != 0) {
attrs |= l2e & (PTE_RWX | PTE_U);
attrs |= l3e & (PTE_RWX | PTE_U | PTE_G);
if ((l1e & PTE_RWX) != 0) {
if ((l2e & PTE_RWX) != 0) {