linux-stable/arch/x86/kernel/apic
Yinghai Lu 295594e9cf x86: Fix vSMP boot crash
2.6.31-rc7 does not boot on vSMP systems:

[    8.501108] CPU31: Thermal monitoring enabled (TM1)
[    8.501127] CPU 31 MCA banks SHD:2 SHD:3 SHD:5 SHD:6 SHD:8
[    8.650254] CPU31: Intel(R) Xeon(R) CPU           E5540  @ 2.53GHz stepping 04
[    8.710324] Brought up 32 CPUs
[    8.713916] Total of 32 processors activated (162314.96 BogoMIPS).
[    8.721489] ERROR: parent span is not a superset of domain->span
[    8.727686] ERROR: domain->groups does not contain CPU0
[    8.733091] ERROR: groups don't span domain->span
[    8.737975] ERROR: domain->cpu_power not set
[    8.742416]

Ravikiran Thirumalai bisected it to:

| commit 2759c3287d
| x86: don't call read_apic_id if !cpu_has_apic

The problem is that on vSMP systems the CPUID derived
initial-APICIDs are overlapping - so we need to fall
back on hard_smp_processor_id() which reads the local
APIC.

Both come from the hardware (influenced by firmware
though) so it's a tough call which one to trust.

Doing the quirk expresses the vSMP property properly
and also does not affect other systems, so we go for
this solution instead of a revert.

Reported-and-Tested-by: Ravikiran Thirumalai <kiran@scalex86.org>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Shai Fultheim <shai@scalex86.org>
Cc: Suresh Siddha <suresh.b.siddha@intel.com>
LKML-Reference: <4A944D3C.5030100@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-08-26 10:13:17 +02:00
..
apic.c x86: Remove unused variable disable_x2apic 2009-07-03 14:34:27 +02:00
apic_flat_64.c x86: don't call read_apic_id if !cpu_has_apic 2009-05-18 08:43:25 +02:00
bigsmp_32.c cpumask: use new cpumask functions throughout x86 2009-03-13 14:49:54 +10:30
es7000_32.c x86: Fix false positive section mismatch in es7000_32.c 2009-07-13 11:03:26 +02:00
io_apic.c x86, UV: Complete IRQ interrupt migration in arch_enable_uv_irq() 2009-08-04 16:32:52 +02:00
ipi.c x86: don't send an IPI to the empty set of CPU's 2009-08-21 09:23:57 -07:00
Makefile x86, apic: separate 32-bit setup functionality out of apic_32.c 2009-02-17 23:12:48 +01:00
nmi.c Merge branch 'linus' into x86/mce3 2009-06-11 23:31:52 +02:00
numaq_32.c x86, apic: Fix false positive section mismatch in numaq_32.c 2009-07-13 11:03:27 +02:00
probe_32.c x86: Remove duplicated #include's 2009-06-17 19:02:35 +02:00
probe_64.c x86: Fix vSMP boot crash 2009-08-26 10:13:17 +02:00
summit_32.c x86: Remove duplicated #include's 2009-06-17 19:02:35 +02:00
x2apic_cluster.c x86: Fix MSI-X initialization by using online_mask for x2apic target_cpus 2009-08-08 17:04:58 +02:00
x2apic_phys.c x86: Fix MSI-X initialization by using online_mask for x2apic target_cpus 2009-08-08 17:04:58 +02:00
x2apic_uv_x.c x86: Annotate section mismatch warnings in kernel/apic/x2apic_uv_x.c 2009-08-16 19:44:13 +02:00