From patchwork Wed Jun 7 13:02:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 128306 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9129242C4D; Wed, 7 Jun 2023 15:05:25 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8FE0C42DAA; Wed, 7 Jun 2023 15:03:08 +0200 (CEST) Received: from agw.arknetworks.am (agw.arknetworks.am [79.141.165.80]) by mails.dpdk.org (Postfix) with ESMTP id 90444410F2 for ; Wed, 7 Jun 2023 15:02:56 +0200 (CEST) Received: from localhost.localdomain (unknown [78.109.69.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by agw.arknetworks.am (Postfix) with ESMTPSA id 1C12DE12C3; Wed, 7 Jun 2023 17:02:56 +0400 (+04) From: Ivan Malov To: dev@dpdk.org Cc: Andrew Rybchenko , Ferruh Yigit , Andy Moreton Subject: [PATCH v4 17/34] net/sfc: move MAE flow parsing method to MAE-specific source Date: Wed, 7 Jun 2023 17:02:28 +0400 Message-Id: <20230607130245.8048-18-ivan.malov@arknetworks.am> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230607130245.8048-1-ivan.malov@arknetworks.am> References: <20230601195538.8265-1-ivan.malov@arknetworks.am> <20230607130245.8048-1-ivan.malov@arknetworks.am> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Doing so will facilitate easier code restructure in the next patches required to rework flow housekeeping and indirection. Signed-off-by: Ivan Malov Reviewed-by: Andy Moreton --- 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;