Re: [PATCH] drm/nouveau: Fix runtime PM leak in nouveau_connector_detect()
From: lyude
Date: Thu Sep 17 2026 - 16:34:29 EST
Nice catch!
Reviewed-by: Lyude Paul <lyude@xxxxxxxxxx>
Will push to drm-misc-fixes in just a moment
On Wed, 2026-09-16 at 18:03 +0000, Wentao Liang wrote:
> If nvif_outp_edid_get() fails, nouveau_connector_detect() returns
> early without dropping the runtime PM reference taken at the start
> of the function, keeping the device powered on until the next
> successful detect.
>
> Balance the reference on the error path like the other exit paths
> do.
>
> Fixes: 0cd7e0718139 ("drm/nouveau/disp: add output method to fetch
> edid")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
> ---
> drivers/gpu/drm/nouveau/nouveau_connector.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c
> b/drivers/gpu/drm/nouveau/nouveau_connector.c
> index cc239492c7f0..4a750d4bf1f4 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_connector.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
> @@ -600,8 +600,11 @@ nouveau_connector_detect(struct drm_connector
> *connector, bool force)
> new_edid = drm_get_edid(connector,
> nv_encoder->i2c);
> } else {
> ret = nvif_outp_edid_get(&nv_encoder->outp,
> (u8 **)&new_edid);
> - if (ret < 0)
> + if (ret < 0) {
> + pm_runtime_mark_last_busy(dev->dev);
> + pm_runtime_put_autosuspend(dev-
> >dev);
> return
> connector_status_disconnected;
> + }
> }
>
> nouveau_connector_set_edid(nv_connector, new_edid);