• Sean V Kelley's avatar
    PCI: Add boot interrupt quirk mechanism for Xeon chipsets · b88bf6c3
    Sean V Kelley authored
    The following was observed by Kar Hin Ong with RT patchset:
    
      Backtrace:
      irq 19: nobody cared (try booting with the "irqpoll" option)
      CPU: 0 PID: 3329 Comm: irq/34-nipalk Tainted:4.14.87-rt49 #1
      Hardware name: National Instruments NI PXIe-8880/NI PXIe-8880,
               BIOS 2.1.5f1 01/09/2020
      Call Trace:
      <IRQ>
        ? dump_stack+0x46/0x5e
        ? __report_bad_irq+0x2e/0xb0
        ? note_interrupt+0x242/0x290
        ? nNIKAL100_memoryRead16+0x8/0x10 [nikal]
        ? handle_irq_event_percpu+0x55/0x70
        ? handle_irq_event+0x4f/0x80
        ? handle_fasteoi_irq+0x81/0x180
        ? handle_irq+0x1c/0x30
        ? do_IRQ+0x41/0xd0
        ? common_interrupt+0x84/0x84
      </IRQ>
      ...
      handlers:
      [<ffffffffb3297200>] irq_default_primary_handler threaded
      [<ffffffffb3669180>] usb_hcd_irq
      Disabling IRQ #19
    
    The problem being that this device is triggering boot interrupts
    due to threaded interrupt handling and masking of the IO-APIC. These
    boot interrupts are then forwarded on to the legacy PCH's PIRQ lines
    where there is no handler present for the device.
    
    Whenever a PCI device fires interrupt (INTx) to Pin 20 of IOAPIC 2
    (GSI 44), the kernel receives two interrupts:
    
       1. Interrupt from Pin 20 of IOAPIC 2  -> Expected
       2. Interrupt from Pin 19 of IOAPIC 1  -> UNEXPECTED
    
    Quirks for disabling boot interrupts (preferred) or rerouting the
    handler exist but do not address these Xeon chipsets' mechanism:
    https://lore.kernel.org/lkml/12131949181903-git-send-email-sassmann@suse.de/
    
    Add a new mechanism via PCI CFG for those chipsets supporting CIPINTRC
    register's dis_intx_rout2ich bit.
    
    Link: https://lore.kernel.org/r/20200220192930.64820-2-sean.v.kelley@linux.intel.comReported-by: default avatarKar Hin Ong <kar.hin.ong@ni.com>
    Tested-by: default avatarKar Hin Ong <kar.hin.ong@ni.com>
    Signed-off-by: default avatarSean V Kelley <sean.v.kelley@linux.intel.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    b88bf6c3
quirks.c 195 KB