Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm64/arm64/pmap.c
Show First 20 Lines • Show All 3,355 Lines • ▼ Show 20 Lines | havel3: | ||||
if ((m->oflags & VPO_UNMANAGED) == 0) { | if ((m->oflags & VPO_UNMANAGED) == 0) { | ||||
if (pv == NULL) { | if (pv == NULL) { | ||||
pv = get_pv_entry(pmap, &lock); | pv = get_pv_entry(pmap, &lock); | ||||
pv->pv_va = va; | pv->pv_va = va; | ||||
} | } | ||||
CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa); | CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa); | ||||
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_next); | TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_next); | ||||
m->md.pv_gen++; | m->md.pv_gen++; | ||||
if ((new_l3 & ATTR_AP_RW_BIT) == ATTR_AP(ATTR_AP_RW)) | if ((new_l3 & ATTR_SW_DBM) != 0) | ||||
vm_page_aflag_set(m, PGA_WRITEABLE); | vm_page_aflag_set(m, PGA_WRITEABLE); | ||||
} | } | ||||
validate: | validate: | ||||
/* | /* | ||||
* Sync icache if exec permission and attribute VM_MEMATTR_WRITE_BACK | * Sync icache if exec permission and attribute VM_MEMATTR_WRITE_BACK | ||||
* is set. Do it now, before the mapping is stored and made | * is set. Do it now, before the mapping is stored and made | ||||
* valid for hardware table walk. If done later, then other can | * valid for hardware table walk. If done later, then other can | ||||
▲ Show 20 Lines • Show All 176 Lines • ▼ Show 20 Lines | if (!pmap_pv_insert_l2(pmap, va, new_l2, flags, lockp)) { | ||||
pmap_invalidate_page(pmap, va); | pmap_invalidate_page(pmap, va); | ||||
vm_page_free_pages_toq(&free, true); | vm_page_free_pages_toq(&free, true); | ||||
} | } | ||||
CTR2(KTR_PMAP, | CTR2(KTR_PMAP, | ||||
"pmap_enter_l2: failure for va %#lx in pmap %p", | "pmap_enter_l2: failure for va %#lx in pmap %p", | ||||
va, pmap); | va, pmap); | ||||
return (KERN_RESOURCE_SHORTAGE); | return (KERN_RESOURCE_SHORTAGE); | ||||
} | } | ||||
if ((new_l2 & ATTR_AP_RW_BIT) == ATTR_AP(ATTR_AP_RW)) | if ((new_l2 & ATTR_SW_DBM) != 0) | ||||
for (mt = m; mt < &m[L2_SIZE / PAGE_SIZE]; mt++) | for (mt = m; mt < &m[L2_SIZE / PAGE_SIZE]; mt++) | ||||
vm_page_aflag_set(mt, PGA_WRITEABLE); | vm_page_aflag_set(mt, PGA_WRITEABLE); | ||||
} | } | ||||
/* | /* | ||||
* Increment counters. | * Increment counters. | ||||
*/ | */ | ||||
if ((new_l2 & ATTR_SW_WIRED) != 0) | if ((new_l2 & ATTR_SW_WIRED) != 0) | ||||
▲ Show 20 Lines • Show All 2,267 Lines • Show Last 20 Lines |