Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/amd64/pmap.c
Show First 20 Lines • Show All 2,651 Lines • ▼ Show 20 Lines | CPU_FOREACH(i) { | ||||
pmap->pm_pcids[i].pm_gen = 0; | pmap->pm_pcids[i].pm_gen = 0; | ||||
if (!pti) { | if (!pti) { | ||||
__pcpu[i].pc_kcr3 = PMAP_NO_CR3; | __pcpu[i].pc_kcr3 = PMAP_NO_CR3; | ||||
__pcpu[i].pc_ucr3 = PMAP_NO_CR3; | __pcpu[i].pc_ucr3 = PMAP_NO_CR3; | ||||
} | } | ||||
} | } | ||||
PCPU_SET(curpmap, kernel_pmap); | PCPU_SET(curpmap, kernel_pmap); | ||||
pmap_activate(curthread); | pmap_activate(curthread); | ||||
CPU_FILL(&kernel_pmap->pm_active); | CPU_FILL(&kernel_pmap->pm_active); | ||||
alc: This line is now redundant. | |||||
} | } | ||||
void | void | ||||
pmap_pinit_pml4(vm_page_t pml4pg) | pmap_pinit_pml4(vm_page_t pml4pg) | ||||
{ | { | ||||
pml4_entry_t *pm_pml4; | pml4_entry_t *pm_pml4; | ||||
int i; | int i; | ||||
▲ Show 20 Lines • Show All 4,862 Lines • ▼ Show 20 Lines | if (cached) | ||||
PCPU_INC(pm_save_cnt); | PCPU_INC(pm_save_cnt); | ||||
} else if (cr3 != pmap->pm_cr3) { | } else if (cr3 != pmap->pm_cr3) { | ||||
load_cr3(pmap->pm_cr3); | load_cr3(pmap->pm_cr3); | ||||
PCPU_SET(curpmap, pmap); | PCPU_SET(curpmap, pmap); | ||||
if (pti) { | if (pti) { | ||||
PCPU_SET(kcr3, pmap->pm_cr3); | PCPU_SET(kcr3, pmap->pm_cr3); | ||||
PCPU_SET(ucr3, pmap->pm_ucr3); | PCPU_SET(ucr3, pmap->pm_ucr3); | ||||
} | } | ||||
} | } else | ||||
PCPU_SET(curpmap, pmap); | |||||
if (pmap->pm_ucr3 != PMAP_NO_CR3) { | if (pmap->pm_ucr3 != PMAP_NO_CR3) { | ||||
rsp0 = ((vm_offset_t)PCPU_PTR(pti_stack) + | rsp0 = ((vm_offset_t)PCPU_PTR(pti_stack) + | ||||
PC_PTI_STACK_SZ * sizeof(uint64_t)) & ~0xful; | PC_PTI_STACK_SZ * sizeof(uint64_t)) & ~0xful; | ||||
tssp = PCPU_GET(tssp); | tssp = PCPU_GET(tssp); | ||||
tssp->tss_rsp0 = rsp0; | tssp->tss_rsp0 = rsp0; | ||||
} | } | ||||
#ifdef SMP | #ifdef SMP | ||||
CPU_CLR_ATOMIC(cpuid, &oldpmap->pm_active); | CPU_CLR_ATOMIC(cpuid, &oldpmap->pm_active); | ||||
Show All 10 Lines | pmap_activate(struct thread *td) | ||||
pmap_activate_sw(td); | pmap_activate_sw(td); | ||||
critical_exit(); | critical_exit(); | ||||
} | } | ||||
void | void | ||||
pmap_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz) | pmap_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz) | ||||
{ | { | ||||
} | } | ||||
Not Done Inline ActionsThe reasons not to set curpmap to the kernel pmap aren't obvious, so I would suggest a KASSERT: KASSERT(pmap != kernel_pmap, ("curpmap can't be kermel_pmap")); alc: The reasons not to set curpmap to the kernel pmap aren't obvious, so I would suggest a KASSERT… | |||||
/* | /* | ||||
* Increase the starting virtual address of the given mapping if a | * Increase the starting virtual address of the given mapping if a | ||||
* different alignment might result in more superpage mappings. | * different alignment might result in more superpage mappings. | ||||
*/ | */ | ||||
void | void | ||||
pmap_align_superpage(vm_object_t object, vm_ooffset_t offset, | pmap_align_superpage(vm_object_t object, vm_ooffset_t offset, | ||||
vm_offset_t *addr, vm_size_t size) | vm_offset_t *addr, vm_size_t size) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 639 Lines • Show Last 20 Lines |
This line is now redundant.