DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors
@ 2021-04-20 21:10 Ivan Malov
  2021-04-20 21:10 ` [dpdk-dev] [PATCH 2/3] net/sfc: revise FW RSRC free error logs in transfer rules Ivan Malov
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Ivan Malov @ 2021-04-20 21:10 UTC (permalink / raw)
  To: dev; +Cc: stable, Andrew Rybchenko, Andy Moreton

Add missing statements to invalidate MAE resource IDs.

Fixes: dadff137931c ("net/sfc: support encap flow items in transfer rules")
Fixes: 1bbd1ec2348a ("net/sfc: support action VXLAN encap in MAE backend")
Cc: stable@dpdk.org

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/net/sfc/sfc_mae.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index 4dafe3dcd..0270c91e2 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -235,6 +235,7 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa,
 		if (fw_rsrc->refcnt == 0) {
 			(void)efx_mae_outer_rule_remove(sa->nic,
 							&fw_rsrc->rule_id);
+			fw_rsrc->rule_id.id = EFX_MAE_RSRC_ID_INVALID;
 		}
 		return rc;
 	}
@@ -385,6 +386,7 @@ sfc_mae_encap_header_enable(struct sfc_adapter *sa,
 		if (fw_rsrc->refcnt == 0) {
 			(void)efx_mae_encap_header_free(sa->nic,
 							&fw_rsrc->eh_id);
+			fw_rsrc->eh_id.id = EFX_MAE_RSRC_ID_INVALID;
 		}
 		return rc;
 	}
-- 
2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dpdk-dev] [PATCH 2/3] net/sfc: revise FW RSRC free error logs in transfer rules
  2021-04-20 21:10 [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors Ivan Malov
@ 2021-04-20 21:10 ` Ivan Malov
  2021-04-20 21:10 ` [dpdk-dev] [PATCH 3/3] net/sfc: add more debug log statements to transfer flows Ivan Malov
  2021-04-21 10:39 ` [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors Ferruh Yigit
  2 siblings, 0 replies; 4+ messages in thread
From: Ivan Malov @ 2021-04-20 21:10 UTC (permalink / raw)
  To: dev; +Cc: Andrew Rybchenko, Andy Moreton

The current code simply forwards FW resource free failure
to the application leaving the operation incomplete. This
stalls the application and makes debugging very difficult.

Make the driver proceed with handling FW resource free in
the case of errors. Add explicit error logging statements.

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/net/sfc/sfc_mae.c | 109 ++++++++++++++++++++++----------------
 1 file changed, 63 insertions(+), 46 deletions(-)

diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index 0270c91e2..445368868 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -199,8 +199,11 @@ sfc_mae_outer_rule_del(struct sfc_adapter *sa,
 	if (rule->refcnt != 0)
 		return;
 
-	SFC_ASSERT(rule->fw_rsrc.rule_id.id == EFX_MAE_RSRC_ID_INVALID);
-	SFC_ASSERT(rule->fw_rsrc.refcnt == 0);
+	if (rule->fw_rsrc.rule_id.id != EFX_MAE_RSRC_ID_INVALID ||
+	    rule->fw_rsrc.refcnt != 0) {
+		sfc_err(sa, "deleting outer_rule=%p abandons its FW resource: OR_ID=0x%08x, refcnt=%u",
+			rule, rule->fw_rsrc.rule_id.id, rule->fw_rsrc.refcnt);
+	}
 
 	efx_mae_match_spec_fini(sa->nic, rule->match_spec);
 
@@ -245,7 +248,7 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa,
 	return 0;
 }
 
-static int
+static void
 sfc_mae_outer_rule_disable(struct sfc_adapter *sa,
 			   struct sfc_mae_outer_rule *rule)
 {
@@ -253,20 +256,24 @@ sfc_mae_outer_rule_disable(struct sfc_adapter *sa,
 	int rc;
 
 	SFC_ASSERT(sfc_adapter_is_locked(sa));
-	SFC_ASSERT(fw_rsrc->rule_id.id != EFX_MAE_RSRC_ID_INVALID);
-	SFC_ASSERT(fw_rsrc->refcnt != 0);
+
+	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",
+			rule, fw_rsrc->rule_id.id, fw_rsrc->refcnt);
+		return;
+	}
 
 	if (fw_rsrc->refcnt == 1) {
 		rc = efx_mae_outer_rule_remove(sa->nic, &fw_rsrc->rule_id);
-		if (rc != 0)
-			return rc;
-
+		if (rc != 0) {
+			sfc_err(sa, "failed to disable outer_rule=%p with OR_ID=0x%08x: %s",
+				rule, fw_rsrc->rule_id.id, strerror(rc));
+		}
 		fw_rsrc->rule_id.id = EFX_MAE_RSRC_ID_INVALID;
 	}
 
 	--(fw_rsrc->refcnt);
-
-	return 0;
 }
 
 static struct sfc_mae_encap_header *
