Subject: Re: [PATCH v1] irqchip/atmel-aic5: Free SMR cache on init failure

From: Nicolas Ferre <[email-masked]>
Date: Fri, 15 May 2026 11:58:13 +0200

On 14/05/2026 at 01:31, Yuho Choi wrote:
> sama5d2_aic5_of_init() allocates the SMR cache before calling
> aic5_of_init(). If that fails, the cache is left allocated even though
> no IRQ domain was installed and the cache will not be used.
> 
> Free the cache on the failure path and clear the global pointer.

No aic5 = no viable system to run on: I'm not sure it's worth 
considering the case.

> Fixes: a50ac562ef48 ("irqchip/atmel-aic5: Handle suspend to RAM")
> Signed-off-by: Yuho Choi <[email-masked]>
> ---
>   drivers/irqchip/irq-atmel-aic5.c | 11 ++++++++++-
>   1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/irqchip/irq-atmel-aic5.c b/drivers/irqchip/irq-atmel-aic5.c
> index 1f14b401f71d..58650eb16880 100644
> --- a/drivers/irqchip/irq-atmel-aic5.c
> +++ b/drivers/irqchip/irq-atmel-aic5.c
> @@ -358,13 +358,22 @@ static int __init sama5d2_aic5_of_init(struct device_node *node,
>                                         struct device_node *parent)
>   {
>   #ifdef CONFIG_PM
> +       int rc = 0;
>          smr_cache = kcalloc(DIV_ROUND_UP(NR_SAMA5D2_IRQS, 32) * 32,
>                              sizeof(*smr_cache), GFP_KERNEL);
>          if (!smr_cache)
>                  return -ENOMEM;
> -#endif
> 
> +       rc = aic5_of_init(node, parent, NR_SAMA5D2_IRQS);
> +       if (rc) {
> +               kfree(smr_cache);
> +               smr_cache = NULL;
> +       }
> +
> +       return rc;
> +#else
>          return aic5_of_init(node, parent, NR_SAMA5D2_IRQS);
> +#endif
>   }
>   IRQCHIP_DECLARE(sama5d2_aic5, "atmel,sama5d2-aic", sama5d2_aic5_of_init);
> 
> --
> 2.43.0
>