[v2,17/34] net/sfc: move MAE flow parsing method to MAE-specific source

Message ID 20230604000051.7877-18-ivan.malov@arknetworks.am (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series net/sfc: support HW conntrack assistance |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Ivan Malov June 4, 2023, midnight UTC
  Doing so will facilitate easier code restructure in the next
patches required to rework flow housekeeping and indirection.

Signed-off-by: Ivan Malov <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/net/sfc/sfc_flow.c | 47 +-----------------------------
 drivers/net/sfc/sfc_mae.c  | 58 ++++++++++++++++++++++++++++++++++++--
 drivers/net/sfc/sfc_mae.h  | 14 ++++-----
 3 files changed, 63 insertions(+), 56 deletions(-)
  

Patch

diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c
index f6d1ae2a5b..6dfbbfd022 100644
--- a/drivers/net/sfc/sfc_flow.c
+++ b/drivers/net/sfc/sfc_flow.c
@@ -2395,53 +2395,8 @@  sfc_flow_parse_rte_to_mae(struct rte_eth_dev *dev,
 			  struct rte_flow_error *error)
 {
 	struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
-	struct sfc_flow_spec *spec = &flow->spec;
-	struct sfc_flow_spec_mae *spec_mae = &spec->mae;
-	int rc;
-
-	/*
-	 * If the flow is meant to be a TUNNEL rule in a FT context,
-	 * preparse its actions and save its properties in spec_mae.
-	 */
-	rc = sfc_ft_tunnel_rule_detect(sa, actions, spec_mae, error);
-	if (rc != 0)
-		goto fail;
-
-	rc = sfc_mae_rule_parse_pattern(sa, pattern, flow, error);
-	if (rc != 0)
-		goto fail;
-
-	if (spec_mae->ft_rule_type == SFC_FT_RULE_TUNNEL) {
-		/*
-		 * By design, this flow should be represented solely by the
-		 * outer rule. But the HW/FW hasn't got support for setting
-		 * Rx mark from RECIRC_ID on outer rule lookup yet. Neither
-		 * does it support outer rule counters. As a workaround, an
-		 * action rule of lower priority is used to do the job.
-		 *
-		 * So don't skip sfc_mae_rule_parse_actions() below.
-		 */
-	}
-
-	rc = sfc_mae_rule_parse_actions(sa, actions, flow, error);
-	if (rc != 0)
-		goto fail;
-
-	if (spec_mae->ft_ctx != NULL) {
-		if (spec_mae->ft_rule_type == SFC_FT_RULE_TUNNEL)
-			spec_mae->ft_ctx->tunnel_rule_is_set = B_TRUE;
 
-		++(spec_mae->ft_ctx->refcnt);
-	}
-
-	return 0;
-
-fail:
-	/* Reset these values to avoid confusing sfc_mae_flow_cleanup(). */
-	spec_mae->ft_rule_type = SFC_FT_RULE_NONE;
-	spec_mae->ft_ctx = NULL;
-
-	return rc;
+	return sfc_mae_rule_parse(sa, pattern, actions, flow, error);
 }
 
 static int
diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index e1008c2f6f..2f34ca7ad3 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -2747,7 +2747,7 @@  sfc_mae_rule_encap_parse_fini(struct sfc_adapter *sa,
 		efx_mae_match_spec_fini(sa->nic, ctx->match_spec_outer);
 }
 
-int
+static int
 sfc_mae_rule_parse_pattern(struct sfc_adapter *sa,
 			   const struct rte_flow_item pattern[],
 			   struct rte_flow *flow,
@@ -3772,7 +3772,7 @@  sfc_mae_process_encap_header(struct sfc_adapter *sa,
 	return sfc_mae_encap_header_add(sa, bounce_eh, encap_headerp);
 }
 
-int
+static int
 sfc_mae_rule_parse_actions(struct sfc_adapter *sa,
 			   const struct rte_flow_action actions[],
 			   struct rte_flow *flow,
@@ -3935,6 +3935,60 @@  sfc_mae_rule_parse_actions(struct sfc_adapter *sa,
 	return rc;
 }
 
+int
+sfc_mae_rule_parse(struct sfc_adapter *sa, const struct rte_flow_item pattern[],
+		   const struct rte_flow_action actions[],
+		   struct rte_flow *flow, struct rte_flow_error *error)
+{
+	struct sfc_flow_spec *spec = &flow->spec;
+	struct sfc_flow_spec_mae *spec_mae = &spec->mae;
+	int rc;
+
+	/*
+	 * If the flow is meant to be a TUNNEL rule in a FT context,
+	 * preparse its actions and save its properties in spec_mae.
+	 */
+	rc = sfc_ft_tunnel_rule_detect(sa, actions, spec_mae, error);
+	if (rc != 0)
+		goto fail;
+
+	rc = sfc_mae_rule_parse_pattern(sa, pattern, flow, error);
+	if (rc != 0)
+		goto fail;
+
+	if (spec_mae->ft_rule_type == SFC_FT_RULE_TUNNEL) {
+		/*
+		 * By design, this flow should be represented solely by the
+		 * outer rule. But the HW/FW hasn't got support for setting
+		 * Rx mark from RECIRC_ID on outer rule lookup yet. Neither
+		 * does it support outer rule counters. As a workaround, an
+		 * action rule of lower priority is used to do the job.
+		 *
+		 * So don't skip sfc_mae_rule_parse_actions() below.
+		 */
+	}
+
+	rc = sfc_mae_rule_parse_actions(sa, actions, flow, error);
+	if (rc != 0)
+		goto fail;
+
+	if (spec_mae->ft_ctx != NULL) {
+		if (spec_mae->ft_rule_type == SFC_FT_RULE_TUNNEL)
+			spec_mae->ft_ctx->tunnel_rule_is_set = B_TRUE;
+
+		++(spec_mae->ft_ctx->refcnt);
+	}
+
+	return 0;
+
+fail:
+	/* Reset these values to avoid confusing sfc_mae_flow_cleanup(). */
+	spec_mae->ft_rule_type = SFC_FT_RULE_NONE;
+	spec_mae->ft_ctx = NULL;
+
+	return rc;
+}
+
 static bool
 sfc_mae_rules_class_cmp(struct sfc_adapter *sa,
 			const efx_mae_match_spec_t *left,
diff --git a/drivers/net/sfc/sfc_mae.h b/drivers/net/sfc/sfc_mae.h
index f9434e1ab6..1d937c9b5b 100644
--- a/drivers/net/sfc/sfc_mae.h
+++ b/drivers/net/sfc/sfc_mae.h
@@ -345,15 +345,13 @@  struct sfc_mae_parse_ctx {
 
 int sfc_mae_attach(struct sfc_adapter *sa);
 void sfc_mae_detach(struct sfc_adapter *sa);
+
+int sfc_mae_rule_parse(struct sfc_adapter *sa,
+		       const struct rte_flow_item pattern[],
+		       const struct rte_flow_action actions[],
+		       struct rte_flow *flow, struct rte_flow_error *error);
+
 sfc_flow_cleanup_cb_t sfc_mae_flow_cleanup;
-int sfc_mae_rule_parse_pattern(struct sfc_adapter *sa,
-			       const struct rte_flow_item pattern[],
-			       struct rte_flow *flow,
-			       struct rte_flow_error *error);
-int sfc_mae_rule_parse_actions(struct sfc_adapter *sa,
-			       const struct rte_flow_action actions[],
-			       struct rte_flow *flow,
-			       struct rte_flow_error *error);
 sfc_flow_verify_cb_t sfc_mae_flow_verify;
 sfc_flow_insert_cb_t sfc_mae_flow_insert;
 sfc_flow_remove_cb_t sfc_mae_flow_remove;