linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/9] PM: Reconcile different driver options for runtime PM integration with system sleep
@ 2025-06-26 17:56 Rafael J. Wysocki
  2025-06-26 17:57 ` [PATCH v2 1/9] PM: Use true/false as power.needs_force_resume values Rafael J. Wysocki
                   ` (8 more replies)
  0 siblings, 9 replies; 14+ messages in thread
From: Rafael J. Wysocki @ 2025-06-26 17:56 UTC (permalink / raw)
  To: Linux PM; +Cc: LKML, Linux ACPI, Linux PCI, Ulf Hansson, Mika Westerberg

Hi Everyone,

This is an update of the series posted yesterday:

https://lore.kernel.org/linux-pm/22759968.EfDdHjke4D@rjwysocki.net/

which first of all fixes the patch numbering and makes some changes
resulting from the following discussion.

This part of the cover letter still applies:

"This series addresses a couple of issues related to the integration of runtime
PM with system sleep I was talking about at the OSMP-summit 2025:

https://lwn.net/Articles/1021332/

Most importantly, DPM_FLAG_SMART_SUSPEND cannot be used along with
pm_runtime_force_suspend/resume() due to some conflicting expectations
about the handling of device runtime PM status between these functions
and the PM core.

Also pm_runtime_force_suspend/resume() currently cannot be used in PCI
drivers and in drivers that collaborate with the general ACPI PM domain
because they both don't expect their mid-layer runtime PM callbacks to
be invoked during system-wide suspend and resume.

Patch [1/9] is a preparatory cleanup changing the code to use 'true' and
'false' as needs_force_resume flag values for consistency."

Patch [2/9], new in this version, makes pm_runtime_reinit() clear
needs_force_resume in case it was set during driver remove.

Patch [3/9] (which was [4/9] in v1) puts pm_runtime_force_resume() and one
other function that is only used during system sleep transitions under
CONFIG_PM_SLEEP.

Patch [4/9] (which was [2/9] in v1) makes pm_runtime_force_suspend() check
needs_force_resume along with the device's runtime PM status upfront, and bail
out if it is set, which allows runtime PM status updates to be eliminated from
both that function and pm_runtime_force_resume().

Patch [5/9] (which was [3/9] in v1) causes the smart_suspend flag to be taken
into account by pm_runtime_force_resume() which allows it to resume devices
with smart_suspend set whose runtime PM status has been changed to RPM_ACTIVE
by the PM core at the beginning of system resume.  After this patch, drivers
that use pm_runtime_force_suspend/resume() can also set DPM_FLAG_SMART_SUSPEND
which may be useful, for example, if devices handled by them are involved in
dependency chains with other devices setting DPM_FLAG_SMART_SUSPEND.

Patch [6/9] (which effectively is new in v2 because it was not submitted
previously by mistake) makes the code for getting a runtime PM callback for a
device a bit more straightforward in preparation for the subsequent changes.

Patch [7/9] introduces a new device PM flag called strict_midlayer that
can be set by middle layer code which doesn't want its runtime PM
callbacks to be used during system-wide PM transitions, like the PCI bus
type and the ACPI PM domain, and updates pm_runtime_force_suspend/resume()
to take that flag into account.

Patch [8/9] modifies the ACPI PM "prepare" and "complete" callback functions,
used by the general ACPI PM domain and by the ACPI LPSS PM domain, to set and
clear strict_midlayer, respectively, which allows drivers collaborating with it
to use pm_runtime_force_suspend/resume().

That may be useful if such a driver wants to be able to work with different
PM domains on different systems.  It may want to work with the general ACPI PM
domain on systems using ACPI, or with another PM domain (or even multiple PM
domains at the same time) on systems without ACPI, and it may want to use
pm_runtime_force_suspend/resume() as its system-wide PM callbacks.

Patch [9/9] updates the PCI bus type to set and clear, respectively, strict_midlayer
for all PCI devices in its "prepare" and "complete" PM callbacks, in case some
PCI drivers want to use pm_runtime_force_suspend/resume() in the future.  They
will still need to set DPM_FLAG_SMART_SUSPEND to avoid resuming their devices during
system suspend, but now they may also use pm_runtime_force_suspend/resume() as
suspend callbacks for the "regular suspend" phase of device suspend (or invoke
these functions from their suspend callbacks).

As usual, please refer to individual patch changelogs for more details.

Thanks!




^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2025-06-27 11:14 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-26 17:56 [PATCH v2 0/9] PM: Reconcile different driver options for runtime PM integration with system sleep Rafael J. Wysocki
2025-06-26 17:57 ` [PATCH v2 1/9] PM: Use true/false as power.needs_force_resume values Rafael J. Wysocki
2025-06-26 17:58 ` [PATCH v2 2/9] PM: runtime: Clear power.needs_force_resume in pm_runtime_reinit() Rafael J. Wysocki
2025-06-26 18:01 ` [PATCH v2 3/9] PM: Move two sleep-related functions under CONFIG_PM_SLEEP Rafael J. Wysocki
2025-06-26 18:03 ` [PATCH v2 4/9] PM: Check power.needs_force_resume in pm_runtime_force_suspend() Rafael J. Wysocki
2025-06-27 10:52   ` Rafael J. Wysocki
2025-06-27 11:14     ` Rafael J. Wysocki
2025-06-26 18:04 ` [PATCH v2 5/9] PM: Make pm_runtime_force_resume() work with DPM_FLAG_SMART_SUSPEND Rafael J. Wysocki
2025-06-26 18:06 ` [PATCH v2 6/9] PM: runtime: Introduce __rpm_get_driver_callback() Rafael J. Wysocki
2025-06-26 18:09 ` [PATCH v2 7/9] PM: sleep: Add strict_midlayer flag to struct dev_pm_info Rafael J. Wysocki
2025-06-26 18:12 ` [PATCH v2 8/9] ACPI: PM: Set/clear power.strict_midlayer in prepare/complete Rafael J. Wysocki
2025-06-26 18:15 ` [PATCH v2 9/9] PCI: PM: Set power.strict_midlayer in pci_pm_init() Rafael J. Wysocki
2025-06-26 20:59   ` Bjorn Helgaas
2025-06-27 10:11     ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).