Changeset View
Changeset View
Standalone View
Standalone View
sys/arm/arm/pmap-v4.c
Show First 20 Lines • Show All 3,432 Lines • ▼ Show 20 Lines | if (l1pte_section_p(l1pd)) { | ||||
if (l1pd & L1_S_SUPERSEC) | if (l1pd & L1_S_SUPERSEC) | ||||
pa = (l1pd & L1_SUP_FRAME) | (va & L1_SUP_OFFSET); | pa = (l1pd & L1_SUP_FRAME) | (va & L1_SUP_OFFSET); | ||||
else | else | ||||
pa = (l1pd & L1_S_FRAME) | (va & L1_S_OFFSET); | pa = (l1pd & L1_S_FRAME) | (va & L1_S_OFFSET); | ||||
if (vm_page_pa_tryrelock(pmap, pa & PG_FRAME, &paddr)) | if (vm_page_pa_tryrelock(pmap, pa & PG_FRAME, &paddr)) | ||||
goto retry; | goto retry; | ||||
if (l1pd & L1_S_PROT_W || (prot & VM_PROT_WRITE) == 0) { | if (l1pd & L1_S_PROT_W || (prot & VM_PROT_WRITE) == 0) { | ||||
m = PHYS_TO_VM_PAGE(pa); | m = PHYS_TO_VM_PAGE(pa); | ||||
vm_page_hold(m); | vm_page_wire(m); | ||||
} | } | ||||
} else { | } else { | ||||
/* | /* | ||||
* Note that we can't rely on the validity of the L1 | * Note that we can't rely on the validity of the L1 | ||||
* descriptor as an indication that a mapping exists. | * descriptor as an indication that a mapping exists. | ||||
* We have to look it up in the L2 dtable. | * We have to look it up in the L2 dtable. | ||||
*/ | */ | ||||
l2 = pmap->pm_l2[L2_IDX(l1idx)]; | l2 = pmap->pm_l2[L2_IDX(l1idx)]; | ||||
Show All 13 Lines | if (l1pte_section_p(l1pd)) { | ||||
if (pte & L2_S_PROT_W || (prot & VM_PROT_WRITE) == 0) { | if (pte & L2_S_PROT_W || (prot & VM_PROT_WRITE) == 0) { | ||||
if ((pte & L2_TYPE_MASK) == L2_TYPE_L) | if ((pte & L2_TYPE_MASK) == L2_TYPE_L) | ||||
pa = (pte & L2_L_FRAME) | (va & L2_L_OFFSET); | pa = (pte & L2_L_FRAME) | (va & L2_L_OFFSET); | ||||
else | else | ||||
pa = (pte & L2_S_FRAME) | (va & L2_S_OFFSET); | pa = (pte & L2_S_FRAME) | (va & L2_S_OFFSET); | ||||
if (vm_page_pa_tryrelock(pmap, pa & PG_FRAME, &paddr)) | if (vm_page_pa_tryrelock(pmap, pa & PG_FRAME, &paddr)) | ||||
goto retry; | goto retry; | ||||
m = PHYS_TO_VM_PAGE(pa); | m = PHYS_TO_VM_PAGE(pa); | ||||
vm_page_hold(m); | vm_page_wire(m); | ||||
} | } | ||||
} | } | ||||
PMAP_UNLOCK(pmap); | PMAP_UNLOCK(pmap); | ||||
PA_UNLOCK_COND(paddr); | PA_UNLOCK_COND(paddr); | ||||
return (m); | return (m); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 998 Lines • Show Last 20 Lines |