Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3893386 authored by Grygorii Strashko's avatar Grygorii Strashko Committed by Linus Walleij
Browse files

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: default avatarWang, Yalin <Yalin.Wang@sonymobile.com>
Signed-off-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent dcdc3018
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -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);
	}
	}