Re: [PATCH v1 23/23] PM: runtime: Change pm_runtime_put() return type to void
From: Ulf Hansson
Date: Sun Dec 28 2025 - 10:54:18 EST
On Mon, 22 Dec 2025 at 21:37, Rafael J. Wysocki <rafael@xxxxxxxxxx> wrote:
>
> From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
>
> The primary role of pm_runtime_put() is to decrement the runtime PM
> usage counter of the given device. It always does that regardless of
> the value returned by it later.
>
> In addition, if the runtime PM usage counter after decrementation turns
> out to be zero, a work item is queued up to check whether or not the
> device can be suspended. This is not guaranteed to succeed though and
> even if it is successful, the device may still not be suspended going
> forward.
>
> There are multiple valid reasons why pm_runtime_put() may not decide to
> queue up the work item mentioned above, including, but not limited to,
> the case when user space has written "on" to the device's runtime PM
> "control" file in sysfs. In all of those cases, pm_runtime_put()
> returns a negative error code (even though the device's runtime PM
> usage counter has been successfully decremented by it) which is very
> confusing. In fact, its return value should only be used for debug
> purposes and care should be taken when doing it even in that case.
>
> Accordingly, to avoid the confusion mentioned above, change the return
> type of pm_runtime_put() to void.
>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
Nice cleanup!
Reviewed-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
Kind regards
Uffe
> ---
> include/linux/pm_runtime.h | 16 ++--------------
> 1 file changed, 2 insertions(+), 14 deletions(-)
>
> --- a/include/linux/pm_runtime.h
> +++ b/include/linux/pm_runtime.h
> @@ -545,22 +545,10 @@ static inline int pm_runtime_resume_and_
> *
> * Decrement the runtime PM usage counter of @dev and if it turns out to be
> * equal to 0, queue up a work item for @dev like in pm_request_idle().
> - *
> - * Return:
> - * * 1: Success. Usage counter dropped to zero, but device was already suspended.
> - * * 0: Success.
> - * * -EINVAL: Runtime PM error.
> - * * -EACCES: Runtime PM disabled.
> - * * -EAGAIN: Runtime PM usage counter became non-zero or Runtime PM status
> - * change ongoing.
> - * * -EBUSY: Runtime PM child_count non-zero.
> - * * -EPERM: Device PM QoS resume latency 0.
> - * * -EINPROGRESS: Suspend already in progress.
> - * * -ENOSYS: CONFIG_PM not enabled.
> */
> -static inline int pm_runtime_put(struct device *dev)
> +static inline void pm_runtime_put(struct device *dev)
> {
> - return __pm_runtime_idle(dev, RPM_GET_PUT | RPM_ASYNC);
> + __pm_runtime_idle(dev, RPM_GET_PUT | RPM_ASYNC);
> }
>
> /**
>
>
>