]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
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 b780185d9dc69e2ad09c65e6a75d3cae8e022615..510ef85ef6e406b112ad1d556aa75c3e1b1935d4 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 750b21124a1ae09411e0530d01409543624a5c00..762b9730a897a0a295886a77cfa72086e0ce958b 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 386ab9a2d490f6093a317ffb8767ea0379fab9d2..2d26e16a67cdf32a48edd71f779cfd03fb8472f4 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 cd2d4c572367ecae85b988e0c112203ba2c5f6fd..b1aad14689e3051d2d80e37b19b1b9f5780e36be 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,