@@ -308,13 +308,10 @@ static int rpm_get_suppliers(struct device *dev)
308308/**
309309 * pm_runtime_release_supplier - Drop references to device link's supplier.
310310 * @link: Target device link.
311- * @check_idle: Whether or not to check if the supplier device is idle.
312311 *
313- * Drop all runtime PM references associated with @link to its supplier device
314- * and if @check_idle is set, check if that device is idle (and so it can be
315- * suspended).
312+ * Drop all runtime PM references associated with @link to its supplier device.
316313 */
317- void pm_runtime_release_supplier (struct device_link * link , bool check_idle )
314+ void pm_runtime_release_supplier (struct device_link * link )
318315{
319316 struct device * supplier = link -> supplier ;
320317
@@ -327,18 +324,18 @@ void pm_runtime_release_supplier(struct device_link *link, bool check_idle)
327324 while (refcount_dec_not_one (& link -> rpm_active ) &&
328325 atomic_read (& supplier -> power .usage_count ) > 0 )
329326 pm_runtime_put_noidle (supplier );
330-
331- if (check_idle )
332- pm_request_idle (supplier );
333327}
334328
335329static void __rpm_put_suppliers (struct device * dev , bool try_to_suspend )
336330{
337331 struct device_link * link ;
338332
339333 list_for_each_entry_rcu (link , & dev -> links .suppliers , c_node ,
340- device_links_read_lock_held ())
341- pm_runtime_release_supplier (link , try_to_suspend );
334+ device_links_read_lock_held ()) {
335+ pm_runtime_release_supplier (link );
336+ if (try_to_suspend )
337+ pm_request_idle (link -> supplier );
338+ }
342339}
343340
344341static void rpm_put_suppliers (struct device * dev )
@@ -1771,7 +1768,6 @@ void pm_runtime_get_suppliers(struct device *dev)
17711768 if (link -> flags & DL_FLAG_PM_RUNTIME ) {
17721769 link -> supplier_preactivated = true;
17731770 pm_runtime_get_sync (link -> supplier );
1774- refcount_inc (& link -> rpm_active );
17751771 }
17761772
17771773 device_links_read_unlock (idx );
@@ -1791,19 +1787,8 @@ void pm_runtime_put_suppliers(struct device *dev)
17911787 list_for_each_entry_rcu (link , & dev -> links .suppliers , c_node ,
17921788 device_links_read_lock_held ())
17931789 if (link -> supplier_preactivated ) {
1794- bool put ;
1795-
17961790 link -> supplier_preactivated = false;
1797-
1798- spin_lock_irq (& dev -> power .lock );
1799-
1800- put = pm_runtime_status_suspended (dev ) &&
1801- refcount_dec_not_one (& link -> rpm_active );
1802-
1803- spin_unlock_irq (& dev -> power .lock );
1804-
1805- if (put )
1806- pm_runtime_put (link -> supplier );
1791+ pm_runtime_put (link -> supplier );
18071792 }
18081793
18091794 device_links_read_unlock (idx );
@@ -1838,7 +1823,8 @@ void pm_runtime_drop_link(struct device_link *link)
18381823 return ;
18391824
18401825 pm_runtime_drop_link_count (link -> consumer );
1841- pm_runtime_release_supplier (link , true);
1826+ pm_runtime_release_supplier (link );
1827+ pm_request_idle (link -> supplier );
18421828}
18431829
18441830static bool pm_runtime_need_not_resume (struct device * dev )
0 commit comments