BACKPORT: gpio: Fix potential NULL handler data in chained irqchip handler
There is possibility with misconfigured pins that interrupt occurs instantly
after setting irq_set_chained_handler() in gpiochip_set_chained_irqchip().
Now if handler gets called before irq_set_handler_data() the handler gets
NULL handler data.
Fix this by moving irq_set_handler_data() call before
irq_set_chained_handler() in gpiochip_set_chained_irqchip().
Cc: Stable <stable@vger.kernel.org> # 3.15+
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
(cherry picked from commit 324b039878)
[abrestic: resolved merge conflict as was done upstream]
Signed-off-by: Andrew Bresticker <abrestic@chromium.org>
BUG=chrome-os-partner:30840
TEST=builds
Change-Id: I9adcff381bf164082776aa7aed81f34f24dc4e38
Reviewed-on: https://chromium-review.googlesource.com/238917
Reviewed-by: Olof Johansson <olofj@chromium.org>
Commit-Queue: Andrew Bresticker <abrestic@chromium.org>
Tested-by: Andrew Bresticker <abrestic@chromium.org>
This commit is contained in:
committed by
ChromeOS Commit Bot
parent
fe3a652adf
commit
7664e843e3
@@ -1379,12 +1379,12 @@ void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
|
||||
"chip that may sleep\n");
|
||||
return;
|
||||
}
|
||||
irq_set_chained_handler(parent_irq, parent_handler);
|
||||
/*
|
||||
* The parent irqchip is already using the chip_data for this
|
||||
* irqchip, so our callbacks simply use the handler_data.
|
||||
*/
|
||||
irq_set_handler_data(parent_irq, gpiochip);
|
||||
irq_set_chained_handler(parent_irq, parent_handler);
|
||||
}
|
||||
|
||||
/* Set the parent IRQ for all affected IRQs */
|
||||
|
||||
Reference in New Issue
Block a user