summaryrefslogtreecommitdiffstats
path: root/block
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2019-06-28 13:11:51 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-07-21 09:03:13 +0200
commit6074f6043c49fceb1b22227c2db315fe0d5a331f (patch)
treef98ce76045b7bbde12306c87258026692fca38c3 /block
parent3f10ccc29780b5ca8b1638941a47018f694ecbc7 (diff)
downloadlinux-stable-6074f6043c49fceb1b22227c2db315fe0d5a331f.tar.gz
linux-stable-6074f6043c49fceb1b22227c2db315fe0d5a331f.tar.bz2
linux-stable-6074f6043c49fceb1b22227c2db315fe0d5a331f.zip
genirq: Add optional hardware synchronization for shutdown
commit 62e0468650c30f0298822c580f382b16328119f6 upstream free_irq() ensures that no hardware interrupt handler is executing on a different CPU before actually releasing resources and deactivating the interrupt completely in a domain hierarchy. But that does not catch the case where the interrupt is on flight at the hardware level but not yet serviced by the target CPU. That creates an interesing race condition: CPU 0 CPU 1 IRQ CHIP interrupt is raised sent to CPU1 Unable to handle immediately (interrupts off, deep idle delay) mask() ... free() shutdown() synchronize_irq() release_resources() do_IRQ() -> resources are not available That might be harmless and just trigger a spurious interrupt warning, but some interrupt chips might get into a wedged state. Utilize the existing irq_get_irqchip_state() callback for the synchronization in free_irq(). synchronize_hardirq() is not using this mechanism as it might actually deadlock unter certain conditions, e.g. when called with interrupts disabled and the target CPU is the one on which the synchronization is invoked. synchronize_irq() uses it because that function cannot be called from non preemtible contexts as it might sleep. No functional change intended and according to Marc the existing GIC implementations where the driver supports the callback should be able to cope with that core change. Famous last words. Fixes: 464d12309e1b ("x86/vector: Switch IOAPIC to global reservation mode") Reported-by: Robert Hodaszi <Robert.Hodaszi@digi.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Marc Zyngier <marc.zyngier@arm.com> Tested-by: Marc Zyngier <marc.zyngier@arm.com> Link: https://lkml.kernel.org/r/20190628111440.279463375@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'block')
0 files changed, 0 insertions, 0 deletions