• Thomas Gleixner's avatar
    x86/ioapic: Ignore IRQ2 again · a501b048
    Thomas Gleixner authored
    Vitaly ran into an issue with hotplugging CPU0 on an Amazon instance where
    the matrix allocator claimed to be out of vectors. He analyzed it down to
    the point that IRQ2, the PIC cascade interrupt, which is supposed to be not
    ever routed to the IO/APIC ended up having an interrupt vector assigned
    which got moved during unplug of CPU0.
    
    The underlying issue is that IRQ2 for various reasons (see commit
    af174783 ("x86: I/O APIC: Never configure IRQ2" for details) is treated
    as a reserved system vector by the vector core code and is not accounted as
    a regular vector. The Amazon BIOS has an routing entry of pin2 to IRQ2
    which causes the IO/APIC setup to claim that interrupt which is granted by
    the vector domain because there is no sanity check. As a consequence the
    allocation counter of CPU0 underflows which causes a subsequent unplug to
    fail with:
    
      [ ... ] CPU 0 has 4294967295 vectors, 589 available. Cannot disable CPU
    
    There is another sanity check missing in the matrix allocator, but the
    underlying root cause is that the IO/APIC code lost the IRQ2 ignore logic
    during the conversion to irqdomains.
    
    For almost 6 years nobody complained about this wreckage, which might
    indicate that this requirement could be lifted, but for any system which
    actually has a PIC IRQ2 is unusable by design so any routing entry has no
    effect and the interrupt cannot be connected to a device anyway.
    
    Due to that and due to history biased paranoia reasons restore the IRQ2
    ignore logic and treat it as non existent despite a routing entry claiming
    otherwise.
    
    Fixes: d32932d0 ("x86/irq: Convert IOAPIC to use hierarchical irqdomain interfaces")
    Reported-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Tested-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20210318192819.636943062@linutronix.de
    
    a501b048
io_apic.c 80.3 KB