summaryrefslogtreecommitdiff
path: root/drivers/base/core.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2022-07-08 20:38:51 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2022-07-08 20:38:51 +0200
commitfe7c758c07c4729a16f940eb1d77027ad032ab29 (patch)
treeb95dcdfda6934aedf433f563f87eed56386be5c0 /drivers/base/core.c
parentba7c3507087aaf98bbeab04a62251bf63c6348c1 (diff)
parent887371066039011144b4a94af97d9328df6869a2 (diff)
Merge branch 'pm-core'
Merge a runtime PM framework cleanup and fix related to device links. * pm-core: PM: runtime: Fix supplier device management during consumer probe PM: runtime: Redefine pm_runtime_release_supplier()
Diffstat (limited to 'drivers/base/core.c')
-rw-r--r--drivers/base/core.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 7cd789c4985d..460d6f163e41 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -486,7 +486,18 @@ static void device_link_release_fn(struct work_struct *work)
/* Ensure that all references to the link object have been dropped. */
device_link_synchronize_removal();
- pm_runtime_release_supplier(link, true);
+ pm_runtime_release_supplier(link);
+ /*
+ * If supplier_preactivated is set, the link has been dropped between
+ * the pm_runtime_get_suppliers() and pm_runtime_put_suppliers() calls
+ * in __driver_probe_device(). In that case, drop the supplier's
+ * PM-runtime usage counter to remove the reference taken by
+ * pm_runtime_get_suppliers().
+ */
+ if (link->supplier_preactivated)
+ pm_runtime_put_noidle(link->supplier);
+
+ pm_request_idle(link->supplier);
put_device(link->consumer);
put_device(link->supplier);