[PATCH] irqchip: irq-imx-intmux: fix runtime PM cleanup

Jiawen Liu posted 1 patch 1 month, 1 week ago
[PATCH] irqchip: irq-imx-intmux: fix runtime PM cleanup
Posted by Jiawen Liu 1 month, 1 week ago
Fix imx_intmux_probe lifecycle error path.

Probe enables runtime PM and clock. Failures after clock enable only
disable clock and leak PM runtime reference/enable. Clk cleanup is
incomplete because PM runtime state is left enabled/ref held on later
probe failures.

Balance runtime PM setup on imx-intmux probe failures in
imx_intmux_probe.

Signed-off-by: jiawen <1298662399@qq.com>
---
diff --git a/drivers/irqchip/irq-imx-intmux.c b/drivers/irqchip/irq-imx-intmux.c
--- a/drivers/irqchip/irq-imx-intmux.c
+++ b/drivers/irqchip/irq-imx-intmux.c
@@ -240,6 +240,8 @@
 	ret = clk_prepare_enable(data->ipg_clk);
 	if (ret) {
 		dev_err(&pdev->dev, "failed to enable ipg clk: %d\n", ret);
+		pm_runtime_put_noidle(&pdev->dev);
+		pm_runtime_disable(&pdev->dev);
 		return ret;
 	}
 
@@ -282,6 +284,8 @@
 	return 0;
 out:
 	clk_disable_unprepare(data->ipg_clk);
+	pm_runtime_put_noidle(&pdev->dev);
+	pm_runtime_disable(&pdev->dev);
 	return ret;
 }
Re: [PATCH] irqchip: irq-imx-intmux: fix runtime PM cleanup
Posted by Frank Li 1 month, 1 week ago
On Tue, Aug 18, 2026 at 05:21:08PM +0400, Jiawen Liu wrote:
> Fix imx_intmux_probe lifecycle error path.
>
> Probe enables runtime PM and clock. Failures after clock enable only
> disable clock and leak PM runtime reference/enable. Clk cleanup is
> incomplete because PM runtime state is left enabled/ref held on later
> probe failures.
>
> Balance runtime PM setup on imx-intmux probe failures in
> imx_intmux_probe.
>
> Signed-off-by: jiawen <1298662399@qq.com>
> ---
> diff --git a/drivers/irqchip/irq-imx-intmux.c b/drivers/irqchip/irq-imx-intmux.c
> --- a/drivers/irqchip/irq-imx-intmux.c
> +++ b/drivers/irqchip/irq-imx-intmux.c
> @@ -240,6 +240,8 @@
>  	ret = clk_prepare_enable(data->ipg_clk);
>  	if (ret) {
>  		dev_err(&pdev->dev, "failed to enable ipg clk: %d\n", ret);
> +		pm_runtime_put_noidle(&pdev->dev);
> +		pm_runtime_disable(&pdev->dev);


use devm_pm_runtime_enable() to fix this problem.

Frank

>  		return ret;
>  	}
>
> @@ -282,6 +284,8 @@
>  	return 0;
>  out:
>  	clk_disable_unprepare(data->ipg_clk);
> +	pm_runtime_put_noidle(&pdev->dev);
> +	pm_runtime_disable(&pdev->dev);
>  	return ret;
>  }
>
>
>