Changeset View
Changeset View
Standalone View
Standalone View
sys/mips/mips/pmap.c
Show First 20 Lines • Show All 805 Lines • ▼ Show 20 Lines | retry: | ||||
if (ptep != NULL) { | if (ptep != NULL) { | ||||
pte = *ptep; | pte = *ptep; | ||||
if (pte_test(&pte, PTE_V) && (!pte_test(&pte, PTE_RO) || | if (pte_test(&pte, PTE_V) && (!pte_test(&pte, PTE_RO) || | ||||
(prot & VM_PROT_WRITE) == 0)) { | (prot & VM_PROT_WRITE) == 0)) { | ||||
pte_pa = TLBLO_PTE_TO_PA(pte); | pte_pa = TLBLO_PTE_TO_PA(pte); | ||||
if (vm_page_pa_tryrelock(pmap, pte_pa, &pa)) | if (vm_page_pa_tryrelock(pmap, pte_pa, &pa)) | ||||
goto retry; | goto retry; | ||||
m = PHYS_TO_VM_PAGE(pte_pa); | m = PHYS_TO_VM_PAGE(pte_pa); | ||||
vm_page_hold(m); | vm_page_wire(m); | ||||
} | } | ||||
} | } | ||||
PA_UNLOCK_COND(pa); | PA_UNLOCK_COND(pa); | ||||
PMAP_UNLOCK(pmap); | PMAP_UNLOCK(pmap); | ||||
return (m); | return (m); | ||||
} | } | ||||
/*************************************************** | /*************************************************** | ||||
▲ Show 20 Lines • Show All 2,879 Lines • Show Last 20 Lines |