All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: linux-pm@vger.kernel.org, "Rafael J. Wysocki" <rafael@kernel.org>,
	Len Brown <len.brown@intel.com>, Pavel Machek <pavel@kernel.org>
Subject: Re: [PATCH 3/7] pm: runtime: Mark last busy stamp in pm_runtime_put_autosuspend()
Date: Thu, 10 Apr 2025 23:17:11 +0300	[thread overview]
Message-ID: <20250410201711.GB29836@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20250410153106.4146265-4-sakari.ailus@linux.intel.com>

Hi Sakari,

Thank you for the patch.

On Thu, Apr 10, 2025 at 06:31:02PM +0300, Sakari Ailus wrote:
> Set device's last busy timestamp to current time in
> pm_runtime_put_autosuspend(). Callers wishing not to do that will need to
> use __pm_runtime_put_autosuspend().
> 
> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> ---
>  Documentation/power/runtime_pm.rst | 23 ++++++++++-------------
>  include/linux/pm_runtime.h         | 12 +++++++-----
>  2 files changed, 17 insertions(+), 18 deletions(-)
> 
> diff --git a/Documentation/power/runtime_pm.rst b/Documentation/power/runtime_pm.rst
> index 63344bea8393..e7bbdc66d64c 100644
> --- a/Documentation/power/runtime_pm.rst
> +++ b/Documentation/power/runtime_pm.rst
> @@ -411,8 +411,9 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
>        pm_request_idle(dev) and return its result
>  
>    `int pm_runtime_put_autosuspend(struct device *dev);`
> -    - does the same as __pm_runtime_put_autosuspend() for now, but in the
> -      future, will also call pm_runtime_mark_last_busy() as well, DO NOT USE!
> +    - set the power.last_busy field to the current time and decrement the
> +      device's usage counter; if the result is 0 then run
> +      pm_request_autosuspend(dev) and return its result
>  
>    `int __pm_runtime_put_autosuspend(struct device *dev);`
>      - decrement the device's usage counter; if the result is 0 then run
> @@ -870,11 +871,9 @@ device is automatically suspended (the subsystem or driver still has to call
>  the appropriate PM routines); rather it means that runtime suspends will
>  automatically be delayed until the desired period of inactivity has elapsed.
>  
> -Inactivity is determined based on the power.last_busy field.  Drivers should
> -call pm_runtime_mark_last_busy() to update this field after carrying out I/O,
> -typically just before calling __pm_runtime_put_autosuspend().  The desired
> -length of the inactivity period is a matter of policy.  Subsystems can set this
> -length initially by calling pm_runtime_set_autosuspend_delay(), but after device
> +Inactivity is determined based on the power.last_busy field. The desired length
> +of the inactivity period is a matter of policy.  Subsystems can set this length
> +initially by calling pm_runtime_set_autosuspend_delay(), but after device
>  registration the length should be controlled by user space, using the
>  /sys/devices/.../power/autosuspend_delay_ms attribute.
>  
> @@ -885,7 +884,7 @@ instead of the non-autosuspend counterparts::
>  
>  	Instead of: pm_runtime_suspend    use: pm_runtime_autosuspend;
>  	Instead of: pm_schedule_suspend   use: pm_request_autosuspend;
> -	Instead of: pm_runtime_put        use: __pm_runtime_put_autosuspend;
> +	Instead of: pm_runtime_put        use: pm_runtime_put_autosuspend;
>  	Instead of: pm_runtime_put_sync   use: pm_runtime_put_sync_autosuspend.
>  
>  Drivers may also continue to use the non-autosuspend helper functions; they
> @@ -922,12 +921,10 @@ Here is a schematic pseudo-code example::
>  	foo_io_completion(struct foo_priv *foo, void *req)
>  	{
>  		lock(&foo->private_lock);
> -		if (--foo->num_pending_requests == 0) {
> -			pm_runtime_mark_last_busy(&foo->dev);
> -			__pm_runtime_put_autosuspend(&foo->dev);
> -		} else {
> +		if (--foo->num_pending_requests == 0)
> +			pm_runtime_put_autosuspend(&foo->dev);
> +		else
>  			foo_process_next_request(foo);
> -		}
>  		unlock(&foo->private_lock);
>  		/* Send req result back to the user ... */
>  	}
> diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h
> index 3e31cbebc527..0ade3f75d903 100644
> --- a/include/linux/pm_runtime.h
> +++ b/include/linux/pm_runtime.h
> @@ -562,11 +562,13 @@ static inline int __pm_runtime_put_autosuspend(struct device *dev)
>  }
>  
>  /**
> - * pm_runtime_put_autosuspend - Drop device usage counter and queue autosuspend if 0.
> + * pm_runtime_put_autosuspend - Update the last access time of a device, drop
> + * its usage counter and queue autosuspend if the usage counter becomes 0.
>   * @dev: Target device.
>   *
> - * 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_autosuspend().
> + * Update the last access time of @dev and decrement its runtime PM usage

s/ and decrement/, decrement/

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> + * counter and if it turns out to be equal to 0, queue up a work item for @dev
> + * like in pm_request_autosuspend().
>   *
>   * Return:
>   * * 0: Success.
> @@ -581,8 +583,8 @@ static inline int __pm_runtime_put_autosuspend(struct device *dev)
>   */
>  static inline int pm_runtime_put_autosuspend(struct device *dev)
>  {
> -	return __pm_runtime_suspend(dev,
> -	    RPM_GET_PUT | RPM_ASYNC | RPM_AUTO);
> +	pm_runtime_mark_last_busy(dev);
> +	return __pm_runtime_put_autosuspend(dev);
>  }
>  
>  /**

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2025-04-10 20:17 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-10 15:30 [PATCH 0/7] Update last busy timestamp in Runtime PM autosuspend callbacks Sakari Ailus
2025-04-10 15:31 ` [PATCH 1/7] Documentation: pm: runtime: Fix a reference to pm_runtime_autosuspend() Sakari Ailus
2025-04-10 20:13   ` Laurent Pinchart
2025-04-15 17:27     ` Rafael J. Wysocki
2025-04-10 15:31 ` [PATCH 2/7] pm: runtime: Document return values of suspend related API functions Sakari Ailus
2025-04-10 15:31 ` [PATCH 3/7] pm: runtime: Mark last busy stamp in pm_runtime_put_autosuspend() Sakari Ailus
2025-04-10 20:17   ` Laurent Pinchart [this message]
2025-04-11  6:27     ` Sakari Ailus
2025-04-11  6:33       ` Sakari Ailus
2025-04-10 15:31 ` [PATCH 4/7] pm: runtime: Mark last busy stamp in pm_runtime_put_sync_autosuspend() Sakari Ailus
2025-04-10 20:23   ` Laurent Pinchart
2025-06-16  5:51     ` Sakari Ailus
2025-04-10 15:31 ` [PATCH 5/7] pm: runtime: Mark last busy stamp in pm_runtime_autosuspend() Sakari Ailus
2025-04-10 20:27   ` Laurent Pinchart
2025-04-10 15:31 ` [PATCH 6/7] pm: runtime: Mark last busy stamp in pm_request_autosuspend() Sakari Ailus
2025-04-10 20:28   ` Laurent Pinchart
2025-04-10 15:31 ` [PATCH 7/7] Documentation: PM: *_autosuspend() functions update last busy time Sakari Ailus
2025-04-10 20:29   ` Laurent Pinchart
2025-04-29 11:10 ` [PATCH 0/7] Update last busy timestamp in Runtime PM autosuspend callbacks Rafael J. Wysocki
2025-06-16  5:42   ` Sakari Ailus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250410201711.GB29836@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=len.brown@intel.com \
    --cc=linux-pm@vger.kernel.org \
    --cc=pavel@kernel.org \
    --cc=rafael@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.