[v2,0/3] PM: runtime: Update behaviour for no callbacks

Message ID 20210608090250.85256-1-ulf.hansson@linaro.org
Headers show
Series
  • PM: runtime: Update behaviour for no callbacks
Related show

Message

Ulf Hansson June 8, 2021, 9:02 a.m.
While reviewing a patch on the mmc-list, I ended up inspecting the behaviour of
how we deal with the no callback case for runtime PM.

A couple of observations:

*) When pm_runtime_no_callbacks() have been called, it allows the PM core to
takes a quicker path, but at the same time, consumer/supplier device links are
being skipped in rpm_resume|suspend().

**) Calling pm_runtime_no_callbacks() to avoid boiler plate code (assigning
empty functions to ->runtime_suspend|resume()), doesn't work if there could be
consumer/supplier device link being used or a platform dependent PM domain that
could get attached to the device.

Therefore, this series suggests to change the behaviour in the PM core, to
allow the ->runtime_suspend|resume() callbacks to be unassigned. This is already
supported for ->runtime_idle() callbacks, so it would also move things into a
more consistent behaviour.

I have looked at various error paths, in the kernel of callers of
pm_runtime_get_sync(). I couldn't find anyone that made sense, that looked for
the special error code, -ENOSYS, which is the error code getting returned when a
callback is missing. Whether that is sufficient proof that these changes are
100% safe, I can't guarantee, but I think it would be worth a try as the
benefits of avoiding boilerplate code and the corresponding additional code
paths are quite nice, if you ask me.

Kind regards
Ulf Hansson


Ulf Hansson (3):
  PM: runtime: Improve path in rpm_idle() when no callback
  PM: runtime: Allow unassigned ->runtime_suspend|resume callbacks
  PM: runtime: Clarify documentation when callbacks are unassigned

 Documentation/power/runtime_pm.rst |  8 ++++++++
 drivers/base/power/runtime.c       | 18 ++++++++----------
 2 files changed, 16 insertions(+), 10 deletions(-)

-- 
2.25.1

Comments

Alan Stern June 8, 2021, 2:24 p.m. | #1
On Tue, Jun 08, 2021 at 11:02:47AM +0200, Ulf Hansson wrote:
> While reviewing a patch on the mmc-list, I ended up inspecting the behaviour of

> how we deal with the no callback case for runtime PM.

> 

> A couple of observations:

> 

> *) When pm_runtime_no_callbacks() have been called, it allows the PM core to

> takes a quicker path, but at the same time, consumer/supplier device links are

> being skipped in rpm_resume|suspend().

> 

> **) Calling pm_runtime_no_callbacks() to avoid boiler plate code (assigning

> empty functions to ->runtime_suspend|resume()), doesn't work if there could be

> consumer/supplier device link being used or a platform dependent PM domain that

> could get attached to the device.

> 

> Therefore, this series suggests to change the behaviour in the PM core, to

> allow the ->runtime_suspend|resume() callbacks to be unassigned. This is already

> supported for ->runtime_idle() callbacks, so it would also move things into a

> more consistent behaviour.

> 

> I have looked at various error paths, in the kernel of callers of

> pm_runtime_get_sync(). I couldn't find anyone that made sense, that looked for

> the special error code, -ENOSYS, which is the error code getting returned when a

> callback is missing. Whether that is sufficient proof that these changes are

> 100% safe, I can't guarantee, but I think it would be worth a try as the

> benefits of avoiding boilerplate code and the corresponding additional code

> paths are quite nice, if you ask me.


In principle I have no objection to these changes.  It's likely 
that if any problems do crop up, we'll be able to fix them pretty 
easily.  For patches 1 and 2:

Acked-by: Alan Stern <stern@rowland.harvard.edu>


Alan Stern