mlxsw: spectrum_router: Expose router struct to internal users
authorIdo Schimmel <idosch@mellanox.com>
Fri, 21 Feb 2020 17:54:07 +0000 (19:54 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sun, 23 Feb 2020 05:24:51 +0000 (21:24 -0800)
The dpipe code accesses internal router data structures and acquires
RTNL to protect against their changes. Subsequent patches will remove
reliance on RTNL and introduce a dedicated lock to protect router data
structures.

Publish the router struct to internal users such as the dpipe, so that
they could acquire it instead of RTNL.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h

index 634a9a9..991095f 100644 (file)
@@ -48,39 +48,6 @@ struct mlxsw_sp_vr;
 struct mlxsw_sp_lpm_tree;
 struct mlxsw_sp_rif_ops;
 
-struct mlxsw_sp_router {
-       struct mlxsw_sp *mlxsw_sp;
-       struct mlxsw_sp_rif **rifs;
-       struct mlxsw_sp_vr *vrs;
-       struct rhashtable neigh_ht;
-       struct rhashtable nexthop_group_ht;
-       struct rhashtable nexthop_ht;
-       struct list_head nexthop_list;
-       struct {
-               /* One tree for each protocol: IPv4 and IPv6 */
-               struct mlxsw_sp_lpm_tree *proto_trees[2];
-               struct mlxsw_sp_lpm_tree *trees;
-               unsigned int tree_count;
-       } lpm;
-       struct {
-               struct delayed_work dw;
-               unsigned long interval; /* ms */
-       } neighs_update;
-       struct delayed_work nexthop_probe_dw;
-#define MLXSW_SP_UNRESOLVED_NH_PROBE_INTERVAL 5000 /* ms */
-       struct list_head nexthop_neighs_list;
-       struct list_head ipip_list;
-       bool aborted;
-       struct notifier_block fib_nb;
-       struct notifier_block netevent_nb;
-       struct notifier_block inetaddr_nb;
-       struct notifier_block inet6addr_nb;
-       const struct mlxsw_sp_rif_ops **rif_ops_arr;
-       const struct mlxsw_sp_ipip_ops **ipip_ops_arr;
-       u32 adj_discard_index;
-       bool adj_discard_index_valid;
-};
-
 struct mlxsw_sp_rif {
        struct list_head nexthop_list;
        struct list_head neigh_list;
index c9b94f4..b255472 100644 (file)
@@ -7,6 +7,39 @@
 #include "spectrum.h"
 #include "reg.h"
 
+struct mlxsw_sp_router {
+       struct mlxsw_sp *mlxsw_sp;
+       struct mlxsw_sp_rif **rifs;
+       struct mlxsw_sp_vr *vrs;
+       struct rhashtable neigh_ht;
+       struct rhashtable nexthop_group_ht;
+       struct rhashtable nexthop_ht;
+       struct list_head nexthop_list;
+       struct {
+               /* One tree for each protocol: IPv4 and IPv6 */
+               struct mlxsw_sp_lpm_tree *proto_trees[2];
+               struct mlxsw_sp_lpm_tree *trees;
+               unsigned int tree_count;
+       } lpm;
+       struct {
+               struct delayed_work dw;
+               unsigned long interval; /* ms */
+       } neighs_update;
+       struct delayed_work nexthop_probe_dw;
+#define MLXSW_SP_UNRESOLVED_NH_PROBE_INTERVAL 5000 /* ms */
+       struct list_head nexthop_neighs_list;
+       struct list_head ipip_list;
+       bool aborted;
+       struct notifier_block fib_nb;
+       struct notifier_block netevent_nb;
+       struct notifier_block inetaddr_nb;
+       struct notifier_block inet6addr_nb;
+       const struct mlxsw_sp_rif_ops **rif_ops_arr;
+       const struct mlxsw_sp_ipip_ops **ipip_ops_arr;
+       u32 adj_discard_index;
+       bool adj_discard_index_valid;
+};
+
 struct mlxsw_sp_rif_ipip_lb;
 struct mlxsw_sp_rif_ipip_lb_config {
        enum mlxsw_reg_ritr_loopback_ipip_type lb_ipipt;