x86, apic: Fix dummy apic read operation together with broken MP handling
commit103428e57be323c3c5545db8ad12667099bc6005
authorCyrill Gorcunov <gorcunov@openvz.org>
Sun, 7 Jun 2009 12:48:40 +0000 (7 16:48 +0400)
committerIngo Molnar <mingo@elte.hu>
Sun, 7 Jun 2009 14:08:05 +0000 (7 16:08 +0200)
tree8f8275235b7ef7ff13bf3a2a7c9e13035ec61052
parent3d58829b0510244596079c1d2f1762c53aef2e97
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>
arch/x86/kernel/apic/apic.c
arch/x86/kernel/smpboot.c