• Prarit Bhargava's avatar
    x86/irq: Fix do_IRQ() interrupt warning for cpu hotplug retriggered irqs · 9345005f
    Prarit Bhargava authored
    During heavy CPU-hotplug operations the following spurious kernel warnings
    can trigger:
    
      do_IRQ: No ... irq handler for vector (irq -1)
    
      [ See: https://bugzilla.kernel.org/show_bug.cgi?id=64831 ]
    
    When downing a cpu it is possible that there are unhandled irqs
    left in the APIC IRR register.  The following code path shows
    how the problem can occur:
    
     1. CPU 5 is to go down.
    
     2. cpu_disable() on CPU 5 executes with interrupt flag cleared
        by local_irq_save() via stop_machine().
    
     3. IRQ 12 asserts on CPU 5, setting IRR but not ISR because
        interrupt flag is cleared (CPU unabled to handle the irq)
    
     4. IRQs are migrated off of CPU 5, and the vectors' irqs are set
        to -1. 5. stop_machine() finishes cpu_disable()
    
     6. cpu_die() for CPU 5 executes in normal context.
    
     7. CPU 5 attempts to handle IRQ 12 because the IRR is set for
        IRQ 12.  The code attempts to find the vector's IRQ and cannot
        because it has been set to -1. 8. do_IRQ() warning displays
        warning about CPU 5 IRQ 12.
    
    I added a debug printk to output which CPU & vector was
    retriggered and discovered that that we are getting bogus
    events.  I see a 100% correlation between this debug printk in
    fixup_irqs() and the do_IRQ() warning.
    
    This patchset resolves this by adding definitions for
    VECTOR_UNDEFINED(-1) and VECTOR_RETRIGGERED(-2) and modifying
    the code to use them.
    
    Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=64831Signed-off-by: default avatarPrarit Bhargava <prarit@redhat.com>
    Reviewed-by: default avatarRui Wang <rui.y.wang@intel.com>
    Cc: Michel Lespinasse <walken@google.com>
    Cc: Seiji Aguchi <seiji.aguchi@hds.com>
    Cc: Yang Zhang <yang.z.zhang@Intel.com>
    Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
    Cc: janet.morgan@Intel.com
    Cc: tony.luck@Intel.com
    Cc: ruiv.wang@gmail.com
    Link: http://lkml.kernel.org/r/1388938252-16627-1-git-send-email-prarit@redhat.com
    [ Cleaned up the code a bit. ]
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    9345005f
hw_irq.h 6.75 KB