Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm64/arm64/pmap.c
Show First 20 Lines • Show All 2,856 Lines • ▼ Show 20 Lines | pmap_update_entry(pmap_t pmap, pd_entry_t *pte, pd_entry_t newpte, | ||||
critical_enter(); | critical_enter(); | ||||
/* Clear the old mapping */ | /* Clear the old mapping */ | ||||
pmap_load_clear(pte); | pmap_load_clear(pte); | ||||
pmap_invalidate_range_nopin(pmap, va, va + size); | pmap_invalidate_range_nopin(pmap, va, va + size); | ||||
/* Create the new mapping */ | /* Create the new mapping */ | ||||
pmap_load_store(pte, newpte); | pmap_load_store(pte, newpte); | ||||
dsb(ishst); | |||||
critical_exit(); | critical_exit(); | ||||
intr_restore(intr); | intr_restore(intr); | ||||
} | } | ||||
#if VM_NRESERVLEVEL > 0 | #if VM_NRESERVLEVEL > 0 | ||||
/* | /* | ||||
* After promotion from 512 4KB page mappings to a single 2MB page mapping, | * After promotion from 512 4KB page mappings to a single 2MB page mapping, | ||||
▲ Show 20 Lines • Show All 403 Lines • ▼ Show 20 Lines | if ((orig_l3 & ~ATTR_AF) != (new_l3 & ~ATTR_AF)) { | ||||
*/ | */ | ||||
CTR4(KTR_PMAP, "%s: already mapped page - " | CTR4(KTR_PMAP, "%s: already mapped page - " | ||||
"pmap %p va 0x%#lx pte 0x%lx", | "pmap %p va 0x%#lx pte 0x%lx", | ||||
__func__, pmap, va, new_l3); | __func__, pmap, va, new_l3); | ||||
} | } | ||||
} else { | } else { | ||||
/* New mappig */ | /* New mappig */ | ||||
pmap_load_store(l3, new_l3); | pmap_load_store(l3, new_l3); | ||||
dsb(ishst); | |||||
} | } | ||||
#if VM_NRESERVLEVEL > 0 | #if VM_NRESERVLEVEL > 0 | ||||
if (pmap != pmap_kernel() && | if (pmap != pmap_kernel() && | ||||
(mpte == NULL || mpte->wire_count == NL3PG) && | (mpte == NULL || mpte->wire_count == NL3PG) && | ||||
pmap_ps_enabled(pmap) && | pmap_ps_enabled(pmap) && | ||||
(m->flags & PG_FICTITIOUS) == 0 && | (m->flags & PG_FICTITIOUS) == 0 && | ||||
vm_reserv_level_iffullpop(m) == 0) { | vm_reserv_level_iffullpop(m) == 0) { | ||||
▲ Show 20 Lines • Show All 138 Lines • ▼ Show 20 Lines | pmap_enter_l2(pmap_t pmap, vm_offset_t va, pd_entry_t new_l2, u_int flags, | ||||
if ((new_l2 & ATTR_SW_WIRED) != 0) | if ((new_l2 & ATTR_SW_WIRED) != 0) | ||||
pmap->pm_stats.wired_count += L2_SIZE / PAGE_SIZE; | pmap->pm_stats.wired_count += L2_SIZE / PAGE_SIZE; | ||||
pmap->pm_stats.resident_count += L2_SIZE / PAGE_SIZE; | pmap->pm_stats.resident_count += L2_SIZE / PAGE_SIZE; | ||||
/* | /* | ||||
* Map the superpage. | * Map the superpage. | ||||
*/ | */ | ||||
(void)pmap_load_store(l2, new_l2); | (void)pmap_load_store(l2, new_l2); | ||||
dsb(ishst); | |||||
atomic_add_long(&pmap_l2_mappings, 1); | atomic_add_long(&pmap_l2_mappings, 1); | ||||
CTR2(KTR_PMAP, "pmap_enter_l2: success for va %#lx in pmap %p", | CTR2(KTR_PMAP, "pmap_enter_l2: success for va %#lx in pmap %p", | ||||
va, pmap); | va, pmap); | ||||
return (KERN_SUCCESS); | return (KERN_SUCCESS); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,970 Lines • Show Last 20 Lines |