Lines Matching +full:startup +full:- +full:time +full:- +full:ms
1 // SPDX-License-Identifier: GPL-2.0-or-later
13 * Pentium Pro and Pentium-II/Xeon MP machines.
19 * Alan Cox : By repeated request 8) - Total BogoMIPS report.
32 * Martin J. Bligh : Added support for multi-quad systems
86 #include <asm/intel-family.h>
88 #include <asm/spec-ctrl.h>
92 #include <asm/spec-ctrl.h>
164 if (!--smpboot_warm_reset_vector_count) { in smpboot_restore_warm_reset_vector()
242 * 32-bit specific. 64-bit reaches this code with the correct page in start_secondary()
273 * synchronization state to ALIVE and spin-waits for the control CPU to in start_secondary()
322 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in topology_same_node()
330 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in topology_sane()
333 "sched: CPU #%d's %s-sibling CPU #%d is not on the same node! " in topology_sane()
347 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in match_smt()
349 if (c->topo.pkg_id == o->topo.pkg_id && in match_smt()
350 c->topo.die_id == o->topo.die_id && in match_smt()
351 c->topo.amd_node_id == o->topo.amd_node_id && in match_smt()
353 if (c->topo.core_id == o->topo.core_id) in match_smt()
356 if ((c->topo.cu_id != 0xff) && in match_smt()
357 (o->topo.cu_id != 0xff) && in match_smt()
358 (c->topo.cu_id == o->topo.cu_id)) in match_smt()
362 } else if (c->topo.pkg_id == o->topo.pkg_id && in match_smt()
363 c->topo.die_id == o->topo.die_id && in match_smt()
364 c->topo.core_id == o->topo.core_id) { in match_smt()
373 if (c->topo.pkg_id != o->topo.pkg_id || c->topo.die_id != o->topo.die_id) in match_die()
377 return c->topo.amd_node_id == o->topo.amd_node_id; in match_die()
384 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in match_l2c()
404 if (c->topo.pkg_id == o->topo.pkg_id) in match_pkg()
410 * Define intel_cod_cpu[] for Intel COD (Cluster-on-Die) CPUs.
413 * match intel_cod_cpu[] has the SNC (Sub-NUMA Cluster) topology.
416 * by multiple NUMA nodes. The LLC is shared for off-package data
418 * on-package access. CPUID (the source of the information about
433 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in match_llc()
434 bool intel_snc = id && id->driver_data; in match_llc()
476 * AMD Magny-Cours, Intel Cluster-on-Die, and Intel
477 * Sub-NUMA Clustering have this.
499 * PKG domain since the NUMA domains will auto-magically create the in build_sched_topology()
503 unsigned int pkgdom = ARRAY_SIZE(x86_topology) - 2; in build_sched_topology()
509 * Drop the SMT domains if there is only one thread per-core in build_sched_topology()
534 c->booted_cores = 1; in set_cpu_sibling_map()
566 * topology_sibling_cpumask links to be set-up. in set_cpu_sibling_map()
584 c->booted_cores++; in set_cpu_sibling_map()
591 } else if (i != cpu && !c->booted_cores) in set_cpu_sibling_map()
592 c->booted_cores = cpu_data(i).booted_cores; in set_cpu_sibling_map()
597 /* maps the cpu to the sched domain representing multi-core */
625 pr_debug("Before bogocount - setting activated=1\n"); in impress_friends()
630 * that there should be a 10ms delay between the BSP asserting INIT
631 * and de-asserting INIT, when starting a remote processor.
667 * Wake up AP by INIT, INIT, STARTUP sequence.
693 * Wake up AP by INIT, INIT, STARTUP sequence.
707 * Should we send STARTUP IPIs ? in wakeup_secondary_cpu_via_init()
710 * If we don't have an integrated APIC, don't send the STARTUP IPIs. in wakeup_secondary_cpu_via_init()
718 * Run STARTUP IPI loop. in wakeup_secondary_cpu_via_init()
720 pr_debug("#startup loops: %d\n", num_starts); in wakeup_secondary_cpu_via_init()
723 pr_debug("Sending STARTUP #%d\n", j); in wakeup_secondary_cpu_via_init()
730 * STARTUP IPI in wakeup_secondary_cpu_via_init()
740 * Give the other CPU some time to accept the IPI. in wakeup_secondary_cpu_via_init()
747 pr_debug("Startup point 1\n"); in wakeup_secondary_cpu_via_init()
753 * Give the other CPU some time to accept the IPI. in wakeup_secondary_cpu_via_init()
766 pr_debug("After Startup\n"); in wakeup_secondary_cpu_via_init()
795 if (current_node > (-1)) in announce_cpu()
800 node_width - num_digits(node), " ", node); in announce_cpu()
808 pr_cont("%*s#%d", width - num_digits(cpu), " ", cpu); in announce_cpu()
837 * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
839 * Returns zero if startup was successfully sent, else error code from
840 * ->wakeup_secondary_cpu.
844 unsigned long start_ip = real_mode_header->trampoline_start; in do_boot_cpu()
848 /* If 64-bit wakeup method exists, use the 64-bit mode trampoline IP */ in do_boot_cpu()
849 if (apic->wakeup_secondary_cpu_64) in do_boot_cpu()
850 start_ip = real_mode_header->trampoline_start64; in do_boot_cpu()
852 idle->thread.sp = (unsigned long)task_pt_regs(idle); in do_boot_cpu()
857 initial_stack = idle->thread.sp; in do_boot_cpu()
869 * This grunge runs the startup process for in do_boot_cpu()
890 * - Use a method from the APIC driver if one defined, with wakeup in do_boot_cpu()
891 * straight to 64-bit mode preferred over wakeup to RM. in do_boot_cpu()
893 * - Use an INIT boot APIC message in do_boot_cpu()
895 if (apic->wakeup_secondary_cpu_64) in do_boot_cpu()
896 ret = apic->wakeup_secondary_cpu_64(apicid, start_ip, cpu); in do_boot_cpu()
897 else if (apic->wakeup_secondary_cpu) in do_boot_cpu()
898 ret = apic->wakeup_secondary_cpu(apicid, start_ip, cpu); in do_boot_cpu()
910 u32 apicid = apic->cpu_present_to_apicid(cpu); in native_kick_ap()
915 pr_debug("++++++++++++++++++++=_---CPU UP %u\n", cpu); in native_kick_ap()
919 return -EINVAL; in native_kick_ap()
924 return -EINVAL; in native_kick_ap()
975 * arch_disable_smp_support() - Disables SMP support for x86 at boottime
985 * RED-PEN audit/test this more. I bet there is more state messed up here.
1032 pr_info("Parallel CPU startup disabled by the platform\n"); in arch_cpuhp_init_parallel_bringup()
1037 pr_debug("Parallel CPU startup enabled: 0x%08x\n", smpboot_control); in arch_cpuhp_init_parallel_bringup()
1149 cpu_data(sibling).booted_cores--; in remove_siblinginfo()
1170 c->topo.core_id = 0; in remove_siblinginfo()
1171 c->booted_cores = 0; in remove_siblinginfo()
1189 * Stop allowing kernel-mode FPU. This is needed so that if the CPU is in cpu_disable_common()
1253 md->status = CPUDEAD_MWAIT_WAIT; in mwait_play_dead()
1254 md->control = CPUDEAD_MWAIT_WAIT; in mwait_play_dead()
1263 * The WBINVD is insufficient due to the spurious-wakeup in mwait_play_dead()
1273 if (READ_ONCE(md->control) == CPUDEAD_MWAIT_KEXEC_HLT) { in mwait_play_dead()
1286 WRITE_ONCE(md->status, CPUDEAD_MWAIT_KEXEC_HLT); in mwait_play_dead()
1307 if (READ_ONCE(md->status) != CPUDEAD_MWAIT_WAIT) in smp_kick_mwait_play_dead()
1310 /* Wait up to 5ms */ in smp_kick_mwait_play_dead()
1311 for (i = 0; READ_ONCE(md->status) != newstate && i < 1000; i++) { in smp_kick_mwait_play_dead()
1313 WRITE_ONCE(md->control, newstate); in smp_kick_mwait_play_dead()
1317 if (READ_ONCE(md->status) != newstate) in smp_kick_mwait_play_dead()
1351 return -ENOSYS; in native_cpu_disable()