diff options
author | Russell King <[email protected]> | 2015-06-16 23:06:35 +0100 |
---|---|---|
committer | Thomas Gleixner <[email protected]> | 2015-06-18 14:03:08 +0200 |
commit | 7f77c5c39d2eb50e7362f29f654a2c221b6a5b83 (patch) | |
tree | f44fe73417f42f50820df588638e38a208963ab3 | |
parent | 86f5e73304651c3eeec0a1fce90bb3e1d610e3b9 (diff) |
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 <[email protected]>
Cc: Alexandre Courbot <[email protected]>
Cc: Hans Ulli Kroll <[email protected]>
Cc: Jason Cooper <[email protected]>
Cc: Lee Jones <[email protected]>
Cc: Linus Walleij <[email protected]>
Cc: Thierry Reding <[email protected]>
Cc: [email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Thomas Gleixner <[email protected]>
-rw-r--r-- | arch/arm/mach-gemini/gpio.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/mach-gemini/gpio.c b/arch/arm/mach-gemini/gpio.c index f8cb5710d6ee..3292f2e6ed6f 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)); |