Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/aim/mmu_oea64.c
Show First 20 Lines • Show All 1,400 Lines • ▼ Show 20 Lines | |||||
moea64_enter(mmu_t mmu, pmap_t pmap, vm_offset_t va, vm_page_t m, | moea64_enter(mmu_t mmu, pmap_t pmap, vm_offset_t va, vm_page_t m, | ||||
vm_prot_t prot, u_int flags, int8_t psind) | vm_prot_t prot, u_int flags, int8_t psind) | ||||
{ | { | ||||
struct pvo_entry *pvo, *oldpvo; | struct pvo_entry *pvo, *oldpvo; | ||||
struct pvo_head *pvo_head; | struct pvo_head *pvo_head; | ||||
uint64_t pte_lo; | uint64_t pte_lo; | ||||
int error; | int error; | ||||
if ((m->oflags & VPO_UNMANAGED) == 0) | if ((m->oflags & VPO_UNMANAGED) == 0 && | ||||
(flags & PMAP_ENTER_QUICK_LOCKED) == 0) | |||||
VM_PAGE_OBJECT_BUSY_ASSERT(m); | VM_PAGE_OBJECT_BUSY_ASSERT(m); | ||||
pvo = alloc_pvo_entry(0); | pvo = alloc_pvo_entry(0); | ||||
if (pvo == NULL) | if (pvo == NULL) | ||||
return (KERN_RESOURCE_SHORTAGE); | return (KERN_RESOURCE_SHORTAGE); | ||||
pvo->pvo_pmap = NULL; /* to be filled in later */ | pvo->pvo_pmap = NULL; /* to be filled in later */ | ||||
pvo->pvo_pte.prot = prot; | pvo->pvo_pte.prot = prot; | ||||
▲ Show 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | moea64_enter_object(mmu_t mmu, pmap_t pm, vm_offset_t start, vm_offset_t end, | ||||
vm_pindex_t diff, psize; | vm_pindex_t diff, psize; | ||||
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; | ||||
while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { | while (m != NULL && (diff = m->pindex - m_start->pindex) < psize) { | ||||
moea64_enter(mmu, pm, start + ptoa(diff), m, prot & | moea64_enter(mmu, pm, start + ptoa(diff), m, prot & | ||||
(VM_PROT_READ | VM_PROT_EXECUTE), PMAP_ENTER_NOSLEEP, 0); | (VM_PROT_READ | VM_PROT_EXECUTE), PMAP_ENTER_NOSLEEP | | ||||
PMAP_ENTER_QUICK_LOCKED, 0); | |||||
m = TAILQ_NEXT(m, listq); | m = TAILQ_NEXT(m, listq); | ||||
} | } | ||||
} | } | ||||
void | void | ||||
moea64_enter_quick(mmu_t mmu, pmap_t pm, vm_offset_t va, vm_page_t m, | moea64_enter_quick(mmu_t mmu, pmap_t pm, vm_offset_t va, vm_page_t m, | ||||
vm_prot_t prot) | vm_prot_t prot) | ||||
{ | { | ||||
moea64_enter(mmu, pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), | moea64_enter(mmu, pm, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), | ||||
PMAP_ENTER_NOSLEEP, 0); | PMAP_ENTER_NOSLEEP | PMAP_ENTER_QUICK_LOCKED, 0); | ||||
} | } | ||||
vm_paddr_t | vm_paddr_t | ||||
moea64_extract(mmu_t mmu, pmap_t pm, vm_offset_t va) | moea64_extract(mmu_t mmu, pmap_t pm, vm_offset_t va) | ||||
{ | { | ||||
struct pvo_entry *pvo; | struct pvo_entry *pvo; | ||||
vm_paddr_t pa; | vm_paddr_t pa; | ||||
▲ Show 20 Lines • Show All 1,446 Lines • Show Last 20 Lines |