Merge tag 'driver-core-5.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / drivers / base / power / runtime.c
index 45a8fbe6987a8497d5542959fd860b9878d54052..48616f358854a4562222877b5dd779e4d1434460 100644 (file)
@@ -287,7 +287,8 @@ static int rpm_get_suppliers(struct device *dev)
 {
        struct device_link *link;
 
-       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node) {
+       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node,
+                               device_links_read_lock_held()) {
                int retval;
 
                if (!(link->flags & DL_FLAG_PM_RUNTIME) ||
@@ -309,7 +310,8 @@ static void rpm_put_suppliers(struct device *dev)
 {
        struct device_link *link;
 
-       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node) {
+       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node,
+                               device_links_read_lock_held()) {
                if (READ_ONCE(link->status) == DL_STATE_SUPPLIER_UNBIND)
                        continue;
 
@@ -1640,7 +1642,8 @@ void pm_runtime_clean_up_links(struct device *dev)
 
        idx = device_links_read_lock();
 
-       list_for_each_entry_rcu(link, &dev->links.consumers, s_node) {
+       list_for_each_entry_rcu(link, &dev->links.consumers, s_node,
+                               device_links_read_lock_held()) {
                if (!(link->flags & DL_FLAG_MANAGED))
                        continue;
 
@@ -1662,7 +1665,8 @@ void pm_runtime_get_suppliers(struct device *dev)
 
        idx = device_links_read_lock();
 
-       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node)
+       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node,
+                               device_links_read_lock_held())
                if (link->flags & DL_FLAG_PM_RUNTIME) {
                        link->supplier_preactivated = true;
                        refcount_inc(&link->rpm_active);
@@ -1683,7 +1687,8 @@ void pm_runtime_put_suppliers(struct device *dev)
 
        idx = device_links_read_lock();
 
-       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node)
+       list_for_each_entry_rcu(link, &dev->links.suppliers, c_node,
+                               device_links_read_lock_held())
                if (link->supplier_preactivated) {
                        link->supplier_preactivated = false;
                        if (refcount_dec_not_one(&link->rpm_active))