• Cyrill Gorcunov's avatar
    x86, apic: Fix dummy apic read operation together with broken MP handling · 103428e5
    Cyrill Gorcunov authored
    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: default avatarCyrill Gorcunov <gorcunov@openvz.org>
    Cc: Yinghai Lu <yinghai@kernel.org>
    LKML-Reference: <20090607124840.GD4547@lenovo>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    103428e5
smpboot.c 32.6 KB