[PATCH] drm/exynos: fimd: fix clock leak on resume error path

Jiawen Liu posted 1 patch 1 month, 1 week ago
[PATCH] drm/exynos: fimd: fix clock leak on resume error path
Posted by Jiawen Liu 1 month, 1 week ago
From: jiawen <1298662399@qq.com>

exynos_fimd_resume() can fail when clk_prepare_enable() succeeds for
bus_clk but fails for lcd_clk. The function returns the error without
disabling bus_clk, leaving it prepared and enabled.

Disable bus_clk before returning the error to keep the clock state
balanced.

Signed-off-by: jiawen <1298662399@qq.com>
---
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -1325,6 +1325,7 @@
 		DRM_DEV_ERROR(dev,
 			      "Failed to prepare_enable the lcd clk [%d]\n",
 			      ret);
+		clk_disable_unprepare(ctx->bus_clk);
 		return ret;
 	}
Re: [PATCH] drm/exynos: fimd: fix clock leak on resume error path
Posted by Markus Elfring 1 month, 1 week ago
…
> Disable bus_clk before returning the error to keep the clock state
> balanced.

How do you think about to add any tags (like “Fixes” and “Cc”) accordingly?
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v7.2#n145
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/stable-kernel-rules.rst?h=v7.2#n34

Regards,
Markus
Re: [PATCH] drm/exynos: fimd: fix clock leak on resume error path
Posted by Inki Dae 1 month, 1 week ago
Hi,

2026년 8월 18일 (화) 오후 9:46, Jiawen Liu <1298662399@qq.com>님이 작성:
>
> From: jiawen <1298662399@qq.com>
>
> exynos_fimd_resume() can fail when clk_prepare_enable() succeeds for
> bus_clk but fails for lcd_clk. The function returns the error without
> disabling bus_clk, leaving it prepared and enabled.
>
> Disable bus_clk before returning the error to keep the clock state
> balanced.
>
> Signed-off-by: jiawen <1298662399@qq.com>
> ---
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
> @@ -1325,6 +1325,7 @@
>                 DRM_DEV_ERROR(dev,
>                               "Failed to prepare_enable the lcd clk [%d]\n",
>                               ret);
> +               clk_disable_unprepare(ctx->bus_clk);

The analysis and the fix are correct. exynos_fimd_suspend() disables
both clocks, so leaving bus_clk enabled on this error path does leave
the refcount unbalanced, and clk_disable_unprepare(ctx->bus_clk)
restores the symmetry.

Merged. Thanks,
Inki Dae

>                 return ret;
>         }
>
>
>