Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/aim/mmu_oea64.c
Show First 20 Lines • Show All 1,909 Lines • ▼ Show 20 Lines | moea64_uma_page_alloc(uma_zone_t zone, vm_size_t bytes, int domain, | ||||
* for new KVA addresses. Because this can get called from inside | * for new KVA addresses. Because this can get called from inside | ||||
* kmem allocation routines, calling kmem for a new address here | * kmem allocation routines, calling kmem for a new address here | ||||
* can lead to multiply locking non-recursive mutexes. | * can lead to multiply locking non-recursive mutexes. | ||||
*/ | */ | ||||
*flags = UMA_SLAB_PRIV; | *flags = UMA_SLAB_PRIV; | ||||
needed_lock = !PMAP_LOCKED(kernel_pmap); | needed_lock = !PMAP_LOCKED(kernel_pmap); | ||||
m = vm_page_alloc_domain(NULL, 0, domain, | m = vm_page_alloc_noobj_domain(domain, malloc2vm_flags(wait) | | ||||
malloc2vm_flags(wait) | VM_ALLOC_WIRED | VM_ALLOC_NOOBJ); | VM_ALLOC_WIRED); | ||||
if (m == NULL) | if (m == NULL) | ||||
return (NULL); | return (NULL); | ||||
va = VM_PAGE_TO_PHYS(m); | va = VM_PAGE_TO_PHYS(m); | ||||
pvo = alloc_pvo_entry(1 /* bootstrap */); | pvo = alloc_pvo_entry(1 /* bootstrap */); | ||||
pvo->pvo_pte.prot = VM_PROT_READ | VM_PROT_WRITE; | pvo->pvo_pte.prot = VM_PROT_READ | VM_PROT_WRITE; | ||||
pvo->pvo_pte.pa = VM_PAGE_TO_PHYS(m) | LPTE_M; | pvo->pvo_pte.pa = VM_PAGE_TO_PHYS(m) | LPTE_M; | ||||
if (needed_lock) | if (needed_lock) | ||||
PMAP_LOCK(kernel_pmap); | PMAP_LOCK(kernel_pmap); | ||||
init_pvo_entry(pvo, kernel_pmap, va); | init_pvo_entry(pvo, kernel_pmap, va); | ||||
pvo->pvo_vaddr |= PVO_WIRED; | pvo->pvo_vaddr |= PVO_WIRED; | ||||
moea64_pvo_enter(pvo, NULL, NULL); | moea64_pvo_enter(pvo, NULL, NULL); | ||||
if (needed_lock) | if (needed_lock) | ||||
PMAP_UNLOCK(kernel_pmap); | PMAP_UNLOCK(kernel_pmap); | ||||
if ((wait & M_ZERO) && (m->flags & PG_ZERO) == 0) | |||||
bzero((void *)va, PAGE_SIZE); | |||||
return (void *)va; | return (void *)va; | ||||
} | } | ||||
extern int elf32_nxstack; | extern int elf32_nxstack; | ||||
void | void | ||||
moea64_init() | moea64_init() | ||||
▲ Show 20 Lines • Show All 2,379 Lines • Show Last 20 Lines |