MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_pti_init

Function pmap_pti_init

freebsd/amd64/amd64/pmap.c:10601–10643  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10599}
10600
10601static void
10602pmap_pti_init(void)
10603{
10604 vm_page_t pml4_pg;
10605 pdp_entry_t *pdpe;
10606 vm_offset_t va;
10607 int i;
10608
10609 if (!pti)
10610 return;
10611 pti_obj = vm_pager_allocate(OBJT_PHYS, NULL, 0, VM_PROT_ALL, 0, NULL);
10612 VM_OBJECT_WLOCK(pti_obj);
10613 pml4_pg = pmap_pti_alloc_page();
10614 pti_pml4 = (pml4_entry_t *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(pml4_pg));
10615 for (va = VM_MIN_KERNEL_ADDRESS; va <= VM_MAX_KERNEL_ADDRESS &&
10616 va >= VM_MIN_KERNEL_ADDRESS && va > NBPML4; va += NBPML4) {
10617 pdpe = pmap_pti_pdpe(va);
10618 pmap_pti_wire_pte(pdpe);
10619 }
10620 pmap_pti_add_kva_locked((vm_offset_t)&__pcpu[0],
10621 (vm_offset_t)&__pcpu[0] + sizeof(__pcpu[0]) * MAXCPU, false);
10622 pmap_pti_add_kva_locked((vm_offset_t)idt, (vm_offset_t)idt +
10623 sizeof(struct gate_descriptor) * NIDT, false);
10624 CPU_FOREACH(i) {
10625 /* Doublefault stack IST 1 */
10626 va = __pcpu[i].pc_common_tss.tss_ist1 + sizeof(struct nmi_pcpu);
10627 pmap_pti_add_kva_locked(va - DBLFAULT_STACK_SIZE, va, false);
10628 /* NMI stack IST 2 */
10629 va = __pcpu[i].pc_common_tss.tss_ist2 + sizeof(struct nmi_pcpu);
10630 pmap_pti_add_kva_locked(va - NMI_STACK_SIZE, va, false);
10631 /* MC# stack IST 3 */
10632 va = __pcpu[i].pc_common_tss.tss_ist3 +
10633 sizeof(struct nmi_pcpu);
10634 pmap_pti_add_kva_locked(va - MCE_STACK_SIZE, va, false);
10635 /* DB# stack IST 4 */
10636 va = __pcpu[i].pc_common_tss.tss_ist4 + sizeof(struct nmi_pcpu);
10637 pmap_pti_add_kva_locked(va - DBG_STACK_SIZE, va, false);
10638 }
10639 pmap_pti_add_kva_locked((vm_offset_t)kernphys + KERNBASE,
10640 (vm_offset_t)etext, true);
10641 pti_finalized = true;
10642 VM_OBJECT_WUNLOCK(pti_obj);
10643}
10644SYSINIT(pmap_pti, SI_SUB_CPU + 1, SI_ORDER_ANY, pmap_pti_init, NULL);
10645
10646static pdp_entry_t *

Callers

nothing calls this directly

Calls 5

vm_pager_allocateFunction · 0.85
pmap_pti_alloc_pageFunction · 0.85
pmap_pti_pdpeFunction · 0.85
pmap_pti_wire_pteFunction · 0.85
pmap_pti_add_kva_lockedFunction · 0.85

Tested by

no test coverage detected