Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/arm64/pmap.c
Show First 20 Lines • Show All 5,658 Lines • ▼ Show 20 Lines | if (!PMAP_TRYLOCK(pmap)) { | ||||
if (pvh_gen != pvh->pv_gen || md_gen != m->md.pv_gen) { | if (pvh_gen != pvh->pv_gen || md_gen != m->md.pv_gen) { | ||||
PMAP_UNLOCK(pmap); | PMAP_UNLOCK(pmap); | ||||
goto restart; | goto restart; | ||||
} | } | ||||
} | } | ||||
l2 = pmap_l2(pmap, pv->pv_va); | l2 = pmap_l2(pmap, pv->pv_va); | ||||
l3 = pmap_l2_to_l3(l2, pv->pv_va); | l3 = pmap_l2_to_l3(l2, pv->pv_va); | ||||
oldl3 = pmap_load(l3); | oldl3 = pmap_load(l3); | ||||
if (pmap_l3_valid(oldl3) && | if ((oldl3 & (ATTR_S1_AP_RW_BIT | ATTR_SW_DBM)) == ATTR_SW_DBM){ | ||||
(oldl3 & (ATTR_S1_AP_RW_BIT | ATTR_SW_DBM)) == ATTR_SW_DBM){ | |||||
pmap_set_bits(l3, ATTR_S1_AP(ATTR_S1_AP_RO)); | pmap_set_bits(l3, ATTR_S1_AP(ATTR_S1_AP_RO)); | ||||
pmap_invalidate_page(pmap, pv->pv_va); | pmap_invalidate_page(pmap, pv->pv_va); | ||||
} | } | ||||
PMAP_UNLOCK(pmap); | PMAP_UNLOCK(pmap); | ||||
} | } | ||||
rw_wunlock(lock); | rw_wunlock(lock); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,350 Lines • Show Last 20 Lines |