net/mlx5: Add a no-append flow insertion mode
If no-append flag is set, we will add a new FTE, instead of appending the actions of the inserted rule when the same match already exists. While here, move the has_flow_tag boolean indicator to be a flag too. This patch doesn't change any functionality. Signed-off-by: Paul Blakey <paulb@mellanox.com> Reviewed-by: Or Gerlitz <ogerlitz@mellanmox.com> Reviewed-by: Mark Bloch <markb@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:

gecommit door
Saeed Mahameed

bovenliggende
e52c280240
commit
d5634fee24
@@ -684,9 +684,9 @@ mlx5e_tc_add_nic_flow(struct mlx5e_priv *priv,
|
||||
struct mlx5_flow_destination dest[2] = {};
|
||||
struct mlx5_flow_act flow_act = {
|
||||
.action = attr->action,
|
||||
.has_flow_tag = true,
|
||||
.flow_tag = attr->flow_tag,
|
||||
.reformat_id = 0,
|
||||
.flags = FLOW_ACT_HAS_TAG,
|
||||
};
|
||||
struct mlx5_fc *counter = NULL;
|
||||
bool table_created = false;
|
||||
|
@@ -650,7 +650,7 @@ static bool mlx5_is_fpga_egress_ipsec_rule(struct mlx5_core_dev *dev,
|
||||
(match_criteria_enable &
|
||||
~(MLX5_MATCH_OUTER_HEADERS | MLX5_MATCH_MISC_PARAMETERS)) ||
|
||||
(flow_act->action & ~(MLX5_FLOW_CONTEXT_ACTION_ENCRYPT | MLX5_FLOW_CONTEXT_ACTION_ALLOW)) ||
|
||||
flow_act->has_flow_tag)
|
||||
(flow_act->flags & FLOW_ACT_HAS_TAG))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
@@ -1428,7 +1428,7 @@ static int check_conflicting_ftes(struct fs_fte *fte, const struct mlx5_flow_act
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
if (flow_act->has_flow_tag &&
|
||||
if ((flow_act->flags & FLOW_ACT_HAS_TAG) &&
|
||||
fte->action.flow_tag != flow_act->flow_tag) {
|
||||
mlx5_core_warn(get_dev(&fte->node),
|
||||
"FTE flow tag %u already exists with different flow tag %u\n",
|
||||
@@ -1628,6 +1628,8 @@ try_add_to_existing_fg(struct mlx5_flow_table *ft,
|
||||
|
||||
search_again_locked:
|
||||
version = matched_fgs_get_version(match_head);
|
||||
if (flow_act->flags & FLOW_ACT_NO_APPEND)
|
||||
goto skip_search;
|
||||
/* Try to find a fg that already contains a matching fte */
|
||||
list_for_each_entry(iter, match_head, list) {
|
||||
struct fs_fte *fte_tmp;
|
||||
@@ -1644,6 +1646,11 @@ search_again_locked:
|
||||
return rule;
|
||||
}
|
||||
|
||||
skip_search:
|
||||
/* No group with matching fte found, or we skipped the search.
|
||||
* Try to add a new fte to any matching fg.
|
||||
*/
|
||||
|
||||
/* Check the ft version, for case that new flow group
|
||||
* was added while the fgs weren't locked
|
||||
*/
|
||||
|
Verwijs in nieuw issue
Block a user