net/mlx5: E-switch, Destroy legacy fdb table when needed
authorChris Mi <cmi@nvidia.com>
Thu, 17 Nov 2022 07:48:13 +0000 (09:48 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 24 Nov 2022 08:03:20 +0000 (00:03 -0800)
The cited commit removes eswitch mode none. But when disabling
sriov in legacy mode or changing from switchdev to legacy mode
without sriov enabled, the legacy fdb table is not destroyed.

It is not the right behavior. Destroy legacy fdb table in above
two caes.

Fixes: f019679ea5f2 ("net/mlx5: E-switch, Remove dependency between sriov and eswitch mode")
Signed-off-by: Chris Mi <cmi@nvidia.com>
Reviewed-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Eli Cohen <elic@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Reviewed-by: Vlad Buslov <vladbu@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c

index 2169486c4bfb3812d19330984e37c8abc545faca..374e3fbdc2cf243d8ee7b1e87fe6aa65b764d976 100644 (file)
@@ -1362,6 +1362,9 @@ void mlx5_eswitch_disable_sriov(struct mlx5_eswitch *esw, bool clear_vf)
 
                devl_rate_nodes_destroy(devlink);
        }
+       /* Destroy legacy fdb when disabling sriov in legacy mode. */
+       if (esw->mode == MLX5_ESWITCH_LEGACY)
+               mlx5_eswitch_disable_locked(esw);
 
        esw->esw_funcs.num_vfs = 0;
 
index 3fda75fe168c5b30823402b854950901739186fc..8c6c9bcb3dc3ff61befdb12d2007055e34a5115c 100644 (file)
@@ -3387,6 +3387,13 @@ static int esw_offloads_stop(struct mlx5_eswitch *esw,
        int err;
 
        esw->mode = MLX5_ESWITCH_LEGACY;
+
+       /* If changing from switchdev to legacy mode without sriov enabled,
+        * no need to create legacy fdb.
+        */
+       if (!mlx5_sriov_is_enabled(esw->dev))
+               return 0;
+
        err = mlx5_eswitch_enable_locked(esw, MLX5_ESWITCH_IGNORE_NUM_VFS);
        if (err)
                NL_SET_ERR_MSG_MOD(extack, "Failed setting eswitch to legacy");