Doing so will facilitate easier code restructure in the next
patches required to rework flow housekeeping and indirection.

Signed-off-by: Ivan Malov <ivan.ma...@arknetworks.am>
Reviewed-by: Andy Moreton <amore...@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(-)

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 51b2a22357..e2f098ea53 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -2745,7 +2745,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,
@@ -3770,7 +3770,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,
@@ -3933,6 +3933,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;
-- 
2.30.2

Reply via email to