forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c
....@@ -2,6 +2,7 @@
22 /* Copyright (c) 2017-2018 Mellanox Technologies. All rights reserved */
33
44 #include <linux/kernel.h>
5
+#include <linux/mutex.h>
56 #include <net/devlink.h>
67
78 #include "spectrum.h"
....@@ -210,7 +211,7 @@
210211 return err;
211212
212213 rif_count = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS);
213
- rtnl_lock();
214
+ mutex_lock(&mlxsw_sp->router->lock);
214215 i = 0;
215216 start_again:
216217 err = devlink_dpipe_entry_ctx_prepare(dump_ctx);
....@@ -220,7 +221,7 @@
220221 for (; i < rif_count; i++) {
221222 struct mlxsw_sp_rif *rif = mlxsw_sp_rif_by_index(mlxsw_sp, i);
222223
223
- if (!rif)
224
+ if (!rif || !mlxsw_sp_rif_dev(rif))
224225 continue;
225226 err = mlxsw_sp_erif_entry_get(mlxsw_sp, &entry, rif,
226227 counters_enabled);
....@@ -241,14 +242,14 @@
241242 devlink_dpipe_entry_ctx_close(dump_ctx);
242243 if (i != rif_count)
243244 goto start_again;
244
- rtnl_unlock();
245
+ mutex_unlock(&mlxsw_sp->router->lock);
245246
246247 devlink_dpipe_entry_clear(&entry);
247248 return 0;
248249 err_entry_append:
249250 err_entry_get:
250251 err_ctx_prepare:
251
- rtnl_unlock();
252
+ mutex_unlock(&mlxsw_sp->router->lock);
252253 devlink_dpipe_entry_clear(&entry);
253254 return err;
254255 }
....@@ -258,7 +259,7 @@
258259 struct mlxsw_sp *mlxsw_sp = priv;
259260 int i;
260261
261
- rtnl_lock();
262
+ mutex_lock(&mlxsw_sp->router->lock);
262263 for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {
263264 struct mlxsw_sp_rif *rif = mlxsw_sp_rif_by_index(mlxsw_sp, i);
264265
....@@ -271,7 +272,7 @@
271272 mlxsw_sp_rif_counter_free(mlxsw_sp, rif,
272273 MLXSW_SP_RIF_COUNTER_EGRESS);
273274 }
274
- rtnl_unlock();
275
+ mutex_unlock(&mlxsw_sp->router->lock);
275276 return 0;
276277 }
277278
....@@ -546,7 +547,7 @@
546547 int i, j;
547548 int err;
548549
549
- rtnl_lock();
550
+ mutex_lock(&mlxsw_sp->router->lock);
550551 i = 0;
551552 rif_count = MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS);
552553 start_again:
....@@ -602,12 +603,12 @@
602603 if (i != rif_count)
603604 goto start_again;
604605
605
- rtnl_unlock();
606
+ mutex_unlock(&mlxsw_sp->router->lock);
606607 return 0;
607608
608609 err_ctx_prepare:
609610 err_entry_append:
610
- rtnl_unlock();
611
+ mutex_unlock(&mlxsw_sp->router->lock);
611612 return err;
612613 }
613614
....@@ -662,7 +663,7 @@
662663 {
663664 int i;
664665
665
- rtnl_lock();
666
+ mutex_lock(&mlxsw_sp->router->lock);
666667 for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {
667668 struct mlxsw_sp_rif *rif = mlxsw_sp_rif_by_index(mlxsw_sp, i);
668669 struct mlxsw_sp_neigh_entry *neigh_entry;
....@@ -684,7 +685,7 @@
684685 enable);
685686 }
686687 }
687
- rtnl_unlock();
688
+ mutex_unlock(&mlxsw_sp->router->lock);
688689 }
689690
690691 static int mlxsw_sp_dpipe_table_host4_counters_update(void *priv, bool enable)
....@@ -701,7 +702,7 @@
701702 u64 size = 0;
702703 int i;
703704
704
- rtnl_lock();
705
+ mutex_lock(&mlxsw_sp->router->lock);
705706 for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {
706707 struct mlxsw_sp_rif *rif = mlxsw_sp_rif_by_index(mlxsw_sp, i);
707708 struct mlxsw_sp_neigh_entry *neigh_entry;
....@@ -721,7 +722,7 @@
721722 size++;
722723 }
723724 }
724
- rtnl_unlock();
725
+ mutex_unlock(&mlxsw_sp->router->lock);
725726
726727 return size;
727728 }
....@@ -1093,7 +1094,7 @@
10931094 int j;
10941095 int err;
10951096
1096
- rtnl_lock();
1097
+ mutex_lock(&mlxsw_sp->router->lock);
10971098 nh_count_max = mlxsw_sp_dpipe_table_adj_size(mlxsw_sp);
10981099 start_again:
10991100 err = devlink_dpipe_entry_ctx_prepare(dump_ctx);
....@@ -1130,13 +1131,13 @@
11301131 devlink_dpipe_entry_ctx_close(dump_ctx);
11311132 if (nh_count != nh_count_max)
11321133 goto start_again;
1133
- rtnl_unlock();
1134
+ mutex_unlock(&mlxsw_sp->router->lock);
11341135
11351136 return 0;
11361137
11371138 err_ctx_prepare:
11381139 err_entry_append:
1139
- rtnl_unlock();
1140
+ mutex_unlock(&mlxsw_sp->router->lock);
11401141 return err;
11411142 }
11421143
....@@ -1206,9 +1207,9 @@
12061207 struct mlxsw_sp *mlxsw_sp = priv;
12071208 u64 size;
12081209
1209
- rtnl_lock();
1210
+ mutex_lock(&mlxsw_sp->router->lock);
12101211 size = mlxsw_sp_dpipe_table_adj_size(mlxsw_sp);
1211
- rtnl_unlock();
1212
+ mutex_unlock(&mlxsw_sp->router->lock);
12121213
12131214 return size;
12141215 }