Re: [PATCH v3 1/2] irqchip/imx-irqsteer: Convert to devm_pm_runtime_enable()
Frank Li <[email protected]>
| Newsgroups | dev.linux.lists.imx,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <anOe3mLdSMVvfPXm@SMW015318> |
On Wed, Aug 05, 2026 at 04:27:42PM -0300, Fabio Estevam wrote: > From: Fabio Estevam <[email protected]> > > imx_irqsteer_probe() enables runtime PM, but imx_irqsteer_remove() does > not disable it. Consequently, runtime PM remains enabled after unbinding > the device, and rebinding it triggers: > > Unbalanced pm_runtime_enable! > > Use devm_pm_runtime_enable() to automatically disable runtime PM when > the device is removed. Set up runtime PM before creating the IRQ domain > and registering chained handlers so that a failure cannot leave either > resource pointing at freed driver data. > > Fixes: 4730d2233311 ("irqchip/imx-irqsteer: Add runtime PM support") > Signed-off-by: Fabio Estevam <[email protected]> > --- > Changes since v1: > - Move devm_pm_runtime_enable() prior to irq_domain_create_linear(). (Frank) Reviewed-by: Frank Li <[email protected]> > > drivers/irqchip/irq-imx-irqsteer.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c > index 87b07f517be3..653e25115083 100644 > --- a/drivers/irqchip/irq-imx-irqsteer.c > +++ b/drivers/irqchip/irq-imx-irqsteer.c > @@ -236,6 +236,11 @@ static int imx_irqsteer_probe(struct platform_device *pdev) > if (irqsteer_has_chanctrl(data->devtype_data)) > writel_relaxed(BIT(data->channel), data->regs + CHANCTRL); > > + pm_runtime_set_active(&pdev->dev); > + ret = devm_pm_runtime_enable(&pdev->dev); > + if (ret) > + goto out; > + > data->domain = irq_domain_create_linear(dev_fwnode(&pdev->dev), data->reg_num * 32, > &imx_irqsteer_domain_ops, data); > if (!data->domain) { > @@ -262,9 +267,6 @@ static int imx_irqsteer_probe(struct platform_device *pdev) > > platform_set_drvdata(pdev, data); > > - pm_runtime_set_active(&pdev->dev); > - pm_runtime_enable(&pdev->dev); > - > return 0; > out: > clk_disable_unprepare(data->ipg_clk); > -- > 2.43.0 > >