net/mlx5: E-switch, Introduce flag to indicate if vport acl namespace is created
authorChris Mi <cmi@nvidia.com>
Thu, 10 Feb 2022 07:22:04 +0000 (09:22 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Sat, 2 Jul 2022 18:58:25 +0000 (11:58 -0700)
Eswitch vport acl namespace is needed when loading vfs. There is
no need to free and reallocate it when switching eswitch mode.
Introduce flag to indicate if it is created or not. When needed,
create it. Only free it when the driver is unloaded or in bare
metal mode.

Signed-off-by: Chris Mi <cmi@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Reviewed-by: Roi Dayan <roid@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.h

index 3e662e389be440aea2bd440a29154902510d07ef..823bfcff7846d4bd64ca386736593a05f12a3e85 100644 (file)
@@ -1186,6 +1186,9 @@ static int mlx5_esw_acls_ns_init(struct mlx5_eswitch *esw)
        int total_vports;
        int err;
 
+       if (esw->flags & MLX5_ESWITCH_VPORT_ACL_NS_CREATED)
+               return 0;
+
        total_vports = mlx5_eswitch_get_total_vports(dev);
 
        if (MLX5_CAP_ESW_EGRESS_ACL(dev, ft_support)) {
@@ -1203,6 +1206,7 @@ static int mlx5_esw_acls_ns_init(struct mlx5_eswitch *esw)
        } else {
                esw_warn(dev, "ingress ACL is not supported by FW\n");
        }
+       esw->flags |= MLX5_ESWITCH_VPORT_ACL_NS_CREATED;
        return 0;
 
 err:
@@ -1215,6 +1219,7 @@ static void mlx5_esw_acls_ns_cleanup(struct mlx5_eswitch *esw)
 {
        struct mlx5_core_dev *dev = esw->dev;
 
+       esw->flags &= ~MLX5_ESWITCH_VPORT_ACL_NS_CREATED;
        if (MLX5_CAP_ESW_INGRESS_ACL(dev, ft_support))
                mlx5_fs_ingress_acls_cleanup(dev);
        if (MLX5_CAP_ESW_EGRESS_ACL(dev, ft_support))
index 2754a732914de12334452590af1d47d222ff9895..a08f5315d768ff12c2b19fb172ad0900a021f3eb 100644 (file)
@@ -282,6 +282,7 @@ struct mlx5_esw_functions {
 enum {
        MLX5_ESWITCH_VPORT_MATCH_METADATA = BIT(0),
        MLX5_ESWITCH_REG_C1_LOOPBACK_ENABLED = BIT(1),
+       MLX5_ESWITCH_VPORT_ACL_NS_CREATED = BIT(2),
 };
 
 struct mlx5_esw_bridge_offloads;