Re: [PATCH v4 2/5] irqchip/imx-irqsteer: Use devm to manage the IRQ domain
Frank Li <[email protected]>
| Newsgroups | dev.linux.lists.imx,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <aoW8tbTmjMKs1IEO@SMW015318> |
On Wed, Aug 19, 2026 at 06:05:40PM +0900, [email protected] wrote: > From: Zhipeng Wang <[email protected]> > > probe() creates the IRQ domain with irq_domain_create_linear() and only > tears it down on the remove() path. On the probe() error path after the > domain has been created (the fsl,num-irqs sanity check), the single > error label just calls clk_disable_unprepare() and returns, leaking the > freshly created domain. The domain-creation failure path happens to > share the same label correctly only because the domain is NULL there. > > Create the domain with the new devm_irq_domain_create_linear() so the > domain is removed automatically on unbind and on any probe() failure > after it has been created. This fixes the leak on the sanity-check error > path and lets remove() drop its explicit irq_domain_remove(). > > Fixes: 28528fca4908 ("irqchip/imx-irqsteer: Add multi output interrupts support") Nit: First patch also need fixes tags to backport. Reviewed-by: Frank Li <[email protected]> > Signed-off-by: Zhipeng Wang <[email protected]> > --- > drivers/irqchip/irq-imx-irqsteer.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c > index 87b07f517be3..359b8ebc1bae 100644 > --- a/drivers/irqchip/irq-imx-irqsteer.c > +++ b/drivers/irqchip/irq-imx-irqsteer.c > @@ -236,8 +236,9 @@ static int imx_irqsteer_probe(struct platform_device *pdev) > if (irqsteer_has_chanctrl(data->devtype_data)) > writel_relaxed(BIT(data->channel), data->regs + CHANCTRL); > > - data->domain = irq_domain_create_linear(dev_fwnode(&pdev->dev), data->reg_num * 32, > - &imx_irqsteer_domain_ops, data); > + data->domain = devm_irq_domain_create_linear(&pdev->dev, dev_fwnode(&pdev->dev), > + data->reg_num * 32, > + &imx_irqsteer_domain_ops, data); > if (!data->domain) { > dev_err(&pdev->dev, "failed to create IRQ domain\n"); > ret = -ENOMEM; > @@ -284,8 +285,6 @@ static void imx_irqsteer_remove(struct platform_device *pdev) > NULL, NULL); > } > > - irq_domain_remove(irqsteer_data->domain); > - > clk_disable_unprepare(irqsteer_data->ipg_clk); > } > > -- > 2.34.1 > >