Message ID | 20220607033328.1846-1-gaochao49@huawei.com |
---|---|
State | Superseded |
Headers | show |
Series | [-next] power: supply: ab8500_fg: add missing destroy_workqueue in ab8500_fg_probe | expand |
On Tue, Jun 7, 2022 at 5:34 AM gaochao <gaochao49@huawei.com> wrote: > From: Gao Chao <gaochao49@huawei.com> > > In ab8500_fg_probe, misses destroy_workqueue in error path, > this patch fixes that. > > Fixes: 010ddb813f35 ("power: supply: ab8500_fg: Allocate wq in probe") > Signed-off-by: Gao Chao <gaochao49@huawei.com> Oh good catch! Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij
Hi, On Wed, Jun 08, 2022 at 10:42:49AM +0800, gaochao wrote: > From: Gao Chao <gaochao49@huawei.com> > > In ab8500_fg_probe, misses destroy_workqueue in error path, > this patch fixes that. > > Fixes: 010ddb813f35 ("power: supply: ab8500_fg: Allocate wq in probe") > Signed-off-by: Gao Chao <gaochao49@huawei.com> > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > > v1->v2: add Reviewed-by Linus Walleij > --- Thanks, queued to power-supply's fixes branch. Next time please put the v1->v2 changelog below the --- line when sending the patch. -- Sebastian > drivers/power/supply/ab8500_fg.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c > index ec8a404d71b4..4339fa9ff009 100644 > --- a/drivers/power/supply/ab8500_fg.c > +++ b/drivers/power/supply/ab8500_fg.c > @@ -3148,6 +3148,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) > ret = ab8500_fg_init_hw_registers(di); > if (ret) { > dev_err(dev, "failed to initialize registers\n"); > + destroy_workqueue(di->fg_wq); > return ret; > } > > @@ -3159,6 +3160,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) > di->fg_psy = devm_power_supply_register(dev, &ab8500_fg_desc, &psy_cfg); > if (IS_ERR(di->fg_psy)) { > dev_err(dev, "failed to register FG psy\n"); > + destroy_workqueue(di->fg_wq); > return PTR_ERR(di->fg_psy); > } > > @@ -3174,8 +3176,10 @@ static int ab8500_fg_probe(struct platform_device *pdev) > /* Register primary interrupt handlers */ > for (i = 0; i < ARRAY_SIZE(ab8500_fg_irq); i++) { > irq = platform_get_irq_byname(pdev, ab8500_fg_irq[i].name); > - if (irq < 0) > + if (irq < 0) { > + destroy_workqueue(di->fg_wq); > return irq; > + } > > ret = devm_request_threaded_irq(dev, irq, NULL, > ab8500_fg_irq[i].isr, > @@ -3185,6 +3189,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) > if (ret != 0) { > dev_err(dev, "failed to request %s IRQ %d: %d\n", > ab8500_fg_irq[i].name, irq, ret); > + destroy_workqueue(di->fg_wq); > return ret; > } > dev_dbg(dev, "Requested %s IRQ %d: %d\n", > @@ -3200,6 +3205,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) > ret = ab8500_fg_sysfs_init(di); > if (ret) { > dev_err(dev, "failed to create sysfs entry\n"); > + destroy_workqueue(di->fg_wq); > return ret; > } > > @@ -3207,6 +3213,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) > if (ret) { > dev_err(dev, "failed to create FG psy\n"); > ab8500_fg_sysfs_exit(di); > + destroy_workqueue(di->fg_wq); > return ret; > } > > -- > 2.17.1 >
diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c index ec8a404d71b4..4339fa9ff009 100644 --- a/drivers/power/supply/ab8500_fg.c +++ b/drivers/power/supply/ab8500_fg.c @@ -3148,6 +3148,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) ret = ab8500_fg_init_hw_registers(di); if (ret) { dev_err(dev, "failed to initialize registers\n"); + destroy_workqueue(di->fg_wq); return ret; } @@ -3159,6 +3160,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) di->fg_psy = devm_power_supply_register(dev, &ab8500_fg_desc, &psy_cfg); if (IS_ERR(di->fg_psy)) { dev_err(dev, "failed to register FG psy\n"); + destroy_workqueue(di->fg_wq); return PTR_ERR(di->fg_psy); } @@ -3174,8 +3176,10 @@ static int ab8500_fg_probe(struct platform_device *pdev) /* Register primary interrupt handlers */ for (i = 0; i < ARRAY_SIZE(ab8500_fg_irq); i++) { irq = platform_get_irq_byname(pdev, ab8500_fg_irq[i].name); - if (irq < 0) + if (irq < 0) { + destroy_workqueue(di->fg_wq); return irq; + } ret = devm_request_threaded_irq(dev, irq, NULL, ab8500_fg_irq[i].isr, @@ -3185,6 +3189,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) if (ret != 0) { dev_err(dev, "failed to request %s IRQ %d: %d\n", ab8500_fg_irq[i].name, irq, ret); + destroy_workqueue(di->fg_wq); return ret; } dev_dbg(dev, "Requested %s IRQ %d: %d\n", @@ -3200,6 +3205,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) ret = ab8500_fg_sysfs_init(di); if (ret) { dev_err(dev, "failed to create sysfs entry\n"); + destroy_workqueue(di->fg_wq); return ret; } @@ -3207,6 +3213,7 @@ static int ab8500_fg_probe(struct platform_device *pdev) if (ret) { dev_err(dev, "failed to create FG psy\n"); ab8500_fg_sysfs_exit(di); + destroy_workqueue(di->fg_wq); return ret; }