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>
This commit is contained in:
parent
86f5e73304
commit
7f77c5c39d
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue