Lines Matching +full:ecx +full:- +full:2000
1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * (c) 1998, 1999, 2000, 2009 Ingo Molnar <mingo@redhat.com>
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
84 #include <asm/intel-family.h>
86 #include <asm/spec-ctrl.h>
90 #include <asm/spec-ctrl.h>
185 if (!--smpboot_warm_reset_vector_count) { in smpboot_restore_warm_reset_vector()
263 * 32-bit specific. 64-bit reaches this code with the correct page in start_secondary()
294 * synchronization state to ALIVE and spin-waits for the control CPU to in start_secondary()
340 * topology_phys_to_logical_pkg - Map a physical package id to a logical
343 * Returns logical package id or -1 if not found
353 return -1; in topology_phys_to_logical_pkg()
358 * topology_phys_to_logical_die - Map a physical die id to logical
362 * Returns logical die id or -1 if not found
373 return -1; in topology_phys_to_logical_die()
377 * topology_update_package_map - Update the physical to logical package map
402 * topology_update_die_map - Update the physical to logical die map
433 c->cpu_index = id; in smp_store_boot_cpu_info()
434 topology_update_package_map(c->topo.pkg_id, id); in smp_store_boot_cpu_info()
435 topology_update_die_map(c->topo.die_id, id); in smp_store_boot_cpu_info()
436 c->initialized = true; in smp_store_boot_cpu_info()
448 if (!c->initialized) in smp_store_cpu_info()
450 c->cpu_index = id; in smp_store_cpu_info()
456 c->initialized = true; in smp_store_cpu_info()
462 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in topology_same_node()
470 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in topology_sane()
473 "sched: CPU #%d's %s-sibling CPU #%d is not on the same node! " in topology_sane()
487 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in match_smt()
489 if (c->topo.pkg_id == o->topo.pkg_id && in match_smt()
490 c->topo.die_id == o->topo.die_id && in match_smt()
492 if (c->topo.core_id == o->topo.core_id) in match_smt()
495 if ((c->topo.cu_id != 0xff) && in match_smt()
496 (o->topo.cu_id != 0xff) && in match_smt()
497 (c->topo.cu_id == o->topo.cu_id)) in match_smt()
501 } else if (c->topo.pkg_id == o->topo.pkg_id && in match_smt()
502 c->topo.die_id == o->topo.die_id && in match_smt()
503 c->topo.core_id == o->topo.core_id) { in match_smt()
512 if (c->topo.pkg_id == o->topo.pkg_id && in match_die()
513 c->topo.die_id == o->topo.die_id) in match_die()
520 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in match_l2c()
540 if (c->topo.pkg_id == o->topo.pkg_id) in match_pkg()
546 * Define intel_cod_cpu[] for Intel COD (Cluster-on-Die) CPUs.
549 * match intel_cod_cpu[] has the SNC (Sub-NUMA Cluster) topology.
552 * by multiple NUMA nodes. The LLC is shared for off-package data
554 * on-package access. CPUID (the source of the information about
569 int cpu1 = c->cpu_index, cpu2 = o->cpu_index; in match_llc()
570 bool intel_snc = id && id->driver_data; in match_llc()
626 * AMD Magny-Cours, Intel Cluster-on-Die, and Intel
627 * Sub-NUMA Clustering have this.
654 * since the NUMA domains will auto-magically create the right spanning in build_sched_topology()
666 BUG_ON(i >= ARRAY_SIZE(x86_topology)-1); in build_sched_topology()
687 c->booted_cores = 1; in set_cpu_sibling_map()
719 * topology_sibling_cpumask links to be set-up. in set_cpu_sibling_map()
737 c->booted_cores++; in set_cpu_sibling_map()
744 } else if (i != cpu && !c->booted_cores) in set_cpu_sibling_map()
745 c->booted_cores = cpu_data(i).booted_cores; in set_cpu_sibling_map()
750 /* maps the cpu to the sched domain representing multi-core */
778 pr_debug("Before bogocount - setting activated=1\n"); in impress_friends()
784 * and de-asserting INIT, when starting a remote processor.
788 * Cmdline "init_cpu_udelay=" is available to over-ride this delay.
949 if (current_node > (-1)) in announce_cpu()
954 node_width - num_digits(node), " ", node); in announce_cpu()
962 pr_cont("%*s#%d", width - num_digits(cpu), " ", cpu); in announce_cpu()
991 * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
994 * ->wakeup_secondary_cpu.
998 unsigned long start_ip = real_mode_header->trampoline_start; in do_boot_cpu()
1002 /* If 64-bit wakeup method exists, use the 64-bit mode trampoline IP */ in do_boot_cpu()
1003 if (apic->wakeup_secondary_cpu_64) in do_boot_cpu()
1004 start_ip = real_mode_header->trampoline_start64; in do_boot_cpu()
1006 idle->thread.sp = (unsigned long)task_pt_regs(idle); in do_boot_cpu()
1011 initial_stack = idle->thread.sp; in do_boot_cpu()
1044 * - Use a method from the APIC driver if one defined, with wakeup in do_boot_cpu()
1045 * straight to 64-bit mode preferred over wakeup to RM. in do_boot_cpu()
1047 * - Use an INIT boot APIC message in do_boot_cpu()
1049 if (apic->wakeup_secondary_cpu_64) in do_boot_cpu()
1050 ret = apic->wakeup_secondary_cpu_64(apicid, start_ip); in do_boot_cpu()
1051 else if (apic->wakeup_secondary_cpu) in do_boot_cpu()
1052 ret = apic->wakeup_secondary_cpu(apicid, start_ip); in do_boot_cpu()
1064 u32 apicid = apic->cpu_present_to_apicid(cpu); in native_kick_ap()
1069 pr_debug("++++++++++++++++++++=_---CPU UP %u\n", cpu); in native_kick_ap()
1074 return -EINVAL; in native_kick_ap()
1125 * arch_disable_smp_support() - Disables SMP support for x86 at boottime
1135 * RED-PEN audit/test this more. I bet there is more state messed up here.
1163 c->cpu_index = nr_cpu_ids; in smp_cpu_index_default()
1292 static int __initdata setup_possible_cpus = -1;
1303 * are onlined, or offlined. The reason is per-cpu data-structures
1309 * - Ashok Raj
1312 * - If the BIOS specified disabled CPUs in ACPI/mptables use that.
1313 * - The user can overwrite it with possible_cpus=NUM
1314 * - Otherwise don't reserve additional CPUs.
1316 * -AK
1323 if (setup_possible_cpus == -1) { in prefill_possible_map()
1356 possible, max_t(int, possible - num_processors, 0)); in prefill_possible_map()
1398 cpu_data(sibling).booted_cores--; in remove_siblinginfo()
1419 c->topo.core_id = 0; in remove_siblinginfo()
1420 c->booted_cores = 0; in remove_siblinginfo()
1494 unsigned int eax, ebx, ecx, edx; in mwait_play_dead() local
1510 ecx = 0; in mwait_play_dead()
1511 native_cpuid(&eax, &ebx, &ecx, &edx); in mwait_play_dead()
1517 if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED)) { in mwait_play_dead()
1528 (highest_subcstate - 1); in mwait_play_dead()
1532 md->status = CPUDEAD_MWAIT_WAIT; in mwait_play_dead()
1533 md->control = CPUDEAD_MWAIT_WAIT; in mwait_play_dead()
1542 * The WBINVD is insufficient due to the spurious-wakeup in mwait_play_dead()
1552 if (READ_ONCE(md->control) == CPUDEAD_MWAIT_KEXEC_HLT) { in mwait_play_dead()
1565 WRITE_ONCE(md->status, CPUDEAD_MWAIT_KEXEC_HLT); in mwait_play_dead()
1586 if (READ_ONCE(md->status) != CPUDEAD_MWAIT_WAIT) in smp_kick_mwait_play_dead()
1590 for (i = 0; READ_ONCE(md->status) != newstate && i < 1000; i++) { in smp_kick_mwait_play_dead()
1592 WRITE_ONCE(md->control, newstate); in smp_kick_mwait_play_dead()
1596 if (READ_ONCE(md->status) != newstate) in smp_kick_mwait_play_dead()
1630 return -ENOSYS; in native_cpu_disable()