net/mlx5: Separate FDB namespace
authorMaor Gottlieb <maorg@nvidia.com>
Wed, 1 Dec 2021 19:36:18 +0000 (11:36 -0800)
committerSaeed Mahameed <saeedm@nvidia.com>
Tue, 14 Dec 2021 00:02:59 +0000 (16:02 -0800)
This patch doesn't add an additional namespaces, but just separates the
naming to be used by each FDB user, bypass and kernel.
Downstream patches will actually split this up and allow to have more
than single priority for the bypass users.

Signed-off-by: Maor Gottlieb <maorg@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Acked-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/infiniband/hw/mlx5/fs.c
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
include/linux/mlx5/fs.h

index b780185..510ef85 100644 (file)
@@ -1508,7 +1508,7 @@ _get_flow_table(struct mlx5_ib_dev *dev,
                    !esw_encap)
                        flags |= MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT;
                break;
-       case MLX5_FLOW_NAMESPACE_FDB:
+       case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
                max_table_size = BIT(
                        MLX5_CAP_ESW_FLOWTABLE_FDB(dev->mdev, log_max_ft_size));
                if (MLX5_CAP_ESW_FLOWTABLE_FDB(dev->mdev, decap) && esw_encap)
@@ -1546,7 +1546,7 @@ _get_flow_table(struct mlx5_ib_dev *dev,
        case MLX5_FLOW_NAMESPACE_EGRESS:
                prio = &dev->flow_db->egress_prios[priority];
                break;
-       case MLX5_FLOW_NAMESPACE_FDB:
+       case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
                prio = &dev->flow_db->fdb;
                break;
        case MLX5_FLOW_NAMESPACE_RDMA_RX:
@@ -1937,7 +1937,7 @@ mlx5_ib_ft_type_to_namespace(enum mlx5_ib_uapi_flow_table_type table_type,
                *namespace = MLX5_FLOW_NAMESPACE_EGRESS;
                break;
        case MLX5_IB_UAPI_FLOW_TABLE_TYPE_FDB:
-               *namespace = MLX5_FLOW_NAMESPACE_FDB;
+               *namespace = MLX5_FLOW_NAMESPACE_FDB_BYPASS;
                break;
        case MLX5_IB_UAPI_FLOW_TABLE_TYPE_RDMA_RX:
                *namespace = MLX5_FLOW_NAMESPACE_RDMA_RX;
@@ -2029,8 +2029,8 @@ static int get_dests(struct uverbs_attr_bundle *attrs,
        }
 
        /* Allow only DEVX object, drop as dest for FDB */
-       if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_FDB && !(dest_devx ||
-            (*flags & MLX5_IB_ATTR_CREATE_FLOW_FLAGS_DROP)))
+       if (fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_FDB_BYPASS &&
+           !(dest_devx || (*flags & MLX5_IB_ATTR_CREATE_FLOW_FLAGS_DROP)))
                return -EINVAL;
 
        /* Allow only DEVX object or QP as dest when inserting to RDMA_RX */
@@ -2050,7 +2050,7 @@ static int get_dests(struct uverbs_attr_bundle *attrs,
                if (!is_flow_dest(devx_obj, dest_id, dest_type))
                        return -EINVAL;
                /* Allow only flow table as dest when inserting to FDB or RDMA_RX */
-               if ((fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_FDB ||
+               if ((fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_FDB_BYPASS ||
                     fs_matcher->ns_type == MLX5_FLOW_NAMESPACE_RDMA_RX) &&
                    *dest_type != MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE)
                        return -EINVAL;
@@ -2320,7 +2320,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_FLOW_MATCHER_CREATE)(
        if (err)
                goto end;
 
-       if (obj->ns_type == MLX5_FLOW_NAMESPACE_FDB &&
+       if (obj->ns_type == MLX5_FLOW_NAMESPACE_FDB_BYPASS &&
            mlx5_eswitch_mode(dev->mdev) != MLX5_ESWITCH_OFFLOADS) {
                err = -EINVAL;
                goto end;
index 750b211..762b973 100644 (file)
@@ -788,7 +788,8 @@ static int mlx5_cmd_packet_reformat_alloc(struct mlx5_flow_root_namespace *ns,
        int err;
        u32 *in;
 
-       if (namespace == MLX5_FLOW_NAMESPACE_FDB)
+       if (namespace == MLX5_FLOW_NAMESPACE_FDB ||
+           namespace == MLX5_FLOW_NAMESPACE_FDB_BYPASS)
                max_encap_size = MLX5_CAP_ESW(dev, max_encap_header_size);
        else
                max_encap_size = MLX5_CAP_FLOWTABLE(dev, max_encap_header_size);
@@ -860,6 +861,7 @@ static int mlx5_cmd_modify_header_alloc(struct mlx5_flow_root_namespace *ns,
 
        switch (namespace) {
        case MLX5_FLOW_NAMESPACE_FDB:
+       case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
                max_actions = MLX5_CAP_ESW_FLOWTABLE_FDB(dev, max_modify_header_actions);
                table_type = FS_FT_FDB;
                break;
index 386ab9a..2d26e16 100644 (file)
@@ -2220,6 +2220,7 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
 
        switch (type) {
        case MLX5_FLOW_NAMESPACE_FDB:
+       case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
                if (steering->fdb_root_ns)
                        return &steering->fdb_root_ns->ns;
                return NULL;
index cd2d4c5..b1aad14 100644 (file)
@@ -73,6 +73,7 @@ enum mlx5_flow_namespace_type {
        MLX5_FLOW_NAMESPACE_KERNEL,
        MLX5_FLOW_NAMESPACE_LEFTOVERS,
        MLX5_FLOW_NAMESPACE_ANCHOR,
+       MLX5_FLOW_NAMESPACE_FDB_BYPASS,
        MLX5_FLOW_NAMESPACE_FDB,
        MLX5_FLOW_NAMESPACE_ESW_EGRESS,
        MLX5_FLOW_NAMESPACE_ESW_INGRESS,