Changeset View
Changeset View
Standalone View
Standalone View
head/sys/arm64/arm64/pmap.c
Show First 20 Lines • Show All 1,403 Lines • ▼ Show 20 Lines | pmap_pinit(pmap_t pmap) | ||||
vm_paddr_t l0phys; | vm_paddr_t l0phys; | ||||
vm_page_t l0pt; | vm_page_t l0pt; | ||||
/* | /* | ||||
* allocate the l0 page | * allocate the l0 page | ||||
*/ | */ | ||||
while ((l0pt = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | | while ((l0pt = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | | ||||
VM_ALLOC_NOOBJ | VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) | VM_ALLOC_NOOBJ | VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) | ||||
VM_WAIT; | vm_wait(NULL); | ||||
l0phys = VM_PAGE_TO_PHYS(l0pt); | l0phys = VM_PAGE_TO_PHYS(l0pt); | ||||
pmap->pm_l0 = (pd_entry_t *)PHYS_TO_DMAP(l0phys); | pmap->pm_l0 = (pd_entry_t *)PHYS_TO_DMAP(l0phys); | ||||
if ((l0pt->flags & PG_ZERO) == 0) | if ((l0pt->flags & PG_ZERO) == 0) | ||||
pagezero(pmap->pm_l0); | pagezero(pmap->pm_l0); | ||||
pmap->pm_root.rt_root = 0; | pmap->pm_root.rt_root = 0; | ||||
Show All 23 Lines | _pmap_alloc_l3(pmap_t pmap, vm_pindex_t ptepindex, struct rwlock **lockp) | ||||
/* | /* | ||||
* Allocate a page table page. | * Allocate a page table page. | ||||
*/ | */ | ||||
if ((m = vm_page_alloc(NULL, ptepindex, VM_ALLOC_NOOBJ | | if ((m = vm_page_alloc(NULL, ptepindex, VM_ALLOC_NOOBJ | | ||||
VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) { | VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) { | ||||
if (lockp != NULL) { | if (lockp != NULL) { | ||||
RELEASE_PV_LIST_LOCK(lockp); | RELEASE_PV_LIST_LOCK(lockp); | ||||
PMAP_UNLOCK(pmap); | PMAP_UNLOCK(pmap); | ||||
VM_WAIT; | vm_wait(NULL); | ||||
PMAP_LOCK(pmap); | PMAP_LOCK(pmap); | ||||
} | } | ||||
/* | /* | ||||
* Indicate the need to retry. While waiting, the page table | * Indicate the need to retry. While waiting, the page table | ||||
* page may have been allocated. | * page may have been allocated. | ||||
*/ | */ | ||||
return (NULL); | return (NULL); | ||||
▲ Show 20 Lines • Show All 3,449 Lines • Show Last 20 Lines |