Message ID | 20231117111433.1561669-3-sakari.ailus@linux.intel.com |
---|---|
State | New |
Headers | show |
Series | Small Runtime PM API changes | expand |
Hi Sakari, Thank you for the patch. On Fri, Nov 17, 2023 at 01:14:28PM +0200, Sakari Ailus wrote: > Add pm_runtime_put_mark_busy_autosusp() helper function for users that > wish to set the last_busy timestamp to current time and put the > usage_count of the device and set the autosuspend timer. > > Essentially calling pm_runtime_suspend_mark_busy_autosusp() equal to > calling first pm_runtime_mark_last_busy() and then > pm_runtime_put_autosuspend(). The vast majority if the pm_runtime_put_autosuspend() users call pm_runtime_mark_last_busy() right before. Let's make the pm_runtime_put_autosuspend() function do that by default, and add a __pm_runtime_put_autosuspend() (name to be bikshedded) for the minority of cases where updating the last busy timestamp isn't desired. We want to simplify the API, not make it more complex. > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> > --- > include/linux/pm_runtime.h | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h > index 13cd526634c1..4afe7b0b9d7e 100644 > --- a/include/linux/pm_runtime.h > +++ b/include/linux/pm_runtime.h > @@ -495,6 +495,23 @@ static inline int pm_runtime_put_autosuspend(struct device *dev) > RPM_GET_PUT | RPM_ASYNC | RPM_AUTO); > } > > +/** > + * pm_runtime_put_mark_busy_autosusp - Update the last access time of a device > + * and drop device usage counter and queue > + * autosuspend if 0. > + * @dev: Target device. > + * > + * Update the last access time of @dev using pm_runtime_mark_last_busy(), then > + * 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(). > + */ > +static inline int pm_runtime_put_mark_busy_autosusp(struct device *dev) > +{ > + pm_runtime_mark_last_busy(dev); > + > + return pm_runtime_autosuspend(dev); > +} > + > /** > * pm_runtime_put_sync - Drop device usage counter and run "idle check" if 0. > * @dev: Target device.
On Sat, Nov 18, 2023 at 6:49 PM Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote: > > Hi Sakari, > > Thank you for the patch. > > On Fri, Nov 17, 2023 at 01:14:28PM +0200, Sakari Ailus wrote: > > Add pm_runtime_put_mark_busy_autosusp() helper function for users that > > wish to set the last_busy timestamp to current time and put the > > usage_count of the device and set the autosuspend timer. > > > > Essentially calling pm_runtime_suspend_mark_busy_autosusp() equal to > > calling first pm_runtime_mark_last_busy() and then > > pm_runtime_put_autosuspend(). > > The vast majority if the pm_runtime_put_autosuspend() users call > pm_runtime_mark_last_busy() right before. Let's make the > pm_runtime_put_autosuspend() function do that by default, and add a > __pm_runtime_put_autosuspend() (name to be bikshedded) for the minority > of cases where updating the last busy timestamp isn't desired. We want > to simplify the API, not make it more complex. I would also prefer it to be done this way if not too problematic.
Hi Rafael, On Sat, Nov 18, 2023 at 10:20:46PM +0100, Rafael J. Wysocki wrote: > On Sat, Nov 18, 2023 at 6:49 PM Laurent Pinchart wrote: > > On Fri, Nov 17, 2023 at 01:14:28PM +0200, Sakari Ailus wrote: > > > Add pm_runtime_put_mark_busy_autosusp() helper function for users that > > > wish to set the last_busy timestamp to current time and put the > > > usage_count of the device and set the autosuspend timer. > > > > > > Essentially calling pm_runtime_suspend_mark_busy_autosusp() equal to > > > calling first pm_runtime_mark_last_busy() and then > > > pm_runtime_put_autosuspend(). > > > > The vast majority if the pm_runtime_put_autosuspend() users call > > pm_runtime_mark_last_busy() right before. Let's make the > > pm_runtime_put_autosuspend() function do that by default, and add a > > __pm_runtime_put_autosuspend() (name to be bikshedded) for the minority > > of cases where updating the last busy timestamp isn't desired. We want > > to simplify the API, not make it more complex. > > I would also prefer it to be done this way if not too problematic. I'm glad you agree :-) The change will probably be a bit painful, but I think it's for the best. Sakari, please let me know if I can help.
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index 13cd526634c1..4afe7b0b9d7e 100644 --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h @@ -495,6 +495,23 @@ static inline int pm_runtime_put_autosuspend(struct device *dev) RPM_GET_PUT | RPM_ASYNC | RPM_AUTO); } +/** + * pm_runtime_put_mark_busy_autosusp - Update the last access time of a device + * and drop device usage counter and queue + * autosuspend if 0. + * @dev: Target device. + * + * Update the last access time of @dev using pm_runtime_mark_last_busy(), then + * 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(). + */ +static inline int pm_runtime_put_mark_busy_autosusp(struct device *dev) +{ + pm_runtime_mark_last_busy(dev); + + return pm_runtime_autosuspend(dev); +} + /** * pm_runtime_put_sync - Drop device usage counter and run "idle check" if 0. * @dev: Target device.
Add pm_runtime_put_mark_busy_autosusp() helper function for users that wish to set the last_busy timestamp to current time and put the usage_count of the device and set the autosuspend timer. Essentially calling pm_runtime_suspend_mark_busy_autosusp() equal to calling first pm_runtime_mark_last_busy() and then pm_runtime_put_autosuspend(). Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> --- include/linux/pm_runtime.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)