]> git.baikalelectronics.ru Git - kernel.git/commit
irqchip/jcore: Fix lost per-cpu interrupts
authorRich Felker <dalias@libc.org>
Thu, 13 Oct 2016 20:35:30 +0000 (20:35 +0000)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 14 Oct 2016 12:26:55 +0000 (14:26 +0200)
commit76b8567afa0d7c37620131dcd9f90fcff680efb3
treeac8affaffb679f365017200e2f9b2fac1487e0ef
parentfb57bee31609c1c460ee393a5afd26e5996005f4
irqchip/jcore: Fix lost per-cpu interrupts

The J-Core AIC does not have separate interrupt numbers reserved for
cpu-local vs global interrupts. Instead, the driver requesting the irq
is expected to know whether its device uses per-cpu interrupts or not.
Previously it was assumed that handle_simple_irq could work for both
cases, but it intentionally drops interrupts for an irq number that
already has a handler running. This resulted in the timer interrupt
for one cpu being lost when multiple cpus' timers were set for
approximately the same expiration time, leading to stalls. In theory
the same could also happen with IPIs.

To solve the problem, instead of registering handle_simple_irq as the
handler, register a wrapper function which checks whether the irq to
be handled was requested as per-cpu or not, and passes it to
handle_simple_irq or handle_percpu_irq accordingly.

Fixes: 425a8333d08d ("irqchip/jcore-aic: Add J-Core AIC driver")
Signed-off-by: Rich Felker <dalias@libc.org>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: linux-sh@vger.kernel.org
Link: http://lkml.kernel.org/r/f18cec30bc17e3f52e478dd9f6714bfab02f227f.1476390724.git.dalias@libc.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
drivers/irqchip/irq-jcore-aic.c