Changeset View
Changeset View
Standalone View
Standalone View
head/sys/i386/i386/pmap.c
Show First 20 Lines • Show All 558 Lines • ▼ Show 20 Lines | #ifdef PMAP_PAE_COMP | ||||
ncr4 |= CR4_PAE; | ncr4 |= CR4_PAE; | ||||
#endif | #endif | ||||
if (ncr4 != 0) | if (ncr4 != 0) | ||||
load_cr4(rcr4() | ncr4); | load_cr4(rcr4() | ncr4); | ||||
/* Now enable paging */ | /* Now enable paging */ | ||||
#ifdef PMAP_PAE_COMP | #ifdef PMAP_PAE_COMP | ||||
cr3 = (u_int)IdlePDPT; | cr3 = (u_int)IdlePDPT; | ||||
if ((cpu_feature & CPUID_PAT) == 0) | |||||
wbinvd(); | |||||
#else | #else | ||||
cr3 = (u_int)IdlePTD; | cr3 = (u_int)IdlePTD; | ||||
#endif | #endif | ||||
tramp_idleptd = cr3; | tramp_idleptd = cr3; | ||||
load_cr3(cr3); | load_cr3(cr3); | ||||
load_cr0(rcr0() | CR0_PG); | load_cr0(rcr0() | CR0_PG); | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 1,460 Lines • ▼ Show 20 Lines | m = vm_page_alloc(NULL, 0, VM_ALLOC_NORMAL | VM_ALLOC_NOOBJ | | ||||
VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_WAITOK); | VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_WAITOK); | ||||
pmap->pm_ptdpg[i] = m; | pmap->pm_ptdpg[i] = m; | ||||
#ifdef PMAP_PAE_COMP | #ifdef PMAP_PAE_COMP | ||||
pmap->pm_pdpt[i] = VM_PAGE_TO_PHYS(m) | PG_V; | pmap->pm_pdpt[i] = VM_PAGE_TO_PHYS(m) | PG_V; | ||||
#endif | #endif | ||||
} | } | ||||
pmap_qenter((vm_offset_t)pmap->pm_pdir, pmap->pm_ptdpg, NPGPTD); | pmap_qenter((vm_offset_t)pmap->pm_pdir, pmap->pm_ptdpg, NPGPTD); | ||||
#ifdef PMAP_PAE_COMP | |||||
if ((cpu_feature & CPUID_PAT) == 0) { | |||||
pmap_invalidate_cache_range( | |||||
trunc_page((vm_offset_t)pmap->pm_pdpt), | |||||
round_page((vm_offset_t)pmap->pm_pdpt + | |||||
NPGPTD * sizeof(pdpt_entry_t))); | |||||
} | |||||
#endif | |||||
for (i = 0; i < NPGPTD; i++) | for (i = 0; i < NPGPTD; i++) | ||||
if ((pmap->pm_ptdpg[i]->flags & PG_ZERO) == 0) | if ((pmap->pm_ptdpg[i]->flags & PG_ZERO) == 0) | ||||
pagezero(pmap->pm_pdir + (i * NPDEPG)); | pagezero(pmap->pm_pdir + (i * NPDEPG)); | ||||
/* Install the trampoline mapping. */ | /* Install the trampoline mapping. */ | ||||
pmap->pm_pdir[TRPTDI] = PTD[TRPTDI]; | pmap->pm_pdir[TRPTDI] = PTD[TRPTDI]; | ||||
▲ Show 20 Lines • Show All 4,150 Lines • Show Last 20 Lines |