• Suresh Siddha's avatar
    x86, apic: fix broken legacy interrupts in the logical apic mode · f1c63001
    Suresh Siddha authored
    Recent commit 332afa65 cleaned up
    a workaround that updates irq_cfg domain for legacy irq's that
    are handled by the IO-APIC. This was assuming that the recent
    changes in assign_irq_vector() were sufficient to remove the workaround.
    
    But this broke couple of AMD platforms. One of them seems to be
    sending interrupts to the offline cpu's, resulting in spurious
    "No irq handler for vector xx (irq -1)" messages when those cpu's come online.
    And the other platform seems to always send the interrupt to the last logical
    CPU (cpu-7). Recent changes had an unintended side effect of using only logical
    cpu-0 in the IO-APIC RTE (during boot for the legacy interrupts) and this
    broke the legacy interrupts not getting routed to the cpu-7 on the AMD
    platform, resulting in a boot hang.
    
    For now, reintroduce the removed workaround, (essentially not allowing the
    vector to change for legacy irq's when io-apic starts to handle the irq. Which
    also addressed the uninteded sife effect of just specifying cpu-0 in the
    IO-APIC RTE for those irq's during boot).
    Reported-and-tested-by: default avatarRobert Richter <robert.richter@amd.com>
    Reported-and-tested-by: default avatarBorislav Petkov <bp@amd64.org>
    Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
    Link: http://lkml.kernel.org/r/1344453412.29170.5.camel@sbsiddha-desk.sc.intel.comSigned-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
    f1c63001
io_apic.c 95.6 KB