From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 2DD94A04B6;
	Thu, 17 Sep 2020 08:36:05 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 0F8E31D561;
	Thu, 17 Sep 2020 08:35:33 +0200 (CEST)
Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com
 [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id 72F361D535
 for <dev@dpdk.org>; Thu, 17 Sep 2020 08:35:20 +0200 (CEST)
Received: from mx1-us1.ppe-hosted.com (unknown [10.7.65.64])
 by dispatch1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id
 0020860070 for <dev@dpdk.org>; Thu, 17 Sep 2020 06:35:20 +0000 (UTC)
Received: from us4-mdac16-36.ut7.mdlocal (unknown [10.7.66.155])
 by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTP id EF74F2009B
 for <dev@dpdk.org>; Thu, 17 Sep 2020 06:35:19 +0000 (UTC)
X-Virus-Scanned: Proofpoint Essentials engine
Received: from mx1-us1.ppe-hosted.com (unknown [10.7.66.30])
 by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 7A81E22004D
 for <dev@dpdk.org>; Thu, 17 Sep 2020 06:35:19 +0000 (UTC)
Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
 (No client certificate requested)
 by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 3613310005E
 for <dev@dpdk.org>; Thu, 17 Sep 2020 06:35:19 +0000 (UTC)
Received: from ukex01.SolarFlarecom.com (10.17.10.4) by
 ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id
 15.0.1497.2; Thu, 17 Sep 2020 07:35:12 +0100
Received: from opal.uk.solarflarecom.com (10.17.10.1) by
 ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server id
 15.0.1497.2 via Frontend Transport; Thu, 17 Sep 2020 07:35:12 +0100
Received: from ukv-loginhost.uk.solarflarecom.com
 (ukv-loginhost.uk.solarflarecom.com [10.17.10.39])
 by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id 08H6ZC6i002506
 for <dev@dpdk.org>; Thu, 17 Sep 2020 07:35:12 +0100
Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1])
 by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id 7752B1613A9
 for <dev@dpdk.org>; Thu, 17 Sep 2020 07:35:12 +0100 (BST)
From: Andrew Rybchenko <arybchenko@solarflare.com>
To: <dev@dpdk.org>
Date: Thu, 17 Sep 2020 07:34:38 +0100
Message-ID: <1600324483-23153-13-git-send-email-arybchenko@solarflare.com>
X-Mailer: git-send-email 1.8.3.1
In-Reply-To: <1600324483-23153-1-git-send-email-arybchenko@solarflare.com>
References: <1599556475-27820-1-git-send-email-arybchenko@solarflare.com>
 <1600324483-23153-1-git-send-email-arybchenko@solarflare.com>
MIME-Version: 1.0
Content-Type: text/plain
X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.6.1012-25670.003
X-TM-AS-Result: No-0.137400-8.000000-10
X-TMASE-MatchedRID: PPPqS2B+Ni0pk5K7iexxzC2416nc3bQleouvej40T4gd0WOKRkwsh3Io
 zGa69omdrdoLblq9S5o2rW8Pb51lrv8emqIlUjuV0MohG+IQ2sfy++SyyVe4t1VkJxysad/IeOb
 QA+fBlTa8WuXMAMHMHjpzQoT/n3/mNyl1nd9CIt0URSScn+QSXl1PyA7eE+Ph+gtHj7OwNO3ClX
 +2r3j3WC+of4vgxtzMb5XhMobMnGETr691g6nSWRp24KintwkLxgiCVINc87CsPGMacX2fm5LSs
 JKPozupjexyWJd6V8uETBIpmSWuHgAD0FqlZdom0b4rJ92tmtF/d7a9VsfzMGYfzNl+uie3Vcr2
 04P67pw=
X-TM-AS-User-Approved-Sender: Yes
X-TM-AS-User-Blocked-Sender: No
X-TMASE-Result: 10-0.137400-8.000000
X-TMASE-Version: SMEX-12.5.0.1300-8.6.1012-25670.003
X-MDID: 1600324520-T25S1V1gnzBC
Subject: [dpdk-dev] [PATCH v2 12/17] net/sfc: avoid panic in the case of
	MCDI timeout
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

Implement dummy MCDI timeout handling which simply rejects
further MCDI requests.

Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/net/sfc/sfc_mcdi.c | 15 +++++++++++++--
 drivers/net/sfc/sfc_mcdi.h |  1 +
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 8f446e8bc8..928a08c0a2 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -33,6 +33,9 @@
 				RTE_FMT_TAIL(__VA_ARGS__,)));		\
 	} while (0)
 
+#define sfc_efx_mcdi_crit(mcdi, ...) \
+	sfc_efx_mcdi_log(mcdi, RTE_LOG_CRIT, __VA_ARGS__)
+
 #define sfc_efx_mcdi_err(mcdi, ...) \
 	sfc_efx_mcdi_log(mcdi, RTE_LOG_ERR, __VA_ARGS__)
 
@@ -55,7 +58,9 @@ sfc_efx_mcdi_timeout(struct sfc_adapter *sa)
 
 	sfc_efx_mcdi_warn(mcdi, "MC TIMEOUT");
 
-	sfc_panic(sa, "MCDI timeout handling is not implemented\n");
+	mcdi->state = SFC_EFX_MCDI_DEAD;
+	sfc_efx_mcdi_crit(mcdi,
+		"MCDI timeout handling is not implemented - NIC is unusable");
 }
 
 static inline boolean_t
@@ -124,6 +129,11 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
 	struct sfc_efx_mcdi *mcdi = &sa->mcdi;
 	uint32_t proxy_handle;
 
+	if (mcdi->state == SFC_EFX_MCDI_DEAD) {
+		emrp->emr_rc = ENOEXEC;
+		return;
+	}
+
 	rte_spinlock_lock(&mcdi->lock);
 
 	SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
@@ -325,7 +335,8 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
 
 	rte_spinlock_lock(&mcdi->lock);
 
-	SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
+	SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED ||
+		   mcdi->state == SFC_EFX_MCDI_DEAD);
 	mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
 
 	sfc_efx_mcdi_info(mcdi, "fini MCDI");
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
index e2105364ad..b93b268e32 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -27,6 +27,7 @@ enum sfc_efx_mcdi_state {
 	SFC_EFX_MCDI_INITIALIZED,
 	SFC_EFX_MCDI_BUSY,
 	SFC_EFX_MCDI_COMPLETED,
+	SFC_EFX_MCDI_DEAD,
 
 	SFC_EFX_MCDI_NSTATES
 };
-- 
2.17.1