[PATCH] drm/bridge: microchip-lvds: Fix runtime PM leak in mchp_lvds_enable()

Wentao Liang posted 1 patch 1 week, 1 day ago
drivers/gpu/drm/bridge/microchip-lvds.c | 1 +
1 file changed, 1 insertion(+)
[PATCH] drm/bridge: microchip-lvds: Fix runtime PM leak in mchp_lvds_enable()
Posted by Wentao Liang 1 week, 1 day ago
mchp_lvds_enable() resumes the device with pm_runtime_get_sync() and
returns early when the resume fails.  pm_runtime_get_sync() increments
the runtime PM usage count even when it fails, so returning without
dropping the reference leaks it and prevents the device from ever
suspending again once the error has been hit.

Drop the runtime PM reference with pm_runtime_put_noidle() on the
resume failure path before returning.

Fixes: 179b0769fc5f ("drm/bridge: add lvds controller support for sam9x7")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
 drivers/gpu/drm/bridge/microchip-lvds.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/bridge/microchip-lvds.c b/drivers/gpu/drm/bridge/microchip-lvds.c
index 9f4ff82bc6b4..b77ec6ae0a97 100644
--- a/drivers/gpu/drm/bridge/microchip-lvds.c
+++ b/drivers/gpu/drm/bridge/microchip-lvds.c
@@ -127,6 +127,7 @@ static void mchp_lvds_enable(struct drm_bridge *bridge)
 	ret = pm_runtime_get_sync(lvds->dev);
 	if (ret < 0) {
 		dev_err(lvds->dev, "failed to get pm runtime: %d\n", ret);
+		pm_runtime_put_noidle(lvds->dev);
 		return;
 	}
 
-- 
2.34.1
Re: [PATCH] drm/bridge: microchip-lvds: Fix runtime PM leak in mchp_lvds_enable()
Posted by Manikandan.M@microchip.com 1 week ago
Hi Wentao Liang,

Thanks for the patch, and Sashiko's automated review is correct here — 
this needs rework.

pm_runtime_get_sync() bumps the usage count even on failure, so today 
that leaked reference is consumed by the put in _disable().Adding 
pm_runtime_put_noidle() on the error path makes the later unconditional 
pm_runtime_put() underflow the counter.

Also, as of v7.2 the function is mchp_lvds_atomic_enable(), so please 
rebase it on to the latest and update the subject/commit message.

On 9/16/26 3:49 PM, Wentao Liang wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> mchp_lvds_enable() resumes the device with pm_runtime_get_sync() and
> returns early when the resume fails.  pm_runtime_get_sync() increments
> the runtime PM usage count even when it fails, so returning without
> dropping the reference leaks it and prevents the device from ever
> suspending again once the error has been hit.
> 
> Drop the runtime PM reference with pm_runtime_put_noidle() on the
> resume failure path before returning.
> 
> Fixes: 179b0769fc5f ("drm/bridge: add lvds controller support for sam9x7")
> Cc: stable@vger.kernel.org
> Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
> ---
>   drivers/gpu/drm/bridge/microchip-lvds.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/bridge/microchip-lvds.c b/drivers/gpu/drm/bridge/microchip-lvds.c
> index 9f4ff82bc6b4..b77ec6ae0a97 100644
> --- a/drivers/gpu/drm/bridge/microchip-lvds.c
> +++ b/drivers/gpu/drm/bridge/microchip-lvds.c
> @@ -127,6 +127,7 @@ static void mchp_lvds_enable(struct drm_bridge *bridge)
>          ret = pm_runtime_get_sync(lvds->dev);
>          if (ret < 0) {
>                  dev_err(lvds->dev, "failed to get pm runtime: %d\n", ret);
> +               pm_runtime_put_noidle(lvds->dev);
>                  return;
>          }
> 
> --
> 2.34.1
> 


-- 
Thanks and Regards,
Manikandan M.