|
Lines 2560-2567
pmap_pinit0(pmap_t pmap)
Link Here
|
| 2560 |
CPU_FOREACH(i) { |
2560 |
CPU_FOREACH(i) { |
| 2561 |
pmap->pm_pcids[i].pm_pcid = PMAP_PCID_NONE; |
2561 |
pmap->pm_pcids[i].pm_pcid = PMAP_PCID_NONE; |
| 2562 |
pmap->pm_pcids[i].pm_gen = 0; |
2562 |
pmap->pm_pcids[i].pm_gen = 0; |
| 2563 |
if (!pti) |
2563 |
if (!pti) { |
| 2564 |
__pcpu[i].pc_kcr3 = PMAP_NO_CR3; |
2564 |
__pcpu[i].pc_kcr3 = PMAP_NO_CR3; |
|
|
2565 |
__pcpu[i].pc_ucr3 = PMAP_NO_CR3; |
| 2566 |
} |
| 2565 |
} |
2567 |
} |
| 2566 |
PCPU_SET(curpmap, kernel_pmap); |
2568 |
PCPU_SET(curpmap, kernel_pmap); |
| 2567 |
pmap_activate(curthread); |
2569 |
pmap_activate(curthread); |
|
Lines 2736-2742
_pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex,
Link Here
|
| 2736 |
* the kernel-mode page table active on return |
2738 |
* the kernel-mode page table active on return |
| 2737 |
* to user space. |
2739 |
* to user space. |
| 2738 |
*/ |
2740 |
*/ |
| 2739 |
*pml4 |= pg_nx; |
2741 |
if (pmap->pm_ucr3 != PMAP_NO_CR3) |
|
|
2742 |
*pml4 |= pg_nx; |
| 2740 |
|
2743 |
|
| 2741 |
pml4u = &pmap->pm_pml4u[pml4index]; |
2744 |
pml4u = &pmap->pm_pml4u[pml4index]; |
| 2742 |
*pml4u = VM_PAGE_TO_PHYS(m) | PG_U | PG_RW | PG_V | |
2745 |
*pml4u = VM_PAGE_TO_PHYS(m) | PG_U | PG_RW | PG_V | |
|
Lines 7337-7345
pmap_activate_sw(struct thread *td)
Link Here
|
| 7337 |
{ |
7340 |
{ |
| 7338 |
pmap_t oldpmap, pmap; |
7341 |
pmap_t oldpmap, pmap; |
| 7339 |
struct invpcid_descr d; |
7342 |
struct invpcid_descr d; |
| 7340 |
uint64_t cached, cr3, kcr3, kern_pti_cached, ucr3; |
7343 |
uint64_t cached, cr3, kcr3, kern_pti_cached, rsp0, ucr3; |
| 7341 |
register_t rflags; |
7344 |
register_t rflags; |
| 7342 |
u_int cpuid; |
7345 |
u_int cpuid; |
|
|
7346 |
struct amd64tss *tssp; |
| 7343 |
|
7347 |
|
| 7344 |
oldpmap = PCPU_GET(curpmap); |
7348 |
oldpmap = PCPU_GET(curpmap); |
| 7345 |
pmap = vmspace_pmap(td->td_proc->p_vmspace); |
7349 |
pmap = vmspace_pmap(td->td_proc->p_vmspace); |
|
Lines 7430-7435
pmap_activate_sw(struct thread *td)
Link Here
|
| 7430 |
PCPU_SET(ucr3, pmap->pm_ucr3); |
7434 |
PCPU_SET(ucr3, pmap->pm_ucr3); |
| 7431 |
} |
7435 |
} |
| 7432 |
} |
7436 |
} |
|
|
7437 |
if (pmap->pm_ucr3 != PMAP_NO_CR3) { |
| 7438 |
rsp0 = ((vm_offset_t)PCPU_PTR(pti_stack) + |
| 7439 |
PC_PTI_STACK_SZ * sizeof(uint64_t)) & ~0xful; |
| 7440 |
tssp = PCPU_GET(tssp); |
| 7441 |
tssp->tss_rsp0 = rsp0; |
| 7442 |
} |
| 7433 |
#ifdef SMP |
7443 |
#ifdef SMP |
| 7434 |
CPU_CLR_ATOMIC(cpuid, &oldpmap->pm_active); |
7444 |
CPU_CLR_ATOMIC(cpuid, &oldpmap->pm_active); |
| 7435 |
#else |
7445 |
#else |