hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/net/can/j1939/main.c
....@@ -122,7 +122,7 @@
122122 #define J1939_CAN_ID CAN_EFF_FLAG
123123 #define J1939_CAN_MASK (CAN_EFF_FLAG | CAN_RTR_FLAG)
124124
125
-static DEFINE_SPINLOCK(j1939_netdev_lock);
125
+static DEFINE_MUTEX(j1939_netdev_lock);
126126
127127 static struct j1939_priv *j1939_priv_create(struct net_device *ndev)
128128 {
....@@ -216,7 +216,7 @@
216216 j1939_can_rx_unregister(priv);
217217 j1939_ecu_unmap_all(priv);
218218 j1939_priv_set(priv->ndev, NULL);
219
- spin_unlock(&j1939_netdev_lock);
219
+ mutex_unlock(&j1939_netdev_lock);
220220 }
221221
222222 /* get pointer to priv without increasing ref counter */
....@@ -244,9 +244,9 @@
244244 {
245245 struct j1939_priv *priv;
246246
247
- spin_lock(&j1939_netdev_lock);
247
+ mutex_lock(&j1939_netdev_lock);
248248 priv = j1939_priv_get_by_ndev_locked(ndev);
249
- spin_unlock(&j1939_netdev_lock);
249
+ mutex_unlock(&j1939_netdev_lock);
250250
251251 return priv;
252252 }
....@@ -256,14 +256,14 @@
256256 struct j1939_priv *priv, *priv_new;
257257 int ret;
258258
259
- spin_lock(&j1939_netdev_lock);
259
+ mutex_lock(&j1939_netdev_lock);
260260 priv = j1939_priv_get_by_ndev_locked(ndev);
261261 if (priv) {
262262 kref_get(&priv->rx_kref);
263
- spin_unlock(&j1939_netdev_lock);
263
+ mutex_unlock(&j1939_netdev_lock);
264264 return priv;
265265 }
266
- spin_unlock(&j1939_netdev_lock);
266
+ mutex_unlock(&j1939_netdev_lock);
267267
268268 priv = j1939_priv_create(ndev);
269269 if (!priv)
....@@ -273,29 +273,31 @@
273273 spin_lock_init(&priv->j1939_socks_lock);
274274 INIT_LIST_HEAD(&priv->j1939_socks);
275275
276
- spin_lock(&j1939_netdev_lock);
276
+ mutex_lock(&j1939_netdev_lock);
277277 priv_new = j1939_priv_get_by_ndev_locked(ndev);
278278 if (priv_new) {
279279 /* Someone was faster than us, use their priv and roll
280280 * back our's.
281281 */
282282 kref_get(&priv_new->rx_kref);
283
- spin_unlock(&j1939_netdev_lock);
283
+ mutex_unlock(&j1939_netdev_lock);
284284 dev_put(ndev);
285285 kfree(priv);
286286 return priv_new;
287287 }
288288 j1939_priv_set(ndev, priv);
289
- spin_unlock(&j1939_netdev_lock);
290289
291290 ret = j1939_can_rx_register(priv);
292291 if (ret < 0)
293292 goto out_priv_put;
294293
294
+ mutex_unlock(&j1939_netdev_lock);
295295 return priv;
296296
297297 out_priv_put:
298298 j1939_priv_set(ndev, NULL);
299
+ mutex_unlock(&j1939_netdev_lock);
300
+
299301 dev_put(ndev);
300302 kfree(priv);
301303
....@@ -304,7 +306,7 @@
304306
305307 void j1939_netdev_stop(struct j1939_priv *priv)
306308 {
307
- kref_put_lock(&priv->rx_kref, __j1939_rx_release, &j1939_netdev_lock);
309
+ kref_put_mutex(&priv->rx_kref, __j1939_rx_release, &j1939_netdev_lock);
308310 j1939_priv_put(priv);
309311 }
310312