Changeset View
Changeset View
Standalone View
Standalone View
head/sys/powerpc/aim/mmu_oea.c
Show First 20 Lines • Show All 1,143 Lines • ▼ Show 20 Lines | moea_enter_locked(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, | ||||
struct pvo_head *pvo_head; | struct pvo_head *pvo_head; | ||||
uma_zone_t zone; | uma_zone_t zone; | ||||
u_int pte_lo, pvo_flags; | u_int pte_lo, pvo_flags; | ||||
int error; | int error; | ||||
if (pmap_bootstrapped) | if (pmap_bootstrapped) | ||||
rw_assert(&pvh_global_lock, RA_WLOCKED); | rw_assert(&pvh_global_lock, RA_WLOCKED); | ||||
PMAP_LOCK_ASSERT(pmap, MA_OWNED); | PMAP_LOCK_ASSERT(pmap, MA_OWNED); | ||||
if ((m->oflags & VPO_UNMANAGED) == 0) | if ((m->oflags & VPO_UNMANAGED) == 0) { | ||||
if ((flags & PMAP_ENTER_QUICK_LOCKED) == 0) | |||||
VM_PAGE_OBJECT_BUSY_ASSERT(m); | VM_PAGE_OBJECT_BUSY_ASSERT(m); | ||||
else | |||||
VM_OBJECT_ASSERT_LOCKED(m->object); | |||||
} | |||||
if ((m->oflags & VPO_UNMANAGED) != 0 || !moea_initialized) { | if ((m->oflags & VPO_UNMANAGED) != 0 || !moea_initialized) { | ||||
pvo_head = &moea_pvo_kunmanaged; | pvo_head = &moea_pvo_kunmanaged; | ||||
zone = moea_upvo_zone; | zone = moea_upvo_zone; | ||||
pvo_flags = 0; | pvo_flags = 0; | ||||
} else { | } else { | ||||
pvo_head = vm_page_to_pvoh(m); | pvo_head = vm_page_to_pvoh(m); | ||||
zone = moea_mpvo_zone; | zone = moea_mpvo_zone; | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | moea_enter_object(mmu_t mmu, pmap_t pm, vm_offset_t start, vm_offset_t end, | ||||
VM_OBJECT_ASSERT_LOCKED(m_start->object); | VM_OBJECT_ASSERT_LOCKED(m_start->object); | ||||
psize = atop(end - start); | psize = atop(end - start); | ||||
m = m_start; | m = m_start; | ||||
rw_wlock(&pvh_global_lock); | rw_wlock(&pvh_global_lock); | ||||
PMAP_LOCK(pm); | PMAP_LOCK(pm); | ||||
while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { | while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { | ||||
moea_enter_locked(pm, start + ptoa(diff), m, prot & | moea_enter_locked(pm, start + ptoa(diff), m, prot & | ||||
(VM_PROT_READ | VM_PROT_EXECUTE), 0, 0); | (VM_PROT_READ | VM_PROT_EXECUTE), PMAP_ENTER_QUICK_LOCKED, | ||||
0); | |||||
m = TAILQ_NEXT(m, listq); | m = TAILQ_NEXT(m, listq); | ||||
} | } | ||||
rw_wunlock(&pvh_global_lock); | rw_wunlock(&pvh_global_lock); | ||||
PMAP_UNLOCK(pm); | PMAP_UNLOCK(pm); | ||||
} | } | ||||
void | void | ||||
moea_enter_quick(mmu_t mmu, pmap_t pm, vm_offset_t va, vm_page_t m, | moea_enter_quick(mmu_t mmu, pmap_t pm, vm_offset_t va, vm_page_t m, | ||||
vm_prot_t prot) | vm_prot_t prot) | ||||
{ | { | ||||
rw_wlock(&pvh_global_lock); | rw_wlock(&pvh_global_lock); | ||||
PMAP_LOCK(pm); | PMAP_LOCK(pm); | ||||
moea_enter_locked(pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), | moea_enter_locked(pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), | ||||
0, 0); | PMAP_ENTER_QUICK_LOCKED, 0); | ||||
rw_wunlock(&pvh_global_lock); | rw_wunlock(&pvh_global_lock); | ||||
PMAP_UNLOCK(pm); | PMAP_UNLOCK(pm); | ||||
} | } | ||||
vm_paddr_t | vm_paddr_t | ||||
moea_extract(mmu_t mmu, pmap_t pm, vm_offset_t va) | moea_extract(mmu_t mmu, pmap_t pm, vm_offset_t va) | ||||
{ | { | ||||
struct pvo_entry *pvo; | struct pvo_entry *pvo; | ||||
▲ Show 20 Lines • Show All 1,519 Lines • Show Last 20 Lines |