Changeset View
Changeset View
Standalone View
Standalone View
head/sys/amd64/amd64/pmap.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 3,536 Lines • ▼ Show 20 Lines | |||||
static void | static void | ||||
_pmap_unwire_ptp(pmap_t pmap, vm_offset_t va, vm_page_t m, struct spglist *free) | _pmap_unwire_ptp(pmap_t pmap, vm_offset_t va, vm_page_t m, struct spglist *free) | ||||
{ | { | ||||
PMAP_LOCK_ASSERT(pmap, MA_OWNED); | PMAP_LOCK_ASSERT(pmap, MA_OWNED); | ||||
/* | /* | ||||
* unmap the page table page | * unmap the page table page | ||||
*/ | */ | ||||
if (m->pindex >= (NUPDE + NUPDPE)) { | if (m->pindex >= NUPDE + NUPDPE) { | ||||
/* PDP page */ | /* PDP page */ | ||||
pml4_entry_t *pml4; | pml4_entry_t *pml4; | ||||
pml4 = pmap_pml4e(pmap, va); | pml4 = pmap_pml4e(pmap, va); | ||||
*pml4 = 0; | *pml4 = 0; | ||||
if (pmap->pm_pml4u != NULL && va <= VM_MAXUSER_ADDRESS) { | if (pmap->pm_pml4u != NULL && va <= VM_MAXUSER_ADDRESS) { | ||||
pml4 = &pmap->pm_pml4u[pmap_pml4e_index(va)]; | pml4 = &pmap->pm_pml4u[pmap_pml4e_index(va)]; | ||||
*pml4 = 0; | *pml4 = 0; | ||||
} | } | ||||
Show All 10 Lines | _pmap_unwire_ptp(pmap_t pmap, vm_offset_t va, vm_page_t m, struct spglist *free) | ||||
} | } | ||||
pmap_resident_count_dec(pmap, 1); | pmap_resident_count_dec(pmap, 1); | ||||
if (m->pindex < NUPDE) { | if (m->pindex < NUPDE) { | ||||
/* We just released a PT, unhold the matching PD */ | /* We just released a PT, unhold the matching PD */ | ||||
vm_page_t pdpg; | vm_page_t pdpg; | ||||
pdpg = PHYS_TO_VM_PAGE(*pmap_pdpe(pmap, va) & PG_FRAME); | pdpg = PHYS_TO_VM_PAGE(*pmap_pdpe(pmap, va) & PG_FRAME); | ||||
pmap_unwire_ptp(pmap, va, pdpg, free); | pmap_unwire_ptp(pmap, va, pdpg, free); | ||||
} | } else if (m->pindex < NUPDE + NUPDPE) { | ||||
if (m->pindex >= NUPDE && m->pindex < (NUPDE + NUPDPE)) { | |||||
/* We just released a PD, unhold the matching PDP */ | /* We just released a PD, unhold the matching PDP */ | ||||
vm_page_t pdppg; | vm_page_t pdppg; | ||||
pdppg = PHYS_TO_VM_PAGE(*pmap_pml4e(pmap, va) & PG_FRAME); | pdppg = PHYS_TO_VM_PAGE(*pmap_pml4e(pmap, va) & PG_FRAME); | ||||
pmap_unwire_ptp(pmap, va, pdppg, free); | pmap_unwire_ptp(pmap, va, pdppg, free); | ||||
} | } | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 7,080 Lines • Show Last 20 Lines |