• Koichiro Den's avatar
    x86/apic/msi: Fix misconfigured non-maskable MSI quirk · b56ebe7c
    Koichiro Den authored
    commit ef8dd015 ("genirq/msi: Make interrupt allocation less
    convoluted"), reworked the code so that the x86 specific quirk for affinity
    setting of non-maskable PCI/MSI interrupts is not longer activated if
    necessary.
    
    This could be solved by restoring the original logic in the core MSI code,
    but after a deeper analysis it turned out that the quirk flag is not
    required at all.
    
    The quirk is only required when the PCI/MSI device cannot mask the MSI
    interrupts, which in turn also prevents reservation mode from being enabled
    for the affected interrupt.
    
    This allows ot remove the NOMASK quirk bit completely as msi_set_affinity()
    can instead check whether reservation mode is enabled for the interrupt,
    which gives exactly the same answer.
    
    Even in the momentary non-existing case that the reservation mode would be
    not set for a maskable MSI interrupt this would not cause any harm as it
    just would cause msi_set_affinity() to go needlessly through the
    functionaly equivalent slow path, which works perfectly fine with maskable
    interrupts as well.
    
    Rework msi_set_affinity() to query the reservation mode and remove all
    NOMASK quirk logic from the core code.
    
    [ tglx: Massaged changelog ]
    
    Fixes: ef8dd015 ("genirq/msi: Make interrupt allocation less convoluted")
    Suggested-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarKoichiro Den <den@valinux.co.jp>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20231026032036.2462428-1-den@valinux.co.jp
    b56ebe7c
msi.c 45.6 KB