Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/booke/pmap_32.c
Show First 20 Lines • Show All 258 Lines • ▼ Show 20 Lines | if (pbuf == NULL) | ||||
panic("pte_alloc: couldn't alloc kernel virtual memory"); | panic("pte_alloc: couldn't alloc kernel virtual memory"); | ||||
ptbl = (pte_t *)pbuf->kva; | ptbl = (pte_t *)pbuf->kva; | ||||
CTR2(KTR_PMAP, "%s: ptbl kva = %p", __func__, ptbl); | CTR2(KTR_PMAP, "%s: ptbl kva = %p", __func__, ptbl); | ||||
for (i = 0; i < PTBL_PAGES; i++) { | for (i = 0; i < PTBL_PAGES; i++) { | ||||
pidx = (PTBL_PAGES * pdir_idx) + i; | pidx = (PTBL_PAGES * pdir_idx) + i; | ||||
while ((m = vm_page_alloc(NULL, pidx, | while ((m = vm_page_alloc_noobj(VM_ALLOC_WIRED)) == NULL) { | ||||
VM_ALLOC_NOOBJ | VM_ALLOC_WIRED)) == NULL) { | |||||
if (nosleep) { | if (nosleep) { | ||||
ptbl_free_pmap_ptbl(pmap, ptbl); | ptbl_free_pmap_ptbl(pmap, ptbl); | ||||
for (j = 0; j < i; j++) | for (j = 0; j < i; j++) | ||||
vm_page_free(mtbl[j]); | vm_page_free(mtbl[j]); | ||||
vm_wire_sub(i); | vm_wire_sub(i); | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
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 = pidx; | |||||
mtbl[i] = m; | mtbl[i] = m; | ||||
} | } | ||||
/* Map allocated pages into kernel_pmap. */ | /* Map allocated pages into kernel_pmap. */ | ||||
mmu_booke_qenter((vm_offset_t)ptbl, mtbl, PTBL_PAGES); | mmu_booke_qenter((vm_offset_t)ptbl, mtbl, PTBL_PAGES); | ||||
/* Zero whole ptbl. */ | /* Zero whole ptbl. */ | ||||
bzero((caddr_t)ptbl, PTBL_PAGES * PAGE_SIZE); | bzero((caddr_t)ptbl, PTBL_PAGES * PAGE_SIZE); | ||||
▲ Show 20 Lines • Show All 714 Lines • Show Last 20 Lines |