Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/booke/pmap_64.c
Show First 20 Lines • Show All 151 Lines • ▼ Show 20 Lines | |||||
/* Allocate a page, to be used in a page table. */ | /* Allocate a page, to be used in a page table. */ | ||||
static vm_offset_t | static vm_offset_t | ||||
mmu_booke_alloc_page(pmap_t pmap, unsigned int idx, bool nosleep) | mmu_booke_alloc_page(pmap_t pmap, unsigned int idx, bool nosleep) | ||||
{ | { | ||||
vm_page_t m; | vm_page_t m; | ||||
int req; | int req; | ||||
req = VM_ALLOC_NOOBJ | VM_ALLOC_WIRED | VM_ALLOC_ZERO; | req = VM_ALLOC_WIRED | VM_ALLOC_ZERO; | ||||
while ((m = vm_page_alloc(NULL, idx, req)) == NULL) { | while ((m = vm_page_alloc_noobj(req)) == NULL) { | ||||
if (nosleep) | if (nosleep) | ||||
return (0); | return (0); | ||||
PMAP_UNLOCK(pmap); | PMAP_UNLOCK(pmap); | ||||
rw_wunlock(&pvh_global_lock); | rw_wunlock(&pvh_global_lock); | ||||
vm_wait(NULL); | vm_wait(NULL); | ||||
rw_wlock(&pvh_global_lock); | rw_wlock(&pvh_global_lock); | ||||
PMAP_LOCK(pmap); | PMAP_LOCK(pmap); | ||||
} | } | ||||
m->pindex = idx; | |||||
if (!(m->flags & PG_ZERO)) | |||||
/* Zero whole ptbl. */ | |||||
mmu_booke_zero_page(m); | |||||
return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m))); | return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m))); | ||||
} | } | ||||
/* Initialize pool of kva ptbl buffers. */ | /* Initialize pool of kva ptbl buffers. */ | ||||
static void | static void | ||||
ptbl_init(void) | ptbl_init(void) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 609 Lines • Show Last 20 Lines |