[PATCH] drm/exynos: scaler: Fix runtime PM reference leak in scaler_commit

Xiangwu Lai laixiangwu at cmss.chinamobile.com
Mon Nov 2 02:46:42 PST 2026


scaler_commit() calls pm_runtime_resume_and_get(), but when the
scaler_reset() soft reset does not complete it returns -EIO directly
without dropping the reference.  On the success path the reference is
only dropped from the frame-end interrupt handler, and scaler->task
is not yet assigned on the error path, so the interrupt handler will
not drop it either.

Each failed scaler commit therefore leaks one runtime PM reference and
the scaler can never runtime suspend afterwards.

This restores the pm_runtime_put() call that was already present in
the error path before the conversion to
pm_runtime_resume_and_get().

Fixes: 445d3bed75de ("drm/exynos: use pm_runtime_resume_and_get()")
Signed-off-by: Xiangwu Lai <laixiangwu at cmss.chinamobile.com>
---
 drivers/gpu/drm/exynos/exynos_drm_scaler.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_scaler.c b/drivers/gpu/drm/exynos/exynos_drm_scaler.c
index c8a1b6b0a..dc8189685 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_scaler.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_scaler.c
@@ -372,8 +372,10 @@ static int scaler_commit(struct exynos_drm_ipp *ipp,
 	if (ret < 0)
 		return ret;
 
-	if (scaler_reset(scaler))
+	if (scaler_reset(scaler)) {
+		pm_runtime_put(scaler->dev);
 		return -EIO;
+	}
 
 	scaler->task = task;
 





More information about the linux-arm-kernel mailing list