Re: [PATCH 2/2] mfd: arizona: Correctly clean up after IRQs

From: Charles Keepax
Date: Fri Nov 11 2016 - 08:50:10 EST


On Fri, Oct 28, 2016 at 11:32:54AM +0100, Charles Keepax wrote:
> Currently we leak a lot of things when tearing down the IRQs this patch
> fixes this cleaning up both the IRQ mappings and the IRQ domain itself.
>
> Signed-off-by: Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
> ---
> drivers/mfd/arizona-irq.c | 54 +++++++++++++++++++++++++++++++++++------------
> 1 file changed, 40 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
> index 2e01975..fecf367 100644
> --- a/drivers/mfd/arizona-irq.c
> +++ b/drivers/mfd/arizona-irq.c
> @@ -207,6 +207,7 @@ int arizona_irq_init(struct arizona *arizona)
> int ret, i;
> const struct regmap_irq_chip *aod, *irq;
> struct irq_data *irq_data;
> + unsigned int virq;
>
> arizona->ctrlif_error = true;
>
> @@ -318,24 +319,34 @@ int arizona_irq_init(struct arizona *arizona)
> }
>
> if (aod) {
> - ret = regmap_add_irq_chip(arizona->regmap,
> - irq_create_mapping(arizona->virq, 0),
> - IRQF_ONESHOT, 0, aod,
> - &arizona->aod_irq_chip);
> + virq = irq_create_mapping(arizona->virq, 0);
> + if (!virq) {
> + dev_err(arizona->dev,
> + "Failed to map AOD IRQs: %d\n", ret);
> + goto err_domain;

One minor issue here we should be setting ret, as this one hasn't
been applied yet I will send a new spin shortly.

> + }
> +
> + ret = regmap_add_irq_chip(arizona->regmap, virq, IRQF_ONESHOT,
> + 0, aod, &arizona->aod_irq_chip);
> if (ret != 0) {
> dev_err(arizona->dev,
> "Failed to add AOD IRQs: %d\n", ret);
> - goto err;
> + goto err_map_aod;
> }
> }
>
> - ret = regmap_add_irq_chip(arizona->regmap,
> - irq_create_mapping(arizona->virq, 1),
> - IRQF_ONESHOT, 0, irq,
> - &arizona->irq_chip);
> + virq = irq_create_mapping(arizona->virq, 1);
> + if (!virq) {
> + dev_err(arizona->dev,
> + "Failed to map main IRQs: %d\n", ret);
> + goto err_aod;

ditto.

Thanks,
Charles