summaryrefslogtreecommitdiff
path: root/drivers/base/power/runtime.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2025-02-18 21:20:46 +0100
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2025-03-03 13:29:00 +0100
commit520a552f19d55825108ab83da093084c9afb50e9 (patch)
tree0aef7e72ac0bd67180fd9a0db8f1ddc47a5bbe03 /drivers/base/power/runtime.c
parentbca84a7b93fdc744d79d94423c2cb905b1832310 (diff)
PM: sleep: Avoid unnecessary checks in device_prepare_smart_suspend()
Add an optimization (on top of previous changes) to avoid calling pm_runtime_blocked(), which involves acquiring the device's PM spinlock, for devices with no PM callbacks and runtime PM "blocked". Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org> Link: https://patch.msgid.link/2978873.e9J7NaK4W3@rjwysocki.net
Diffstat (limited to 'drivers/base/power/runtime.c')
-rw-r--r--drivers/base/power/runtime.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index c0f5a9f89299..e772e45d30f3 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -1460,14 +1460,19 @@ int pm_runtime_barrier(struct device *dev)
}
EXPORT_SYMBOL_GPL(pm_runtime_barrier);
-void pm_runtime_block_if_disabled(struct device *dev)
+bool pm_runtime_block_if_disabled(struct device *dev)
{
+ bool ret;
+
spin_lock_irq(&dev->power.lock);
- if (dev->power.disable_depth && dev->power.last_status == RPM_INVALID)
+ ret = dev->power.disable_depth && dev->power.last_status == RPM_INVALID;
+ if (ret)
dev->power.last_status = RPM_BLOCKED;
spin_unlock_irq(&dev->power.lock);
+
+ return ret;
}
void pm_runtime_unblock(struct device *dev)