PTE_D
_Static_assert(PTE_D == RISCV_PTE_D, "PTE_D mismatch");
#define PTE_KERN (PTE_V | PTE_R | PTE_W | PTE_A | PTE_D)
#define PTE_PROMOTE (PTE_V | PTE_RWX | PTE_D | PTE_G | PTE_U | \
if ((oldl2 & PTE_D) != 0)
if ((old_l3 & PTE_D) != 0)
if ((l3e & PTE_D) != 0)
mask |= PTE_W | PTE_D;
(l2e & (PTE_SW_MANAGED | PTE_D)) ==
(PTE_SW_MANAGED | PTE_D)) {
(l3e & (PTE_SW_MANAGED | PTE_D)) ==
(PTE_SW_MANAGED | PTE_D)) {
bits |= PTE_D;
KASSERT((oldl1 & (PTE_D | PTE_W)) != PTE_W,
KASSERT((oldl2 & (PTE_D | PTE_W)) != PTE_W,
while ((firstl3e & (PTE_W | PTE_D)) == PTE_W) {
while ((l3e & (PTE_W | PTE_D)) == PTE_W) {
new_l3 |= PTE_D;
new_l3 |= PTE_D;
if ((orig_l3 & PTE_D) != 0)
if ((orig_l3 & (PTE_D | PTE_SW_MANAGED)) ==
(PTE_D | PTE_SW_MANAGED))
if ((tpte & (PTE_D | PTE_W)) ==
(PTE_D | PTE_W)) {
mask |= PTE_D;
newl3 = oldl3 & ~(PTE_D | PTE_W);
if ((oldl3 & PTE_D) != 0)
if ((l2e & (PTE_W | PTE_D)) == (PTE_W | PTE_D)) {
if ((l3e & PTE_D) != 0)
pmap_clear_bits(l3, PTE_D | PTE_W);
if ((pmap_load(l3) & (PTE_D | PTE_W)) == (PTE_D | PTE_W)) {
pmap_clear_bits(l3, PTE_D | PTE_W);
if ((tpte & PTE_D) != 0)