genirq: Correctly configure the trigger on chained interrupts
authorMarc Zyngier <marc.zyngier@arm.com>
Thu, 11 Aug 2016 13:19:42 +0000 (14:19 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Wed, 17 Aug 2016 10:29:31 +0000 (11:29 +0100)
commit1e12c4a9393b75a744aada2c8115434572698bc3
tree2d6abb7fddb32edf0c4ec87b9a1cd97c876b7183
parent694d0d0bb2030d2e36df73e2d23d5770511dbc8d
genirq: Correctly configure the trigger on chained interrupts

Commit 1e2a7d78499e ("irqdomain: Don't set type when mapping an IRQ")
moved the trigger configuration call from the irqdomain mapping to
the interrupt being actually requested.

This patch failed to handle the case where we configure a chained
interrupt, which doesn't get requested through the usual path.

In order to solve this, let's call __irq_set_trigger just before
starting the cascade interrupt. Special care must be taken to
make the flow handler stick, as the .irq_set_type method could
have reset it (it doesn't know we're dealing with a chained
interrupt).

Based on an initial patch by Jon Hunter.

Fixes: 1e2a7d78499e ("irqdomain: Don't set type when mapping an IRQ")
Reported-by: John Stultz <john.stultz@linaro.org>
Reported-by: Linus Walleij <linus.walleij@linaro.org>
Tested-by: John Stultz <john.stultz@linaro.org>
Acked-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
kernel/irq/chip.c