Denis Kirjanov d1661a
From 0fe91559d9999183757c74e720ee48501f1e8b85 Mon Sep 17 00:00:00 2001
Denis Kirjanov d1661a
From: Edwin Peer <edwin.peer@broadcom.com>
Denis Kirjanov d1661a
Date: Thu, 11 Feb 2021 02:24:23 -0500
Denis Kirjanov d1661a
Subject: [PATCH 01/19] bnxt_en: reverse order of TX disable and carrier off
Denis Kirjanov d1661a
Git-commit: 132e0b65dc2b8bfa9721bfce834191f24fd1d7ed
Denis Kirjanov d1661a
Patch-mainline: v5.12-rc1
Denis Kirjanov d1661a
References: git-fixes
Denis Kirjanov d1661a
Denis Kirjanov d1661a
A TX queue can potentially immediately timeout after it is stopped
Denis Kirjanov d1661a
and the last TX timestamp on that queue was more than 5 seconds ago with
Denis Kirjanov d1661a
carrier still up.  Prevent these intermittent false TX timeouts
Denis Kirjanov d1661a
by bringing down carrier first before calling netif_tx_disable().
Denis Kirjanov d1661a
Denis Kirjanov d1661a
Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.")
Denis Kirjanov d1661a
Signed-off-by: Edwin Peer <edwin.peer@broadcom.com>
Denis Kirjanov d1661a
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Denis Kirjanov d1661a
Signed-off-by: David S. Miller <davem@davemloft.net>
Denis Kirjanov d1661a
Signed-off-by: Denis Kirjanov <denis.kirjanov@suse.com>
Denis Kirjanov d1661a
---
Denis Kirjanov d1661a
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 ++-
Denis Kirjanov d1661a
 1 file changed, 2 insertions(+), 1 deletion(-)
Denis Kirjanov d1661a
Denis Kirjanov d1661a
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
Denis Kirjanov d1661a
index b1ba6df8911d..3c14d1a2efaa 100644
Denis Kirjanov d1661a
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
Denis Kirjanov d1661a
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
Denis Kirjanov d1661a
@@ -7776,9 +7776,10 @@ void bnxt_tx_disable(struct bnxt *bp)
Denis Kirjanov d1661a
 			txr->dev_state = BNXT_DEV_STATE_CLOSING;
Denis Kirjanov d1661a
 		}
Denis Kirjanov d1661a
 	}
Denis Kirjanov d1661a
+	/* Drop carrier first to prevent TX timeout */
Denis Kirjanov d1661a
+	netif_carrier_off(bp->dev);
Denis Kirjanov d1661a
 	/* Stop all TX queues */
Denis Kirjanov d1661a
 	netif_tx_disable(bp->dev);
Denis Kirjanov d1661a
-	netif_carrier_off(bp->dev);
Denis Kirjanov d1661a
 }
Denis Kirjanov d1661a
 
Denis Kirjanov d1661a
 void bnxt_tx_enable(struct bnxt *bp)
Denis Kirjanov d1661a
-- 
Denis Kirjanov d1661a
2.16.4
Denis Kirjanov d1661a