@@ -344,8 +351,12 @@ sfc_mae_encap_header_del(struct sfc_adapter *sa,
 	if (encap_header->refcnt != 0)
 		return;
 
-	SFC_ASSERT(encap_header->fw_rsrc.eh_id.id == EFX_MAE_RSRC_ID_INVALID);
-	SFC_ASSERT(encap_header->fw_rsrc.refcnt == 0);
+	if (encap_header->fw_rsrc.eh_id.id != EFX_MAE_RSRC_ID_INVALID ||
+	    encap_header->fw_rsrc.refcnt != 0) {
+		sfc_err(sa, "deleting encap_header=%p abandons its FW resource: EH_ID=0x%08x, refcnt=%u",
+			encap_header, encap_header->fw_rsrc.eh_id.id,
+			encap_header->fw_rsrc.refcnt);
+	}
 
 	TAILQ_REMOVE(&mae->encap_headers, encap_header, entries);
 	rte_free(encap_header->buf);
@@ -396,7 +407,7 @@ sfc_mae_encap_header_enable(struct sfc_adapter *sa,
 	return 0;
 }
 
-static int
+static void
 sfc_mae_encap_header_disable(struct sfc_adapter *sa,
 			     struct sfc_mae_encap_header *encap_header)
 {
@@ -404,26 +415,29 @@ sfc_mae_encap_header_disable(struct sfc_adapter *sa,
 	int rc;
 
 	if (encap_header == NULL)
-		return 0;
+		return;
 
 	SFC_ASSERT(sfc_adapter_is_locked(sa));
 
 	fw_rsrc = &encap_header->fw_rsrc;
 
-	SFC_ASSERT(fw_rsrc->eh_id.id != EFX_MAE_RSRC_ID_INVALID);
-	SFC_ASSERT(fw_rsrc->refcnt != 0);
+	if (fw_rsrc->eh_id.id == EFX_MAE_RSRC_ID_INVALID ||
+	    fw_rsrc->refcnt == 0) {
+		sfc_err(sa, "failed to disable encap_header=%p: already disabled; EH_ID=0x%08x, refcnt=%u",
+			encap_header, fw_rsrc->eh_id.id, fw_rsrc->refcnt);
+		return;
+	}
 
 	if (fw_rsrc->refcnt == 1) {
 		rc = efx_mae_encap_header_free(sa->nic, &fw_rsrc->eh_id);
-		if (rc != 0)
-			return rc;
-
+		if (rc != 0) {
+			sfc_err(sa, "failed to disable encap_header=%p with EH_ID=0x%08x: %s",
+				encap_header, fw_rsrc->eh_id.id, strerror(rc));
+		}
 		fw_rsrc->eh_id.id = EFX_MAE_RSRC_ID_INVALID;
 	}
 
 	--(fw_rsrc->refcnt);
-
-	return 0;
 }
 
 static struct sfc_mae_action_set *
@@ -489,8 +503,12 @@ sfc_mae_action_set_del(struct sfc_adapter *sa,
 	if (action_set->refcnt != 0)
 		return;
 
-	SFC_ASSERT(action_set->fw_rsrc.aset_id.id == EFX_MAE_RSRC_ID_INVALID);
-	SFC_ASSERT(action_set->fw_rsrc.refcnt == 0);
+	if (action_set->fw_rsrc.aset_id.id != EFX_MAE_RSRC_ID_INVALID ||
+	    action_set->fw_rsrc.refcnt != 0) {
+		sfc_err(sa, "deleting action_set=%p abandons its FW resource: AS_ID=0x%08x, refcnt=%u",
+			action_set, action_set->fw_rsrc.aset_id.id,
+			action_set->fw_rsrc.refcnt);
+	}
 
 	efx_mae_action_set_spec_fini(sa->nic, action_set->spec);
 	sfc_mae_encap_header_del(sa, action_set->encap_header);
@@ -520,7 +538,7 @@ sfc_mae_action_set_enable(struct sfc_adapter *sa,
 		rc = efx_mae_action_set_alloc(sa->nic, action_set->spec,
 					      &fw_rsrc->aset_id);
 		if (rc != 0) {
-			(void)sfc_mae_encap_header_disable(sa, encap_header);
+			sfc_mae_encap_header_disable(sa, encap_header);
 
 			return rc;
 		}
@@ -531,7 +549,7 @@ sfc_mae_action_set_enable(struct sfc_adapter *sa,
 	return 0;
 }
 
-static int
+static void
 sfc_mae_action_set_disable(struct sfc_adapter *sa,
 			   struct sfc_mae_action_set *action_set)
 {
@@ -539,24 +557,26 @@ sfc_mae_action_set_disable(struct sfc_adapter *sa,
 	int rc;
 
 	SFC_ASSERT(sfc_adapter_is_locked(sa));
-	SFC_ASSERT(fw_rsrc->aset_id.id != EFX_MAE_RSRC_ID_INVALID);
-	SFC_ASSERT(fw_rsrc->refcnt != 0);
+
+	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",
+			action_set, fw_rsrc->aset_id.id, fw_rsrc->refcnt);
+		return;
+	}
 
 	if (fw_rsrc->refcnt == 1) {
 		rc = efx_mae_action_set_free(sa->nic, &fw_rsrc->aset_id);
-		if (rc != 0)
-			return rc;
-
+		if (rc != 0) {
+			sfc_err(sa, "failed to disable action_set=%p with AS_ID=0x%08x: %s",
+				action_set, fw_rsrc->aset_id.id, strerror(rc));
+		}
 		fw_rsrc->aset_id.id = EFX_MAE_RSRC_ID_INVALID;
 
-		rc = sfc_mae_encap_header_disable(sa, action_set->encap_header);
-		if (rc != 0)
-			return rc;
+		sfc_mae_encap_header_disable(sa, action_set->encap_header);
 	}
 
 	--(fw_rsrc->refcnt);
-
-	return 0;
 }
 
 void
@@ -2850,11 +2870,11 @@ sfc_mae_flow_insert(struct sfc_adapter *sa,
 	return 0;
 
 fail_action_rule_insert:
-	(void)sfc_mae_action_set_disable(sa, action_set);
+	sfc_mae_action_set_disable(sa, action_set);
 
 fail_action_set_enable:
 	if (outer_rule != NULL)
-		(void)sfc_mae_outer_rule_disable(sa, outer_rule);
+		sfc_mae_outer_rule_disable(sa, outer_rule);
 
 fail_outer_rule_enable:
 	return rc;
@@ -2874,19 +2894,16 @@ sfc_mae_flow_remove(struct sfc_adapter *sa,
 	SFC_ASSERT(action_set != NULL);
 
 	rc = efx_mae_action_rule_remove(sa->nic, &spec_mae->rule_id);
-	if (rc != 0)
-		return rc;
-
-	spec_mae->rule_id.id = EFX_MAE_RSRC_ID_INVALID;
-
-	rc = sfc_mae_action_set_disable(sa, action_set);
 	if (rc != 0) {
-		sfc_err(sa, "failed to disable the action set (rc = %d)", rc);
-		/* Despite the error, proceed with outer rule removal. */
+		sfc_err(sa, "failed to disable flow=%p with AR_ID=0x%08x: %s",
+			flow, spec_mae->rule_id.id, strerror(rc));
 	}
+	spec_mae->rule_id.id = EFX_MAE_RSRC_ID_INVALID;
+
+	sfc_mae_action_set_disable(sa, action_set);
 
 	if (outer_rule != NULL)
-		return sfc_mae_outer_rule_disable(sa, outer_rule);
+		sfc_mae_outer_rule_disable(sa, outer_rule);
 
 	return 0;
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [dpdk-dev] [PATCH 3/3] net/sfc: add more debug log statements to transfer flows
  2021-04-20 21:10 [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors Ivan Malov
  2021-04-20 21:10 ` [dpdk-dev] [PATCH 2/3] net/sfc: revise FW RSRC free error logs in transfer rules Ivan Malov
@ 2021-04-20 21:10 ` Ivan Malov
  2021-04-21 10:39 ` [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors Ferruh Yigit
  2 siblings, 0 replies; 4+ messages in thread
From: Ivan Malov @ 2021-04-20 21:10 UTC (permalink / raw)
  To: dev; +Cc: Andrew Rybchenko, Andy Moreton

These are really helpful when it comes to tracking
resource sharing and debugging various leaks.

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/net/sfc/sfc_log.h |  8 +++++
 drivers/net/sfc/sfc_mae.c | 68 ++++++++++++++++++++++++++++++++++++---
 2 files changed, 71 insertions(+), 5 deletions(-)

diff --git a/drivers/net/sfc/sfc_log.h b/drivers/net/sfc/sfc_log.h
index b0144a3ae..d54277cb7 100644
--- a/drivers/net/sfc/sfc_log.h
+++ b/drivers/net/sfc/sfc_log.h
@@ -73,6 +73,14 @@ extern uint32_t sfc_logtype_driver;
 			_sa->priv.logtype_main, __VA_ARGS__);		\
 	} while (0)
 
+#define sfc_dbg(sa, ...) \
+	do {								\
+		const struct sfc_adapter *_sa = (sa);			\
+									\
+		SFC_LOG(_sa->priv.shared, RTE_LOG_DEBUG,		\
+			_sa->priv.logtype_main, __VA_ARGS__);		\
+	} while (0)
+
 #define sfc_log_init(sa, ...) \
 	do {								\
 		const struct sfc_adapter *_sa = (sa);			\
diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c
index 445368868..a2c0aa143 100644
--- a/drivers/net/sfc/sfc_mae.c
+++ b/drivers/net/sfc/sfc_mae.c
@@ -149,6 +149,7 @@ sfc_mae_outer_rule_attach(struct sfc_adapter *sa,
 	TAILQ_FOREACH(rule, &mae->outer_rules, entries) {
 		if (efx_mae_match_specs_equal(rule->match_spec, match_spec) &&
 		    rule->encap_type == encap_type) {
+			sfc_dbg(sa, "attaching to outer_rule=%p", rule);
 			++(rule->refcnt);
 			return rule;
 		}
@@ -182,6 +183,8 @@ sfc_mae_outer_rule_add(struct sfc_adapter *sa,
 
 	*rulep = rule;
 
+	sfc_dbg(sa, "added outer_rule=%p", rule);
+
 	return 0;
 }
 
@@ -209,6 +212,8 @@ sfc_mae_outer_rule_del(struct sfc_adapter *sa,
 
 	TAILQ_REMOVE(&mae->outer_rules, rule, entries);
 	rte_free(rule);
+
+	sfc_dbg(sa, "deleted outer_rule=%p", rule);
 }
 
 static int
@@ -228,8 +233,11 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa,
 		rc = efx_mae_outer_rule_insert(sa->nic, rule->match_spec,
 					       rule->encap_type,
 					       &fw_rsrc->rule_id);
-		if (rc != 0)
+		if (rc != 0) {
+			sfc_err(sa, "failed to enable outer_rule=%p: %s",
+				rule, strerror(rc));
 			return rc;
+		}
 	}
 
 	rc = efx_mae_match_spec_outer_rule_id_set(match_spec_action,
@@ -240,9 +248,17 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa,
 							&fw_rsrc->rule_id);
 			fw_rsrc->rule_id.id = EFX_MAE_RSRC_ID_INVALID;
 		}
+
+		sfc_err(sa, "can't match on outer rule ID: %s", strerror(rc));
+
 		return rc;
 	}
 
+	if (fw_rsrc->refcnt == 0) {
+		sfc_dbg(sa, "enabled outer_rule=%p: OR_ID=0x%08x",
+			rule, fw_rsrc->rule_id.id);
+	}
+
 	++(fw_rsrc->refcnt);
 
 	return 0;
@@ -266,7 +282,10 @@ sfc_mae_outer_rule_disable(struct sfc_adapter *sa,
 
 	if (fw_rsrc->refcnt == 1) {
 		rc = efx_mae_outer_rule_remove(sa->nic, &fw_rsrc->rule_id);
-		if (rc != 0) {
+		if (rc == 0) {
+			sfc_dbg(sa, "disabled outer_rule=%p with OR_ID=0x%08x",
+				rule, fw_rsrc->rule_id.id);
+		} else {
 			sfc_err(sa, "failed to disable outer_rule=%p with OR_ID=0x%08x: %s",
 				rule, fw_rsrc->rule_id.id, strerror(rc));
 		}
@@ -289,6 +308,8 @@ sfc_mae_encap_header_attach(struct sfc_adapter *sa,
 		if (encap_header->size == bounce_eh->size &&
 		    memcmp(encap_header->buf, bounce_eh->buf,
 			   bounce_eh->size) == 0) {
+			sfc_dbg(sa, "attaching to encap_header=%p",
+				encap_header);
 			++(encap_header->refcnt);
 			return encap_header;
 		}
@@ -331,6 +352,8 @@ sfc_mae_encap_header_add(struct sfc_adapter *sa,
 
 	*encap_headerp = encap_header;
 
+	sfc_dbg(sa, "added encap_header=%p", encap_header);
+
 	return 0;
 }
 
@@ -361,6 +384,8 @@ sfc_mae_encap_header_del(struct sfc_adapter *sa,
 	TAILQ_REMOVE(&mae->encap_headers, encap_header, entries);
 	rte_free(encap_header->buf);
 	rte_free(encap_header);
+
+	sfc_dbg(sa, "deleted encap_header=%p", encap_header);
 }
 
 static int
@@ -387,8 +412,11 @@ sfc_mae_encap_header_enable(struct sfc_adapter *sa,
 						encap_header->buf,
 						encap_header->size,
 						&fw_rsrc->eh_id);
-		if (rc != 0)
+		if (rc != 0) {
+			sfc_err(sa, "failed to enable encap_header=%p: %s",
+				encap_header, strerror(rc));
 			return rc;
+		}
 	}
 
 	rc = efx_mae_action_set_fill_in_eh_id(action_set_spec,
@@ -399,9 +427,17 @@ sfc_mae_encap_header_enable(struct sfc_adapter *sa,
 							&fw_rsrc->eh_id);
 			fw_rsrc->eh_id.id = EFX_MAE_RSRC_ID_INVALID;
 		}
+
+		sfc_err(sa, "can't fill in encap. header ID: %s", strerror(rc));
+
 		return rc;
 	}
 
+	if (fw_rsrc->refcnt == 0) {
+		sfc_dbg(sa, "enabled encap_header=%p: EH_ID=0x%08x",
+			encap_header, fw_rsrc->eh_id.id);
+	}
+
 	++(fw_rsrc->refcnt);
 
 	return 0;
@@ -430,7 +466,10 @@ sfc_mae_encap_header_disable(struct sfc_adapter *sa,
 
 	if (fw_rsrc->refcnt == 1) {
 		rc = efx_mae_encap_header_free(sa->nic, &fw_rsrc->eh_id);
-		if (rc != 0) {
+		if (rc == 0) {
+			sfc_dbg(sa, "disabled encap_header=%p with EH_ID=0x%08x",
+				encap_header, fw_rsrc->eh_id.id);
+		} else {
 			sfc_err(sa, "failed to disable encap_header=%p with EH_ID=0x%08x: %s",
 				encap_header, fw_rsrc->eh_id.id, strerror(rc));
 		}
@@ -453,6 +492,7 @@ sfc_mae_action_set_attach(struct sfc_adapter *sa,
 	TAILQ_FOREACH(action_set, &mae->action_sets, entries) {
 		if (action_set->encap_header == encap_header &&
 		    efx_mae_action_set_specs_equal(action_set->spec, spec)) {
+			sfc_dbg(sa, "attaching to action_set=%p", action_set);
 			++(action_set->refcnt);
 			return action_set;
 		}
@@ -486,6 +526,8 @@ sfc_mae_action_set_add(struct sfc_adapter *sa,
 
 	*action_setp = action_set;
 
+	sfc_dbg(sa, "added action_set=%p", action_set);
+
 	return 0;
 }
 
@@ -514,6 +556,8 @@ sfc_mae_action_set_del(struct sfc_adapter *sa,
 	sfc_mae_encap_header_del(sa, action_set->encap_header);
 	TAILQ_REMOVE(&mae->action_sets, action_set, entries);
 	rte_free(action_set);
+
+	sfc_dbg(sa, "deleted action_set=%p", action_set);
 }
 
 static int
@@ -540,8 +584,14 @@ sfc_mae_action_set_enable(struct sfc_adapter *sa,
 		if (rc != 0) {
 			sfc_mae_encap_header_disable(sa, encap_header);
 
+			sfc_err(sa, "failed to enable action_set=%p: %s",
+				action_set, strerror(rc));
+
 			return rc;
 		}
+
+		sfc_dbg(sa, "enabled action_set=%p: AS_ID=0x%08x",
+			action_set, fw_rsrc->aset_id.id);
 	}
 
 	++(fw_rsrc->refcnt);
@@ -567,7 +617,10 @@ sfc_mae_action_set_disable(struct sfc_adapter *sa,
 
 	if (fw_rsrc->refcnt == 1) {
 		rc = efx_mae_action_set_free(sa->nic, &fw_rsrc->aset_id);
-		if (rc != 0) {
+		if (rc == 0) {
+			sfc_dbg(sa, "disabled action_set=%p with AS_ID=0x%08x",
+				action_set, fw_rsrc->aset_id.id);
+		} else {
 			sfc_err(sa, "failed to disable action_set=%p with AS_ID=0x%08x: %s",
 				action_set, fw_rsrc->aset_id.id, strerror(rc));
 		}
@@ -2867,6 +2920,9 @@ sfc_mae_flow_insert(struct sfc_adapter *sa,
 	if (rc != 0)
 		goto fail_action_rule_insert;
 
+	sfc_dbg(sa, "enabled flow=%p: AR_ID=0x%08x",
+		flow, spec_mae->rule_id.id);
+
 	return 0;
 
 fail_action_rule_insert:
@@ -2898,6 +2954,8 @@ sfc_mae_flow_remove(struct sfc_adapter *sa,
 		sfc_err(sa, "failed to disable flow=%p with AR_ID=0x%08x: %s",
 			flow, spec_mae->rule_id.id, strerror(rc));
 	}
+	sfc_dbg(sa, "disabled flow=%p with AR_ID=0x%08x",
+		flow, spec_mae->rule_id.id);
 	spec_mae->rule_id.id = EFX_MAE_RSRC_ID_INVALID;
 
 	sfc_mae_action_set_disable(sa, action_set);
-- 
2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors
  2021-04-20 21:10 [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors Ivan Malov
  2021-04-20 21:10 ` [dpdk-dev] [PATCH 2/3] net/sfc: revise FW RSRC free error logs in transfer rules Ivan Malov
  2021-04-20 21:10 ` [dpdk-dev] [PATCH 3/3] net/sfc: add more debug log statements to transfer flows Ivan Malov
@ 2021-04-21 10:39 ` Ferruh Yigit
  2 siblings, 0 replies; 4+ messages in thread
From: Ferruh Yigit @ 2021-04-21 10:39 UTC (permalink / raw)
  To: Ivan Malov, dev; +Cc: stable, Andrew Rybchenko, Andy Moreton

On 4/20/2021 10:10 PM, Ivan Malov wrote:
> Add missing statements to invalidate MAE resource IDs.
> 
> Fixes: dadff137931c ("net/sfc: support encap flow items in transfer rules")
> Fixes: 1bbd1ec2348a ("net/sfc: support action VXLAN encap in MAE backend")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> Reviewed-by: Andy Moreton <amoreton@xilinx.com>

Series applied to dpdk-next-net/main, thanks.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-04-21 10:39 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-20 21:10 [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors Ivan Malov
2021-04-20 21:10 ` [dpdk-dev] [PATCH 2/3] net/sfc: revise FW RSRC free error logs in transfer rules Ivan Malov
2021-04-20 21:10 ` [dpdk-dev] [PATCH 3/3] net/sfc: add more debug log statements to transfer flows Ivan Malov
2021-04-21 10:39 ` [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors Ferruh Yigit

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).