aboutsummaryrefslogtreecommitdiffstats
path: root/lib/crypto/mpi/mpi-mul.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <[email protected]>2025-06-27 19:19:31 +0000
committerRafael J. Wysocki <[email protected]>2025-07-03 15:10:40 +0000
commitab5ce09709b5f3cc73124bd1f2d6de06c1a4b6be (patch)
tree292d8aa1f47fdb2a53fb9e49e1917758d3851be3 /lib/crypto/mpi/mpi-mul.c
parentPM: runtime: Clear power.needs_force_resume in pm_runtime_reinit() (diff)
downloadkernel-ab5ce09709b5f3cc73124bd1f2d6de06c1a4b6be.tar.gz
kernel-ab5ce09709b5f3cc73124bd1f2d6de06c1a4b6be.zip
PM: Check power.needs_force_resume in pm_runtime_force_suspend()
Add a power.needs_force_resume check to pm_runtime_force_suspend() so it need not rely on the runtime PM status of the device when deciding whether or not to return early. With the new check in place, pm_runtime_force_suspend() will also skip devices with the runtime PM status equal to RPM_ACTIVE if they have power.needs_force_resume set, so it won't need to change the RPM status of the device to RPM_SUSPENDED in addition to setting power.needs_force_resume in the case when pm_runtime_need_not_resume() return false. That allows the runtime PM status update to be removed from pm_runtime_force_resume(), so the runtime PM status remains unchanged between the pm_runtime_force_suspend() and pm_runtime_force_resume() calls. This change potentially unbreaks drivers that call pm_runtime_force_suspend() from their ->remove() callbacks because currently, if the device being unbound from its driver has a parent with enabled runtime PM and/or (possibly) device links respecting runtime PM to suppliers, and it is RPM_ACTIVE when the remove takes place, pm_runtime_force_suspend() will not drop the parent's child count and the suppliers' runtime PM usage counters after force-suspending the device unless pm_runtime_need_not_resume() returns 'true' for it. Moreover, because pm_runtime_force_suspend() changes the device's runtime PM status to RPM_SUSPENDED, in the above case pm_runtime_reinit() will not cause those counters to drop, so they will remain nonzero forever effectively preventing the devices in question from runtime-suspending going forward. This change is also needed for pm_runtime_force_suspend() to work with PCI PM and ACPI PM after subsequent changes. Namely, say DPM_FLAG_SMART_SUSPEND is set for a PCI device and its driver uses pm_runtime_force_suspend() as its ->suspend() callback. If pm_runtime_force_suspend() changed the runtime PM status of the device to RPM_SUSPENDED, pci_pm_suspend_noirq() would skip the device due to the dev_pm_skip_suspend() check. Signed-off-by: Rafael J. Wysocki <[email protected]> Reviewed-by: Ulf Hansson <[email protected]> Link: https://patch.msgid.link/[email protected]
Diffstat (limited to 'lib/crypto/mpi/mpi-mul.c')
0 files changed, 0 insertions, 0 deletions