From patchwork Tue Apr 20 21:10:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 91886 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 B5A23A0524; Tue, 20 Apr 2021 23:10:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 96C554185C; Tue, 20 Apr 2021 23:10:13 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 200DD4184B; Tue, 20 Apr 2021 23:10:09 +0200 (CEST) Received: from localhost.localdomain (unknown [188.242.7.54]) (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 shelob.oktetlabs.ru (Postfix) with ESMTPSA id B7C247F523; Wed, 21 Apr 2021 00:10:08 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru B7C247F523 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1618953008; bh=2g2mWgKl//rCzEbPuHMP+IUZOakKRps7YNW75CITYvM=; h=From:To:Cc:Subject:Date; b=PYc3ggdXWmiMh2GuPcPyrWqOQiheni2qItmTE6w0seQslxpOYRMQugf2ZbBgqrKyM xxkW+ZcC8JXhVx5U7S/KP3sjY0J1PgO9mcXHDBqUAXjJbcU3riSKVNjsKUIwwzgQ2Y QHjQtlsSNTnYu4YfPnvH6T132sO664za0D0GxLhE= From: Ivan Malov To: dev@dpdk.org Cc: stable@dpdk.org, Andrew Rybchenko , Andy Moreton Date: Wed, 21 Apr 2021 00:10:04 +0300 Message-Id: <20210420211006.19170-1-ivan.malov@oktetlabs.ru> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 1/3] net/sfc: fix outer rule and encap. header rollback on errors 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 Sender: "dev" 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 Reviewed-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- 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; } From patchwork Tue Apr 20 21:10:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 91884 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 4000FA0524; Tue, 20 Apr 2021 23:10:10 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1314541735; Tue, 20 Apr 2021 23:10:10 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 5A20941439 for ; Tue, 20 Apr 2021 23:10:09 +0200 (CEST) Received: from localhost.localdomain (unknown [188.242.7.54]) (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 shelob.oktetlabs.ru (Postfix) with ESMTPSA id EFD027F5F1; Wed, 21 Apr 2021 00:10:08 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru EFD027F5F1 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1618953009; bh=aQ37LFzmwXLWHWZQIBAyB2GsHVbQDXHUlo2eDBZOVbo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=W3HjvfoJxrQUvDVdVZkNkXVNfVsnss2X+TDbNohkglZhB6j9lHaSBX6BDu+BF9Xwu 7Lw7mT95hvzCJ2kUsNGd2Dw7jHgDvfmmYzJ98KhS6HbO7SjucwE2i7K7NFWueVzxpi Y0IqlTzy4VdPm42+zJnJGn3fuIU80oF7Oo6kkEwA= From: Ivan Malov To: dev@dpdk.org Cc: Andrew Rybchenko , Andy Moreton Date: Wed, 21 Apr 2021 00:10:05 +0300 Message-Id: <20210420211006.19170-2-ivan.malov@oktetlabs.ru> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210420211006.19170-1-ivan.malov@oktetlabs.ru> References: <20210420211006.19170-1-ivan.malov@oktetlabs.ru> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 2/3] net/sfc: revise FW RSRC free error logs in transfer rules 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 Sender: "dev" 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 Reviewed-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- 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; } From patchwork Tue Apr 20 21:10:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Malov X-Patchwork-Id: 91885 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 D0366A0524; Tue, 20 Apr 2021 23:10:15 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3636641853; Tue, 20 Apr 2021 23:10:11 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 7CE4B41735 for ; Tue, 20 Apr 2021 23:10:09 +0200 (CEST) Received: from localhost.localdomain (unknown [188.242.7.54]) (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 shelob.oktetlabs.ru (Postfix) with ESMTPSA id 3508A7F600; Wed, 21 Apr 2021 00:10:09 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 3508A7F600 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1618953009; bh=mVnGhOq9xz9uQgMmCuufZwMj5GFhm3YCFp6SOdz1zCc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=lH08DGyy0X9ZhyZ25lSL+56K0B01fLU/8c6zZhTJkvyxBnEb4PDI8DpcrwDJkz2iV p8HvLpmjO+8H6ctrQRRfyrOG64Ud9yVpqQnw7j6B65hzWT630RbAHzH11wfe6Ftxz6 fMInT4X40cZjDtDFv85Xzz6j9SwUEcWOSnaEbpLE= From: Ivan Malov To: dev@dpdk.org Cc: Andrew Rybchenko , Andy Moreton Date: Wed, 21 Apr 2021 00:10:06 +0300 Message-Id: <20210420211006.19170-3-ivan.malov@oktetlabs.ru> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210420211006.19170-1-ivan.malov@oktetlabs.ru> References: <20210420211006.19170-1-ivan.malov@oktetlabs.ru> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 3/3] net/sfc: add more debug log statements to transfer flows 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 Sender: "dev" These are really helpful when it comes to tracking resource sharing and debugging various leaks. Signed-off-by: Ivan Malov Reviewed-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- 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);