[v4,12/34] net/sfc: make entry pointer optional in MAE resource helpers

Message ID 20230607130245.8048-13-ivan.malov@arknetworks.am (mailing list archive)
State Accepted, 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 7, 2023, 1:02 p.m. UTC
  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 <ivan.malov@arknetworks.am>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/net/sfc/sfc_mae.c | 78 ++++++++++++++++++++++++++-------------
 1 file changed, 52 insertions(+), 26 deletions(-)
  

Patch

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;
 }