On Wed, Jul 19, 2023 at 2:41 PM Bartosz Golaszewski <brgl@xxxxxxxx> wrote: > > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > Uwe Kleine-König pointed out we still have one resource leak in the mvebu > driver triggered on driver detach. Let's address it with a custom devm > action. One nit-pick below, in either case Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Fixes: 812d47889a8e ("gpio/mvebu: Use irq_domain_add_linear") > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > --- > drivers/gpio/gpio-mvebu.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c > index a35958e7adf6..67497116ce27 100644 > --- a/drivers/gpio/gpio-mvebu.c > +++ b/drivers/gpio/gpio-mvebu.c > @@ -1112,6 +1112,13 @@ static int mvebu_gpio_probe_syscon(struct platform_device *pdev, > return 0; > } > > +static void mvebu_gpio_remove_irq_domain(void *data) > +{ > + struct irq_domain *domain = data; > + > + irq_domain_remove(domain); The from/to void * doesn't need an explicit casting in C. This can be a one liner static void mvebu_gpio_remove_irq_domain(void *domain) { irq_domain_remove(domain); } > +} > + > static int mvebu_gpio_probe(struct platform_device *pdev) > { > struct mvebu_gpio_chip *mvchip; > @@ -1246,13 +1253,18 @@ static int mvebu_gpio_probe(struct platform_device *pdev) > return -ENODEV; > } > > + err = devm_add_action_or_reset(&pdev->dev, mvebu_gpio_remove_irq_domain, > + mvchip->domain); > + if (err) > + return err; > + > err = irq_alloc_domain_generic_chips( > mvchip->domain, ngpios, 2, np->name, handle_level_irq, > IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_LEVEL, 0, 0); > if (err) { > dev_err(&pdev->dev, "couldn't allocate irq chips %s (DT).\n", > mvchip->chip.label); > - goto err_domain; > + return err; > } > > /* > @@ -1292,10 +1304,6 @@ static int mvebu_gpio_probe(struct platform_device *pdev) > } > > return 0; > - > -err_domain: > - irq_domain_remove(mvchip->domain); > - return err; > } -- With Best Regards, Andy Shevchenko