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: [email protected]
> Signed-off-by: Wentao Liang <[email protected]>
> ---
>   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.

Reply via email to