linux/arch/x86/kernel/apic
Cyrill Gorcunov 103428e57b x86, apic: Fix dummy apic read operation together with broken MP handling
Ingo Molnar reported that read_apic is buggy novadays:

[    0.000000] Using APIC driver default
[    0.000000] SMP: Allowing 1 CPUs, 0 hotplug CPUs
[    0.000000] Local APIC disabled by BIOS -- you can enable it with "lapic"
[    0.000000] APIC: disable apic facility
[    0.000000] ------------[ cut here ]------------
[    0.000000] WARNING: at arch/x86/kernel/apic/apic.c:254 native_apic_read_dummy+0x2d/0x3b()
[    0.000000] Hardware name: HP OmniBook PC

Indeed we still rely on apic->read operation for SMP compiled
kernel. And instead of disfigure the SMP code with #ifdef we
allow to call apic->read. To capture any unexpected results
we check for apic->read being called for sane reason via
WARN_ON_ONCE but(!) instead of OR we should use AND logical
operation (thanks Yinghai for spotting the root of the problem).

Along with that we could be have bad MP table and we are
to fix it that way no SMP started and no complains about
BIOS bug if apic was just disabled via command line.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <20090607124840.GD4547@lenovo>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-06-07 16:08:05 +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
apic.c x86, apic: Fix dummy apic read operation together with broken MP handling 2009-06-07 16:08:05 +02:00
bigsmp_32.c cpumask: use new cpumask functions throughout x86 2009-03-13 14:49:54 +10:30
es7000_32.c Merge branch 'linus' into irq/numa 2009-06-01 21:06:21 +02:00
io_apic.c x86: Print real IOAPIC version for x86-64 2009-06-02 02:03:18 +02:00
ipi.c
Makefile x86, apic: separate 32-bit setup functionality out of apic_32.c 2009-02-17 23:12:48 +01:00
nmi.c x86: avoid theoretical spurious NMI backtraces with CONFIG_CPUMASK_OFFSTACK=y 2009-04-21 10:09:50 +02:00
numaq_32.c cpumask: remove x86 cpumask_t uses. 2009-03-13 14:49:57 +10:30
probe_32.c cpumask: remove cpumask_t assignment from vector_allocation_domain() 2009-03-13 14:49:56 +10:30
probe_64.c x86: x2apic, IR: Clean up X86_X2APIC and INTR_REMAP config checks 2009-04-21 09:08:25 +02:00
summit_32.c x86: apic: Remove duplicated macros 2009-04-27 09:13:36 +02:00
x2apic_cluster.c x86: add x2apic_wrmsr_fence() to x2apic flush tlb paths 2009-03-18 09:36:14 +01:00
x2apic_phys.c x86: add x2apic_wrmsr_fence() to x2apic flush tlb paths 2009-03-18 09:36:14 +01:00
x2apic_uv_x.c Merge commit 'v2.6.30-rc5' into x86/apic 2009-05-11 09:50:02 +02:00