mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 07:33:19 +02:00
net/mlx5: fs, add HWS flow group API functions
Add API functions to create and destroy HW Steering flow groups. Each flow group consists of a Backward Compatible (BWC) HW Steering matcher which holds the flow group match criteria. Signed-off-by: Moshe Shemesh <moshe@nvidia.com> Reviewed-by: Yevgeny Kliteynik <kliteyn@nvidia.com> Reviewed-by: Mark Bloch <mbloch@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20250109160546.1733647-4-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
0f3ecf5c57
commit
4160405f6c
|
|
@ -285,7 +285,10 @@ struct mlx5_flow_group_mask {
|
|||
/* Type of children is fs_fte */
|
||||
struct mlx5_flow_group {
|
||||
struct fs_node node;
|
||||
struct mlx5_fs_dr_matcher fs_dr_matcher;
|
||||
union {
|
||||
struct mlx5_fs_dr_matcher fs_dr_matcher;
|
||||
struct mlx5_fs_hws_matcher fs_hws_matcher;
|
||||
};
|
||||
struct mlx5_flow_group_mask mask;
|
||||
u32 start_index;
|
||||
u32 max_ftes;
|
||||
|
|
|
|||
|
|
@ -153,11 +153,53 @@ static int mlx5_cmd_hws_update_root_ft(struct mlx5_flow_root_namespace *ns,
|
|||
disconnect);
|
||||
}
|
||||
|
||||
static int mlx5_cmd_hws_create_flow_group(struct mlx5_flow_root_namespace *ns,
|
||||
struct mlx5_flow_table *ft, u32 *in,
|
||||
struct mlx5_flow_group *fg)
|
||||
{
|
||||
struct mlx5hws_match_parameters mask;
|
||||
struct mlx5hws_bwc_matcher *matcher;
|
||||
u8 match_criteria_enable;
|
||||
u32 priority;
|
||||
|
||||
if (mlx5_fs_cmd_is_fw_term_table(ft))
|
||||
return mlx5_fs_cmd_get_fw_cmds()->create_flow_group(ns, ft, in, fg);
|
||||
|
||||
mask.match_buf = MLX5_ADDR_OF(create_flow_group_in, in, match_criteria);
|
||||
mask.match_sz = sizeof(fg->mask.match_criteria);
|
||||
|
||||
match_criteria_enable = MLX5_GET(create_flow_group_in, in,
|
||||
match_criteria_enable);
|
||||
priority = MLX5_GET(create_flow_group_in, in, start_flow_index);
|
||||
matcher = mlx5hws_bwc_matcher_create(ft->fs_hws_table.hws_table,
|
||||
priority, match_criteria_enable,
|
||||
&mask);
|
||||
if (!matcher) {
|
||||
mlx5_core_err(ns->dev, "Failed creating matcher\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
fg->fs_hws_matcher.matcher = matcher;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlx5_cmd_hws_destroy_flow_group(struct mlx5_flow_root_namespace *ns,
|
||||
struct mlx5_flow_table *ft,
|
||||
struct mlx5_flow_group *fg)
|
||||
{
|
||||
if (mlx5_fs_cmd_is_fw_term_table(ft))
|
||||
return mlx5_fs_cmd_get_fw_cmds()->destroy_flow_group(ns, ft, fg);
|
||||
|
||||
return mlx5hws_bwc_matcher_destroy(fg->fs_hws_matcher.matcher);
|
||||
}
|
||||
|
||||
static const struct mlx5_flow_cmds mlx5_flow_cmds_hws = {
|
||||
.create_flow_table = mlx5_cmd_hws_create_flow_table,
|
||||
.destroy_flow_table = mlx5_cmd_hws_destroy_flow_table,
|
||||
.modify_flow_table = mlx5_cmd_hws_modify_flow_table,
|
||||
.update_root_ft = mlx5_cmd_hws_update_root_ft,
|
||||
.create_flow_group = mlx5_cmd_hws_create_flow_group,
|
||||
.destroy_flow_group = mlx5_cmd_hws_destroy_flow_group,
|
||||
.create_ns = mlx5_cmd_hws_create_ns,
|
||||
.destroy_ns = mlx5_cmd_hws_destroy_ns,
|
||||
.set_peer = mlx5_cmd_hws_set_peer,
|
||||
|
|
|
|||
|
|
@ -15,6 +15,10 @@ struct mlx5_fs_hws_table {
|
|||
bool miss_ft_set;
|
||||
};
|
||||
|
||||
struct mlx5_fs_hws_matcher {
|
||||
struct mlx5hws_bwc_matcher *matcher;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MLX5_HW_STEERING
|
||||
|
||||
const struct mlx5_flow_cmds *mlx5_fs_cmd_get_hws_cmds(void);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user