Bläddra i källkod

gpiolib: irqchip: use irq_find_mapping while removing irqchip

There is no guarantee that VIRQs will be allocated sequentially
for gpio irqchip in gpiochip_irqchip_add().
Therefore, it's unsafe to dispose VIRQ in gpiochip_irqchip_remove()
basing on index relatively to stored irq_base value.

Hence, use irq_find_mapping for VIRQ finding  in gpiochip_irqchip_remove()
instead of irq_base + index.

Reported-by: Wang, Yalin <Yalin.Wang@sonymobile.com>
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Grygorii Strashko 11 år sedan
förälder
incheckning
e3893386b9
1 ändrade filer med 2 tillägg och 1 borttagningar
  1. 2 1
      drivers/gpio/gpiolib.c

+ 2 - 1
drivers/gpio/gpiolib.c

@@ -514,7 +514,8 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
 	/* Remove all IRQ mappings and delete the domain */
 	/* Remove all IRQ mappings and delete the domain */
 	if (gpiochip->irqdomain) {
 	if (gpiochip->irqdomain) {
 		for (offset = 0; offset < gpiochip->ngpio; offset++)
 		for (offset = 0; offset < gpiochip->ngpio; offset++)
-			irq_dispose_mapping(gpiochip->irq_base + offset);
+			irq_dispose_mapping(
+				irq_find_mapping(gpiochip->irqdomain, offset));
 		irq_domain_remove(gpiochip->irqdomain);
 		irq_domain_remove(gpiochip->irqdomain);
 	}
 	}