* [tip:irq/core] ARM: gemini: Fix race in installing GPIO chained IRQ handler
[not found] <E1Z4z07-0002SO-Gv@rmk-PC.arm.linux.org.uk>
@ 2015-06-18 12:07 ` tip-bot for Russell King
0 siblings, 0 replies; only message in thread
From: tip-bot for Russell King @ 2015-06-18 12:07 UTC (permalink / raw)
To: linux-tip-commits
Cc: ulli.kroll, linux-kernel, gnurou, mingo, linus.walleij, jason,
hpa, tglx, thierry.reding, rmk+kernel, lee.jones
Commit-ID: 7f77c5c39d2eb50e7362f29f654a2c221b6a5b83
Gitweb: http://git.kernel.org/tip/7f77c5c39d2eb50e7362f29f654a2c221b6a5b83
Author: Russell King <rmk+kernel@arm.linux.org.uk>
AuthorDate: Tue, 16 Jun 2015 23:06:35 +0100
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 18 Jun 2015 14:03:08 +0200
ARM: gemini: Fix race in installing GPIO chained IRQ handler
The gemini code was installing its chained interrupt handler (which
enables the interrupt) before it was setting its data, which is bad if
the IRQ was previously pending. Avoid this problem by converting it to
irq_set_chained_handler_and_data().
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Alexandre Courbot <gnurou@gmail.com>
Cc: Hans Ulli Kroll <ulli.kroll@googlemail.com>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: http://lkml.kernel.org/r/E1Z4z07-0002SO-Gv@rmk-PC.arm.linux.org.uk
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/arm/mach-gemini/gpio.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-gemini/gpio.c b/arch/arm/mach-gemini/gpio.c
index f8cb571..3292f2e 100644
--- a/arch/arm/mach-gemini/gpio.c
+++ b/arch/arm/mach-gemini/gpio.c
@@ -223,8 +223,8 @@ void __init gemini_gpio_init(void)
set_irq_flags(j, IRQF_VALID);
}
- irq_set_chained_handler(IRQ_GPIO(i), gpio_irq_handler);
- irq_set_handler_data(IRQ_GPIO(i), (void *)i);
+ irq_set_chained_handler_and_data(IRQ_GPIO(i), gpio_irq_handler,
+ (void *)i);
}
BUG_ON(gpiochip_add(&gemini_gpio_chip));
^ permalink raw reply [flat|nested] only message in thread