Lines Matching +full:inter +full:- +full:processor
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
124 cpu_apic_ids[i] = -1;
127 /* Install an inter-CPU IPI for cache and TLB invalidations. */
131 /* Install an inter-CPU IPI for all-CPU rendezvous */
135 /* Install generic inter-CPU IPI handler */
139 /* Install an inter-CPU IPI for CPU stop/restart */
143 /* Install an inter-CPU IPI for CPU suspend/resume */
152 if (boot_cpu_id == -1) {
166 MPASS(kernel_pmap->pm_cr3 < (1UL << 32));
167 mptramp_pagetables = kernel_pmap->pm_cr3;
169 /* Start each Application Processor */
202 pc->pc_apic_id = cpu_apic_ids[cpu];
203 pc->pc_prvspace = pc;
204 pc->pc_curthread = 0;
205 pc->pc_tssp = &pc->pc_common_tss;
206 pc->pc_rsp0 = 0;
207 pc->pc_pti_rsp0 = (((vm_offset_t)&pc->pc_pti_stack +
209 gdt = pc->pc_gdt;
210 pc->pc_tss = (struct system_segment_descriptor *)&gdt[GPROC0_SEL];
211 pc->pc_fs32p = &gdt[GUFS32_SEL];
212 pc->pc_gs32p = &gdt[GUGS32_SEL];
213 pc->pc_ldt = (struct system_segment_descriptor *)&gdt[GUSERLDT_SEL];
214 pc->pc_ucr3_load_mask = PMAP_UCR3_NOMASK;
216 pc->pc_pcid_next = PMAP_PCID_KERN + 2;
217 pc->pc_pcid_gen = 1;
218 pc->pc_kpmap_store.pm_pcid = PMAP_PCID_KERN;
219 pc->pc_kpmap_store.pm_gen = 1;
221 pc->pc_smp_tlb_gen = 1;
224 pc->pc_common_tss = __pcpu[0].pc_common_tss;
225 pc->pc_common_tss.tss_iobase = sizeof(struct amd64tss) +
227 pc->pc_common_tss.tss_rsp0 = 0;
230 np = ((struct nmi_pcpu *)&doublefault_stack[DBLFAULT_STACK_SIZE]) - 1;
231 np->np_pcpu = (register_t)pc;
232 pc->pc_common_tss.tss_ist1 = (long)np;
235 np = ((struct nmi_pcpu *)&nmi_stack[NMI_STACK_SIZE]) - 1;
236 np->np_pcpu = (register_t)pc;
237 pc->pc_common_tss.tss_ist2 = (long)np;
240 np = ((struct nmi_pcpu *)&mce_stack[MCE_STACK_SIZE]) - 1;
241 np->np_pcpu = (register_t)pc;
242 pc->pc_common_tss.tss_ist3 = (long)np;
245 np = ((struct nmi_pcpu *)&dbg_stack[DBG_STACK_SIZE]) - 1;
246 np->np_pcpu = (register_t)pc;
247 pc->pc_common_tss.tss_ist4 = (long)np;
250 gdt_segs[GPROC0_SEL].ssd_base = (long)&pc->pc_common_tss;
258 ap_gdt.rd_limit = NGDT * sizeof(gdt[0]) - 1;
260 lgdt(&ap_gdt); /* does magic intra-segment return */
347 v_pml4 = &kernel_pmap->pm_pmltop[0];
379 old_pml45 = kernel_pmap->pm_pmltop[0];
381 kernel_pmap->pm_pmltop[0] = VM_PAGE_TO_PHYS(m_pml4) |
393 /* save the current value of the warm-start vector */
405 outb(CMOS_DATA, BIOS_WARM); /* 'warm-start' */
431 kstack_pages * PAGE_SIZE - 8;
434 /* attempt to start the Application Processor */
453 kernel_pmap->pm_pmltop[0] = old_pml45;
469 * This function starts the AP (application processor) identified
554 SYSINIT(invl_ops, SI_SUB_SMP - 1, SI_ORDER_ANY, invl_scoreboard_init, NULL);
576 * underlying processor, even when this processor is not set in the
603 KASSERT(curthread->td_pinned > 0, ("curthread not pinned"));
617 * non-invalidation IPIs that take smp_ipi_mtx spinlock,
727 total = atop(addr2 - addr1);
730 cnt = atop(NBPDR - (va & PDRMASK));
736 cnt - 1);
738 total -= cnt;
744 INVLPGB_2M_CNT | (cnt - 1));
746 total -= cnt * NPTEPG;
758 ipi_range_size += (addr2 - addr1) / PAGE_SIZE;
832 smp_tlb_pmap->pm_ucr3 != PMAP_NO_CR3)
858 load_cr3(smp_tlb_pmap->pm_cr3 |
860 if (smp_tlb_pmap->pm_ucr3 != PMAP_NO_CR3)
893 smp_tlb_pmap->pm_ucr3 != PMAP_NO_CR3 &&
917 (ucr3 = smp_tlb_pmap->pm_ucr3) != PMAP_NO_CR3 &&
920 kcr3 = smp_tlb_pmap->pm_cr3 | pcid | CR3_PCID_SAVE;
971 smp_tlb_pmap->pm_ucr3 != PMAP_NO_CR3 &&
1004 (ucr3 = smp_tlb_pmap->pm_ucr3) != PMAP_NO_CR3 &&
1007 kcr3 = smp_tlb_pmap->pm_cr3 | pcid | CR3_PCID_SAVE;
1096 smp_tlb_pmap = initiator_pc->pc_smp_tlb_pmap;
1097 smp_tlb_addr1 = initiator_pc->pc_smp_tlb_addr1;
1098 smp_tlb_addr2 = initiator_pc->pc_smp_tlb_addr2;
1099 smp_tlb_op = initiator_pc->pc_smp_tlb_op;
1100 smp_tlb_gen = initiator_pc->pc_smp_tlb_gen;
1115 * and not touch not-invalidated user page table.