Changeset View
Changeset View
Standalone View
Standalone View
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 4,339 Lines • ▼ Show 20 Lines | |||||
int | int | ||||
pmap_pinit_type(pmap_t pmap, enum pmap_type pm_type, int flags) | pmap_pinit_type(pmap_t pmap, enum pmap_type pm_type, int flags) | ||||
{ | { | ||||
vm_page_t pmltop_pg, pmltop_pgu; | vm_page_t pmltop_pg, pmltop_pgu; | ||||
vm_paddr_t pmltop_phys; | vm_paddr_t pmltop_phys; | ||||
int i; | int i; | ||||
/* | /* | ||||
* allocate the page directory page | * Allocate the page directory page. Pass NULL instead of a pointer to | ||||
* the pmap here to avoid recording this page in the resident count, as | |||||
* optimizations in pmap_remove() depend on this. | |||||
*/ | */ | ||||
pmltop_pg = pmap_alloc_pt_page(NULL, 0, VM_ALLOC_WIRED | VM_ALLOC_ZERO | | pmltop_pg = pmap_alloc_pt_page(NULL, 0, VM_ALLOC_WIRED | VM_ALLOC_ZERO | | ||||
VM_ALLOC_WAITOK); | VM_ALLOC_WAITOK); | ||||
pmltop_phys = VM_PAGE_TO_PHYS(pmltop_pg); | pmltop_phys = VM_PAGE_TO_PHYS(pmltop_pg); | ||||
pmap->pm_pmltop = (pml5_entry_t *)PHYS_TO_DMAP(pmltop_phys); | pmap->pm_pmltop = (pml5_entry_t *)PHYS_TO_DMAP(pmltop_phys); | ||||
CPU_FOREACH(i) { | CPU_FOREACH(i) { | ||||
Show All 15 Lines | pmap_pinit_type(pmap_t pmap, enum pmap_type pm_type, int flags) | ||||
switch (pm_type) { | switch (pm_type) { | ||||
case PT_X86: | case PT_X86: | ||||
pmap->pm_cr3 = pmltop_phys; | pmap->pm_cr3 = pmltop_phys; | ||||
if (pmap_is_la57(pmap)) | if (pmap_is_la57(pmap)) | ||||
pmap_pinit_pml5(pmltop_pg); | pmap_pinit_pml5(pmltop_pg); | ||||
else | else | ||||
pmap_pinit_pml4(pmltop_pg); | pmap_pinit_pml4(pmltop_pg); | ||||
if ((curproc->p_md.md_flags & P_MD_KPTI) != 0) { | if ((curproc->p_md.md_flags & P_MD_KPTI) != 0) { | ||||
/* | |||||
* As with pmltop_pg, pass NULL instead of a pointer to | |||||
* the pmap to ensure that the PTI page isn't counted. | |||||
*/ | |||||
pmltop_pgu = pmap_alloc_pt_page(NULL, 0, | pmltop_pgu = pmap_alloc_pt_page(NULL, 0, | ||||
VM_ALLOC_WIRED | VM_ALLOC_WAITOK); | VM_ALLOC_WIRED | VM_ALLOC_WAITOK); | ||||
pmap->pm_pmltopu = (pml4_entry_t *)PHYS_TO_DMAP( | pmap->pm_pmltopu = (pml4_entry_t *)PHYS_TO_DMAP( | ||||
VM_PAGE_TO_PHYS(pmltop_pgu)); | VM_PAGE_TO_PHYS(pmltop_pgu)); | ||||
if (pmap_is_la57(pmap)) | if (pmap_is_la57(pmap)) | ||||
pmap_pinit_pml5_pti(pmltop_pgu); | pmap_pinit_pml5_pti(pmltop_pgu); | ||||
else | else | ||||
pmap_pinit_pml4_pti(pmltop_pgu); | pmap_pinit_pml4_pti(pmltop_pgu); | ||||
▲ Show 20 Lines • Show All 7,584 Lines • Show Last 20 Lines |