From patchwork Wed Jun 7 13:02:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 128301 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 61E7942C4D; Wed, 7 Jun 2023 15:04:41 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DD5E742D63; Wed, 7 Jun 2023 15:03:01 +0200 (CEST) Received: from agw.arknetworks.am (agw.arknetworks.am [79.141.165.80]) by mails.dpdk.org (Postfix) with ESMTP id BDEBD42D3B for ; Wed, 7 Jun 2023 15:02:53 +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 489B5E12D1; Wed, 7 Jun 2023 17:02:53 +0400 (+04) From: Ivan Malov To: dev@dpdk.org Cc: Andrew Rybchenko , Ferruh Yigit , Andy Moreton Subject: [PATCH v4 12/34] net/sfc: make entry pointer optional in MAE resource helpers Date: Wed, 7 Jun 2023 17:02:23 +0400 Message-Id: <20230607130245.8048-13-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 Keep NULL object check in one place rather than repeat it in all of the callers. That should make the code easier on eyes. Future code for additional object types will follow this way. Signed-off-by: Ivan Malov Reviewed-by: Andy Moreton --- drivers/net/sfc/sfc_mae.c | 78 ++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 26 deletions(-) diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c index e5e9257998..1928d58779 100644 --- a/drivers/net/sfc/sfc_mae.c +++ b/drivers/net/sfc/sfc_mae.c @@ -402,6 +402,9 @@ sfc_mae_outer_rule_del(struct sfc_adapter *sa, { struct sfc_mae *mae = &sa->mae; + if (rule == NULL) + return; + SFC_ASSERT(sfc_adapter_is_locked(sa)); SFC_ASSERT(rule->refcnt != 0); @@ -429,11 +432,16 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa, struct sfc_mae_outer_rule *rule, efx_mae_match_spec_t *match_spec_action) { - struct sfc_mae_fw_rsrc *fw_rsrc = &rule->fw_rsrc; + struct sfc_mae_fw_rsrc *fw_rsrc; int rc; + if (rule == NULL) + return 0; + SFC_ASSERT(sfc_adapter_is_locked(sa)); + fw_rsrc = &rule->fw_rsrc; + if (fw_rsrc->refcnt == 0) { SFC_ASSERT(fw_rsrc->rule_id.id == EFX_MAE_RSRC_ID_INVALID); SFC_ASSERT(rule->match_spec != NULL); @@ -480,11 +488,16 @@ static void sfc_mae_outer_rule_disable(struct sfc_adapter *sa, struct sfc_mae_outer_rule *rule) { - struct sfc_mae_fw_rsrc *fw_rsrc = &rule->fw_rsrc; + struct sfc_mae_fw_rsrc *fw_rsrc; int rc; + if (rule == NULL) + return; + SFC_ASSERT(sfc_adapter_is_locked(sa)); + fw_rsrc = &rule->fw_rsrc; + if (fw_rsrc->rule_id.id == EFX_MAE_RSRC_ID_INVALID || fw_rsrc->refcnt == 0) { sfc_err(sa, "failed to disable outer_rule=%p: already disabled; OR_ID=0x%08x, refcnt=%u", @@ -1057,6 +1070,9 @@ sfc_mae_action_set_del(struct sfc_adapter *sa, { struct sfc_mae *mae = &sa->mae; + if (action_set == NULL) + return; + SFC_ASSERT(sfc_adapter_is_locked(sa)); SFC_ASSERT(action_set->refcnt != 0); @@ -1092,15 +1108,24 @@ static int sfc_mae_action_set_enable(struct sfc_adapter *sa, struct sfc_mae_action_set *action_set) { - struct sfc_mae_encap_header *encap_header = action_set->encap_header; - struct sfc_mae_mac_addr *dst_mac_addr = action_set->dst_mac_addr; - struct sfc_mae_mac_addr *src_mac_addr = action_set->src_mac_addr; - struct sfc_mae_counter_id *counters = action_set->counters; - struct sfc_mae_fw_rsrc *fw_rsrc = &action_set->fw_rsrc; + struct sfc_mae_encap_header *encap_header; + struct sfc_mae_mac_addr *dst_mac_addr; + struct sfc_mae_mac_addr *src_mac_addr; + struct sfc_mae_counter_id *counters; + struct sfc_mae_fw_rsrc *fw_rsrc; int rc; + if (action_set == NULL) + return 0; + SFC_ASSERT(sfc_adapter_is_locked(sa)); + encap_header = action_set->encap_header; + dst_mac_addr = action_set->dst_mac_addr; + src_mac_addr = action_set->src_mac_addr; + counters = action_set->counters; + fw_rsrc = &action_set->fw_rsrc; + if (fw_rsrc->refcnt == 0) { SFC_ASSERT(fw_rsrc->aset_id.id == EFX_MAE_RSRC_ID_INVALID); SFC_ASSERT(action_set->spec != NULL); @@ -1167,11 +1192,16 @@ static void sfc_mae_action_set_disable(struct sfc_adapter *sa, struct sfc_mae_action_set *action_set) { - struct sfc_mae_fw_rsrc *fw_rsrc = &action_set->fw_rsrc; + struct sfc_mae_fw_rsrc *fw_rsrc; int rc; + if (action_set == NULL) + return; + SFC_ASSERT(sfc_adapter_is_locked(sa)); + fw_rsrc = &action_set->fw_rsrc; + if (fw_rsrc->aset_id.id == EFX_MAE_RSRC_ID_INVALID || fw_rsrc->refcnt == 0) { sfc_err(sa, "failed to disable action_set=%p: already disabled; AS_ID=0x%08x, refcnt=%u", @@ -1226,11 +1256,8 @@ sfc_mae_flow_cleanup(struct sfc_adapter *sa, SFC_ASSERT(spec_mae->rule_id.id == EFX_MAE_RSRC_ID_INVALID); - if (spec_mae->outer_rule != NULL) - sfc_mae_outer_rule_del(sa, spec_mae->outer_rule); - - if (spec_mae->action_set != NULL) - sfc_mae_action_set_del(sa, spec_mae->action_set); + sfc_mae_outer_rule_del(sa, spec_mae->outer_rule); + sfc_mae_action_set_del(sa, spec_mae->action_set); if (spec_mae->match_spec != NULL) efx_mae_match_spec_fini(sa->nic, spec_mae->match_spec); @@ -2575,9 +2602,7 @@ sfc_mae_rule_process_outer(struct sfc_adapter *sa, rc = efx_mae_match_spec_outer_rule_id_set(ctx->match_spec_action, &invalid_rule_id); if (rc != 0) { - if (*rulep != NULL) - sfc_mae_outer_rule_del(sa, *rulep); - + sfc_mae_outer_rule_del(sa, *rulep); *rulep = NULL; return rte_flow_error_set(error, rc, @@ -3979,10 +4004,15 @@ static int sfc_mae_outer_rule_class_verify(struct sfc_adapter *sa, struct sfc_mae_outer_rule *rule) { - struct sfc_mae_fw_rsrc *fw_rsrc = &rule->fw_rsrc; struct sfc_mae_outer_rule *entry; + struct sfc_mae_fw_rsrc *fw_rsrc; struct sfc_mae *mae = &sa->mae; + if (rule == NULL) + return 0; + + fw_rsrc = &rule->fw_rsrc; + if (fw_rsrc->rule_id.id != EFX_MAE_RSRC_ID_INVALID) { /* An active rule is reused. It's class is wittingly valid. */ return 0; @@ -4069,11 +4099,9 @@ sfc_mae_flow_verify(struct sfc_adapter *sa, if (sa->state != SFC_ETHDEV_STARTED) return EAGAIN; - if (outer_rule != NULL) { - rc = sfc_mae_outer_rule_class_verify(sa, outer_rule); - if (rc != 0) - return rc; - } + rc = sfc_mae_outer_rule_class_verify(sa, outer_rule); + if (rc != 0) + return rc; return sfc_mae_action_rule_class_verify(sa, spec_mae); } @@ -4139,8 +4167,7 @@ sfc_mae_flow_insert(struct sfc_adapter *sa, sfc_mae_action_set_disable(sa, action_set); fail_action_set_enable: - if (outer_rule != NULL) - sfc_mae_outer_rule_disable(sa, outer_rule); + sfc_mae_outer_rule_disable(sa, outer_rule); fail_outer_rule_enable: return rc; @@ -4175,8 +4202,7 @@ sfc_mae_flow_remove(struct sfc_adapter *sa, sfc_mae_action_set_disable(sa, action_set); skip_action_rule: - if (outer_rule != NULL) - sfc_mae_outer_rule_disable(sa, outer_rule); + sfc_mae_outer_rule_disable(sa, outer_rule); return 0; }