From: Krzysztof Kozlowski Date: Fri, 4 Oct 2019 15:07:37 +0000 (+0200) Subject: power: supply: ab8500_fg: Do not free non-requested IRQs in probe's error path X-Git-Tag: v5.15~5060^2~14 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=24108993278d67174a61f9ead38d4d9d1c001a14;p=platform%2Fkernel%2Flinux-starfive.git power: supply: ab8500_fg: Do not free non-requested IRQs in probe's error path When requesting interrupt fails, free only interrupts already requested, not all of them. Signed-off-by: Krzysztof Kozlowski Acked-by: Linus Walleij Signed-off-by: Sebastian Reichel --- diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c index 015f467..8a81728 100644 --- a/drivers/power/supply/ab8500_fg.c +++ b/drivers/power/supply/ab8500_fg.c @@ -3165,7 +3165,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) if (ret != 0) { dev_err(di->dev, "failed to request %s IRQ %d: %d\n", ab8500_fg_irq_th[i].name, irq, ret); - goto free_irq; + goto free_irq_th; } dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", ab8500_fg_irq_th[i].name, irq, ret); @@ -3180,7 +3180,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) if (ret != 0) { dev_err(di->dev, "failed to request %s IRQ %d: %d\n", ab8500_fg_irq_bh[0].name, irq, ret); - goto free_irq; + goto free_irq_th; } dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", ab8500_fg_irq_bh[0].name, irq, ret); @@ -3222,7 +3222,9 @@ free_irq: /* We also have to free all registered irqs */ irq = platform_get_irq_byname(pdev, ab8500_fg_irq_bh[0].name); free_irq(irq, di); - for (i = 0; i < ARRAY_SIZE(ab8500_fg_irq_th); i++) { +free_irq_th: + while (--i >= 0) { + /* Last assignment of i from primary interrupt handlers */ irq = platform_get_irq_byname(pdev, ab8500_fg_irq_th[i].name); free_irq(irq, di); }