aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlx5/core/lib
diff options
context:
space:
mode:
authorMaor Gottlieb <maorg@nvidia.com>2021-07-18 15:53:53 +0300
committerSaeed Mahameed <saeedm@nvidia.com>2021-08-02 19:26:27 -0700
commitf4b45940e9b9e0dc5f602e86e93c785547d226d8 (patch)
tree64e014e4a54eae23dc91cc4ec30857a7f9f3fa61 /drivers/net/ethernet/mellanox/mlx5/core/lib
parentnet/mlx5: Move TTC logic to fs_ttc (diff)
downloadlinux-dev-f4b45940e9b9e0dc5f602e86e93c785547d226d8.tar.xz
linux-dev-f4b45940e9b9e0dc5f602e86e93c785547d226d8.zip
net/mlx5: Embed mlx5_ttc_table
mlx5_ttc_table struct shouldn't be exposed to the users so this patch make it internal to ttc. In addition add a getter function to get the TTC flow table for users that need to add a rule which points on it. Signed-off-by: Maor Gottlieb <maorg@nvidia.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/lib')
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c58
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.h21
2 files changed, 45 insertions, 34 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c
index 4b54b4127d33..749d17c0057d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.c
@@ -25,6 +25,20 @@
MLX5_INNER_TTC_GROUP2_SIZE +\
MLX5_INNER_TTC_GROUP3_SIZE)
+/* L3/L4 traffic type classifier */
+struct mlx5_ttc_table {
+ int num_groups;
+ struct mlx5_flow_table *t;
+ struct mlx5_flow_group **g;
+ struct mlx5_ttc_rule rules[MLX5_NUM_TT];
+ struct mlx5_flow_handle *tunnel_rules[MLX5_NUM_TUNNEL_TT];
+};
+
+struct mlx5_flow_table *mlx5_get_ttc_flow_table(struct mlx5_ttc_table *ttc)
+{
+ return ttc->t;
+}
+
static void mlx5_cleanup_ttc_rules(struct mlx5_ttc_table *ttc)
{
int i;
@@ -473,19 +487,23 @@ err:
return err;
}
-int mlx5_create_inner_ttc_table(struct mlx5_core_dev *dev,
- struct ttc_params *params,
- struct mlx5_ttc_table *ttc)
+struct mlx5_ttc_table *mlx5_create_inner_ttc_table(struct mlx5_core_dev *dev,
+ struct ttc_params *params)
{
+ struct mlx5_ttc_table *ttc;
int err;
+ ttc = kvzalloc(sizeof(*ttc), GFP_KERNEL);
+ if (!ttc)
+ return ERR_PTR(-ENOMEM);
+
WARN_ON_ONCE(params->ft_attr.max_fte);
params->ft_attr.max_fte = MLX5_INNER_TTC_TABLE_SIZE;
ttc->t = mlx5_create_flow_table(params->ns, &params->ft_attr);
if (IS_ERR(ttc->t)) {
err = PTR_ERR(ttc->t);
- ttc->t = NULL;
- return err;
+ kvfree(ttc);
+ return ERR_PTR(err);
}
err = mlx5_create_inner_ttc_table_groups(ttc);
@@ -496,11 +514,11 @@ int mlx5_create_inner_ttc_table(struct mlx5_core_dev *dev,
if (err)
goto destroy_ft;
- return 0;
+ return ttc;
destroy_ft:
mlx5_destroy_ttc_table(ttc);
- return err;
+ return ERR_PTR(err);
}
void mlx5_destroy_ttc_table(struct mlx5_ttc_table *ttc)
@@ -514,32 +532,31 @@ void mlx5_destroy_ttc_table(struct mlx5_ttc_table *ttc)
ttc->g[i] = NULL;
}
- ttc->num_groups = 0;
kfree(ttc->g);
mlx5_destroy_flow_table(ttc->t);
- ttc->t = NULL;
+ kvfree(ttc);
}
-void mlx5_destroy_inner_ttc_table(struct mlx5_ttc_table *ttc)
-{
- mlx5_destroy_ttc_table(ttc);
-}
-
-int mlx5_create_ttc_table(struct mlx5_core_dev *dev, struct ttc_params *params,
- struct mlx5_ttc_table *ttc)
+struct mlx5_ttc_table *mlx5_create_ttc_table(struct mlx5_core_dev *dev,
+ struct ttc_params *params)
{
bool match_ipv_outer =
MLX5_CAP_FLOWTABLE_NIC_RX(dev,
ft_field_support.outer_ip_version);
+ struct mlx5_ttc_table *ttc;
int err;
+ ttc = kvzalloc(sizeof(*ttc), GFP_KERNEL);
+ if (!ttc)
+ return ERR_PTR(-ENOMEM);
+
WARN_ON_ONCE(params->ft_attr.max_fte);
params->ft_attr.max_fte = MLX5_TTC_TABLE_SIZE;
ttc->t = mlx5_create_flow_table(params->ns, &params->ft_attr);
if (IS_ERR(ttc->t)) {
err = PTR_ERR(ttc->t);
- ttc->t = NULL;
- return err;
+ kvfree(ttc);
+ return ERR_PTR(err);
}
err = mlx5_create_ttc_table_groups(ttc, match_ipv_outer);
@@ -550,10 +567,11 @@ int mlx5_create_ttc_table(struct mlx5_core_dev *dev, struct ttc_params *params,
if (err)
goto destroy_ft;
- return 0;
+ return ttc;
+
destroy_ft:
mlx5_destroy_ttc_table(ttc);
- return err;
+ return ERR_PTR(err);
}
int mlx5_ttc_fwd_dest(struct mlx5_ttc_table *ttc, enum mlx5_traffic_types type,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.h b/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.h
index 1010e00c10bd..ce95be8f8382 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/fs_ttc.h
@@ -37,14 +37,7 @@ struct mlx5_ttc_rule {
struct mlx5_flow_destination default_dest;
};
-/* L3/L4 traffic type classifier */
-struct mlx5_ttc_table {
- int num_groups;
- struct mlx5_flow_table *t;
- struct mlx5_flow_group **g;
- struct mlx5_ttc_rule rules[MLX5_NUM_TT];
- struct mlx5_flow_handle *tunnel_rules[MLX5_NUM_TUNNEL_TT];
-};
+struct mlx5_ttc_table;
struct ttc_params {
struct mlx5_flow_namespace *ns;
@@ -54,14 +47,14 @@ struct ttc_params {
struct mlx5_flow_destination tunnel_dests[MLX5_NUM_TUNNEL_TT];
};
-int mlx5_create_ttc_table(struct mlx5_core_dev *dev, struct ttc_params *params,
- struct mlx5_ttc_table *ttc);
+struct mlx5_flow_table *mlx5_get_ttc_flow_table(struct mlx5_ttc_table *ttc);
+
+struct mlx5_ttc_table *mlx5_create_ttc_table(struct mlx5_core_dev *dev,
+ struct ttc_params *params);
void mlx5_destroy_ttc_table(struct mlx5_ttc_table *ttc);
-int mlx5_create_inner_ttc_table(struct mlx5_core_dev *dev,
- struct ttc_params *params,
- struct mlx5_ttc_table *ttc);
-void mlx5_destroy_inner_ttc_table(struct mlx5_ttc_table *ttc);
+struct mlx5_ttc_table *mlx5_create_inner_ttc_table(struct mlx5_core_dev *dev,
+ struct ttc_params *params);
int mlx5_ttc_fwd_dest(struct mlx5_ttc_table *ttc, enum mlx5_traffic_types type,
struct mlx5_flow_destination *new_dest);