From patchwork Sun Jun 4 23:25:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 128040 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 9346742C2C; Mon, 5 Jun 2023 01:26:51 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2F3B342D7C; Mon, 5 Jun 2023 01:25:41 +0200 (CEST) Received: from agw.arknetworks.am (agw.arknetworks.am [79.141.165.80]) by mails.dpdk.org (Postfix) with ESMTP id 5390C42D38 for ; Mon, 5 Jun 2023 01:25:31 +0200 (CEST) Received: from localhost.localdomain (unknown [78.109.68.201]) (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 D7B1DE002F; Mon, 5 Jun 2023 03:25:30 +0400 (+04) From: Ivan Malov To: dev@dpdk.org Cc: Andrew Rybchenko , Ferruh Yigit , Andy Moreton Subject: [PATCH v3 12/34] net/sfc: make entry pointer optional in MAE resource helpers Date: Mon, 5 Jun 2023 03:25:01 +0400 Message-Id: <20230604232523.6746-13-ivan.malov@arknetworks.am> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230604232523.6746-1-ivan.malov@arknetworks.am> References: <20230601195538.8265-1-ivan.malov@arknetworks.am> <20230604232523.6746-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; }