Re: [PATCH v2 2/3] PM: runtime: Make put{,_sync}() return 1 when already suspended

From: Sakari Ailus
Date: Fri Sep 26 2025 - 08:25:47 EST


Hi Brian,

Thanks for the update.

On Thu, Sep 25, 2025 at 12:42:15PM -0700, Brian Norris wrote:
> The pm_runtime.h docs say pm_runtime_put() and pm_runtime_put_sync()
> return 1 when already suspended, but this is not true -- they return
> -EAGAIN. On the other hand, pm_runtime_put_sync_suspend() and
> pm_runtime_put_sync_autosuspend() *do* return 1.
>
> This is an artifact of the fact that the former are built on rpm_idle(),
> whereas the latter are built on rpm_suspend().
>
> There are precious few pm_runtime_put()/pm_runtime_put_sync() callers
> that check the return code at all, but most of them only log errors, and
> usually only for negative error codes. None of them should be treating
> this as an error, so:
>
> * at best, this may fix some case where a driver treats this condition
> as an error, when it shouldn't;
>
> * at worst, this should make no effect; and
>
> * somewhere in between, we could potentially clear up non-fatal log
> messages.
>
> Fix the pm_runtime_already_suspended_test() while tweaking the behavior.
> The test makes a lot more sense when these all return 1 when the device
> is already suspended:
>
> pm_runtime_put_sync(dev);
> pm_runtime_suspend(dev);
> pm_runtime_autosuspend(dev);
> pm_request_autosuspend(dev);
> pm_runtime_put_sync_autosuspend(dev);
>
> Notably, I've avoided testing the return codes for these, since they
> really should be ignored by callers, and we may make them 'void'
> altogether:
>
> pm_runtime_put(dev);
> pm_runtime_put_autosuspend(dev);
>
> Signed-off-by: Brian Norris <briannorris@xxxxxxxxxxxx>
> Reviewed-by: Dhruva Gole <d-gole@xxxxxx>

Reviewed-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>

--
Sakari Ailus