@@ -101,6 +101,19 @@ int fwnode_link_add(struct fwnode_handle *con, struct fwnode_handle *sup)
101
101
return ret ;
102
102
}
103
103
104
+ /**
105
+ * __fwnode_link_del - Delete a link between two fwnode_handles.
106
+ * @link: the fwnode_link to be deleted
107
+ *
108
+ * The fwnode_link_lock needs to be held when this function is called.
109
+ */
110
+ static void __fwnode_link_del (struct fwnode_link * link )
111
+ {
112
+ list_del (& link -> s_hook );
113
+ list_del (& link -> c_hook );
114
+ kfree (link );
115
+ }
116
+
104
117
/**
105
118
* fwnode_links_purge_suppliers - Delete all supplier links of fwnode_handle.
106
119
* @fwnode: fwnode whose supplier links need to be deleted
@@ -112,11 +125,8 @@ static void fwnode_links_purge_suppliers(struct fwnode_handle *fwnode)
112
125
struct fwnode_link * link , * tmp ;
113
126
114
127
mutex_lock (& fwnode_link_lock );
115
- list_for_each_entry_safe (link , tmp , & fwnode -> suppliers , c_hook ) {
116
- list_del (& link -> s_hook );
117
- list_del (& link -> c_hook );
118
- kfree (link );
119
- }
128
+ list_for_each_entry_safe (link , tmp , & fwnode -> suppliers , c_hook )
129
+ __fwnode_link_del (link );
120
130
mutex_unlock (& fwnode_link_lock );
121
131
}
122
132
@@ -131,11 +141,8 @@ static void fwnode_links_purge_consumers(struct fwnode_handle *fwnode)
131
141
struct fwnode_link * link , * tmp ;
132
142
133
143
mutex_lock (& fwnode_link_lock );
134
- list_for_each_entry_safe (link , tmp , & fwnode -> consumers , s_hook ) {
135
- list_del (& link -> s_hook );
136
- list_del (& link -> c_hook );
137
- kfree (link );
138
- }
144
+ list_for_each_entry_safe (link , tmp , & fwnode -> consumers , s_hook )
145
+ __fwnode_link_del (link );
139
146
mutex_unlock (& fwnode_link_lock );
140
147
}
141
148
@@ -1887,9 +1894,7 @@ static void __fw_devlink_link_to_consumers(struct device *dev)
1887
1894
if (!own_link || ret == - EAGAIN )
1888
1895
continue ;
1889
1896
1890
- list_del (& link -> s_hook );
1891
- list_del (& link -> c_hook );
1892
- kfree (link );
1897
+ __fwnode_link_del (link );
1893
1898
}
1894
1899
}
1895
1900
@@ -1941,9 +1946,7 @@ static void __fw_devlink_link_to_suppliers(struct device *dev,
1941
1946
if (!own_link || ret == - EAGAIN )
1942
1947
continue ;
1943
1948
1944
- list_del (& link -> s_hook );
1945
- list_del (& link -> c_hook );
1946
- kfree (link );
1949
+ __fwnode_link_del (link );
1947
1950
1948
1951
/* If no device link was created, nothing more to do. */
1949
1952
if (ret )
0 commit comments