summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2025-02-27 13:49:12 +0300
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2025-03-03 16:35:07 +0300
commita84c2a885bc62a61e08fbcd9976a2a40400470c0 (patch)
treeae6a659fb72c98884a14171e804d030d71ff707b
parent1476bb20eec33bd68b67c7bb7a5d62063af8148d (diff)
downloadlinux-a84c2a885bc62a61e08fbcd9976a2a40400470c0.tar.xz
PM: core: Tweak pm_runtime_block_if_disabled() return value
Modify pm_runtime_block_if_disabled() to return true when runtime PM is disabled for the device, regardless of the power.last_status value. This effectively prevents "smart suspend" from being enabled for devices with runtime PM disabled in device_prepare(), even transiently, so update the related comment in that function accordingly. If a device has runtime PM disabled in device_prepare(), it is not actually known whether or not runtime PM will be enabled for that device going forward, so it is more appropriate to postpone the "smart suspend" optimization for the device in the given system suspend-resume cycle than to enable it and get confused going forward. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Link: https://patch.msgid.link/13718674.uLZWGnKmhe@rjwysocki.net
-rw-r--r--drivers/base/power/main.c2
-rw-r--r--drivers/base/power/runtime.c4
2 files changed, 3 insertions, 3 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 2f86d7cfdbbc..9215ec9f326b 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -1897,7 +1897,7 @@ unlock:
pm_runtime_put(dev);
return ret;
}
- /* Do not enable "smart suspend" for devices without runtime PM. */
+ /* Do not enable "smart suspend" for devices with disabled runtime PM. */
if (smart_suspend)
smart_suspend = device_prepare_smart_suspend(dev);
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index 42a58ed45a08..18e40dce460a 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -1466,8 +1466,8 @@ bool pm_runtime_block_if_disabled(struct device *dev)
spin_lock_irq(&dev->power.lock);
- ret = dev->power.disable_depth && dev->power.last_status == RPM_INVALID;
- if (ret)
+ ret = !pm_runtime_enabled(dev);
+ if (ret && dev->power.last_status == RPM_INVALID)
dev->power.last_status = RPM_BLOCKED;
spin_unlock_irq(&dev->power.lock);