PTE_W
_Static_assert(PTE_W == RISCV_PTE_W, "PTE_W mismatch");
return (PTE_W | PTE_M);
#define LPTE_W EXTEND_PTE( PTE_W )
#define PTE_RWX (PTE_R | PTE_W | PTE_X)
#define PTE_KERN (PTE_V | PTE_R | PTE_W | PTE_A | PTE_D)
new_l3 |= PTE_W;
if ((l2 & PTE_W) != 0 || (prot & VM_PROT_WRITE) == 0) {
if ((l3 & PTE_W) != 0 || (prot & VM_PROT_WRITE) == 0)
mask |= PTE_W | PTE_D;
(ftype == VM_PROT_WRITE && (oldpte & PTE_W) == 0) ||
KASSERT((oldl1 & (PTE_D | PTE_W)) != PTE_W,
KASSERT((oldl2 & (PTE_D | PTE_W)) != PTE_W,
while ((firstl3e & (PTE_W | PTE_D)) == PTE_W) {
if (atomic_fcmpset_64(firstl3, &firstl3e, firstl3e & ~PTE_W)) {
firstl3e &= ~PTE_W;
while ((l3e & (PTE_W | PTE_D)) == PTE_W) {
if (atomic_fcmpset_64(l3, &l3e, l3e & ~PTE_W)) {
l3e &= ~PTE_W;
new_l3 |= PTE_W;
(new_l3 & PTE_W) != 0)
if ((new_l3 & PTE_W) != 0)
if ((new_l2 & PTE_W) != 0)
if ((tpte & (PTE_D | PTE_W)) ==
(PTE_D | PTE_W)) {
if ((pmap_load(l2) & PTE_W) != 0)
if ((oldl3 & PTE_W) != 0) {
newl3 = oldl3 & ~(PTE_D | PTE_W);
if ((l2e & (PTE_W | PTE_D)) == (PTE_W | PTE_D)) {
if ((oldl2 & PTE_W) != 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);
(range->attrs & PTE_W) == PTE_W ? 'w' : '-',