Blob Blame History Raw
From: Roi Dayan <roid@nvidia.com>
Date: Wed, 11 Aug 2021 14:19:56 +0300
Subject: net/mlx5e: Add post_parse() op to tc action infrastructure
Patch-mainline: v5.17-rc1
Git-commit: dd5ab6d115657a7f312893fdd40b3d187022b11d
References: jsc#PED-1549

The post_parse() op should be called after the parse op was called
for all actions. It could be an action state is dependent on other
actions. In the new op an action can fail the parse if the state
is not valid anymore.

Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
---
 drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.h |    4 ++++
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c         |   11 +++++++++++
 2 files changed, 15 insertions(+)

--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.h
@@ -36,6 +36,10 @@ struct mlx5e_tc_act {
 			    const struct flow_action_entry *act,
 			    struct mlx5e_priv *priv,
 			    struct mlx5_flow_attr *attr);
+
+	int (*post_parse)(struct mlx5e_tc_act_parse_state *parse_state,
+			  struct mlx5e_priv *priv,
+			  struct mlx5_flow_attr *attr);
 };
 
 extern struct mlx5e_tc_act mlx5e_tc_act_drop;
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -3165,6 +3165,17 @@ parse_tc_actions(struct mlx5e_tc_act_par
 			return err;
 	}
 
+	flow_action_for_each(i, act, flow_action) {
+		tc_act = mlx5e_tc_act_get(act->id, ns_type);
+		if (!tc_act || !tc_act->post_parse ||
+		    !tc_act->can_offload(parse_state, act, i))
+			continue;
+
+		err = tc_act->post_parse(parse_state, priv, attr);
+		if (err)
+			return err;
+	}
+
 	return 0;
 }