Re: [PATCH] drm/panfrost: fix autosuspend cleanup during teardown

From: Guangshuo Li

Date: Wed Aug 12 2026 - 22:11:08 EST


Hi Adrian,

On Wed, 12 Aug 2026 at 22:35, Adrián Larumbe
<adrian.larumbe@xxxxxxxxxxxxx> wrote:
>
> Hi Guangshuo,
>
> Recently I've been working on a patch series that addresses PM refcnt imbalances in Panfrost.
> One of the fixes introduces devm_pm_runtime_enable(), so manually calling pm_runtime_dont_use_autosuspend()
> is no longer necessary like you mentioned in the commit message.
>
> However, there might be a point in using it during device teardown and probe error just like Panthor does,
> becasue it doesn't make sense to postpone suspension when the device is going away.
>
> Anyway, you can have a look at it here:
> https://lore.kernel.org/r/20260811-claude-fixes-v5-0-3d692c9e98c2@xxxxxxxxxxxxx
>
> I was thinking, I'll let you know when I've v6 ready and then you could rebase this patch onto it
> before I submit the series to the ML so that I can send them all together?
>
> Kind Regards,
> Adrian
>
> On 08.08.2026 21:50, Guangshuo Li wrote:
> > panfrost_probe() calls pm_runtime_use_autosuspend(), but neither the
> > probe error path nor panfrost_remove() calls the matching
> > pm_runtime_dont_use_autosuspend() during teardown.
> >
> > If the autosuspend delay is set to a negative value while autosuspend
> > is enabled, the runtime PM core increments usage_count to prevent
> > runtime suspend. Without calling pm_runtime_dont_use_autosuspend()
> > during teardown, this reference is not dropped.
> >
> > The documentation for pm_runtime_use_autosuspend() also notes that it
> > is important to undo it with pm_runtime_dont_use_autosuspend() at
> > driver exit time, unless runtime PM was initially enabled with
> > devm_pm_runtime_enable().
> >
> > Add the missing pm_runtime_dont_use_autosuspend() calls to both the
> > probe failure and device removal paths.
> >
> > This issue was found by manual code inspection.
> >
> > Fixes: f3ba91228e8e ("drm/panfrost: Add initial panfrost driver")
> > Cc: stable@xxxxxxxxxxxxxxx
> > Signed-off-by: Guangshuo Li <lgs201920130244@xxxxxxxxx>
> > ---
> > drivers/gpu/drm/panfrost/panfrost_drv.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
> > index 784e36d72c2b..007dcba62e62 100644
> > --- a/drivers/gpu/drm/panfrost/panfrost_drv.c
> > +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
> > @@ -1011,6 +1011,7 @@ static int panfrost_probe(struct platform_device *pdev)
> > err_out2:
> > drm_dev_unregister(&pfdev->base);
> > err_out1:
> > + pm_runtime_dont_use_autosuspend(pfdev->base.dev);
> > pm_runtime_disable(pfdev->base.dev);
> > panfrost_device_fini(pfdev);
> > pm_runtime_set_suspended(pfdev->base.dev);
> > @@ -1025,6 +1026,7 @@ static void panfrost_remove(struct platform_device *pdev)
> > drm_dev_unregister(&pfdev->base);
> > panfrost_gem_shrinker_cleanup(&pfdev->base);
> >
> > + pm_runtime_dont_use_autosuspend(pfdev->base.dev);
> > pm_runtime_get_sync(pfdev->base.dev);
> > pm_runtime_disable(pfdev->base.dev);
> > panfrost_device_fini(pfdev);
> > --
> > 2.43.0
>
> Adrian Larumbe

Sure, I’d be glad to do that. Please let me know when v6 is ready, and
I’ll rebase my patch on top of it.

Best regards,
Guangshuo