Blame SOURCES/0011-netdrv-bnxt_en-Fix-firmware-signaled-resource-change.patch

f95c89
From 7df147aa7b593a55576767db4c79d78340d023d5 Mon Sep 17 00:00:00 2001
f95c89
From: Jonathan Toppins <jtoppins@redhat.com>
f95c89
Date: Wed, 2 Oct 2019 18:22:25 -0400
f95c89
Subject: [PATCH 11/96] [netdrv] bnxt_en: Fix firmware signaled resource change
f95c89
 logic in open
f95c89
f95c89
Message-id: <8409cf4642a734f8fd0a2bb94d320794dd5c9a1d.1570027456.git.jtoppins@redhat.com>
f95c89
Patchwork-id: 276429
f95c89
O-Subject: [RHEL-8.2 PATCH 03/78] bnxt_en: Fix firmware signaled resource change logic in open.
f95c89
Bugzilla: 1724766
f95c89
RH-Acked-by: John Linville <linville@redhat.com>
f95c89
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
f95c89
f95c89
When the driver detects that resources have changed during open, it
f95c89
should reset the rx and tx rings to 0.  This will properly setup the
f95c89
init sequence to initialize the default rings again.  We also need
f95c89
to signal the RDMA driver to stop and clear its interrupts.  We then
f95c89
call the RoCE driver to restart if a new set of default rings is
f95c89
successfully reserved.
f95c89
f95c89
Fixes: 25e1acd6b92b ("bnxt_en: Notify firmware about IF state changes.")
f95c89
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
f95c89
Signed-off-by: David S. Miller <davem@davemloft.net>
f95c89
(cherry picked from commit 6b95c3e9697254dab0c8eafc6ab9d5e10d2eca4e)
f95c89
Bugzilla: 1724766
f95c89
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
f95c89
Tested: build, boot, basic ping
f95c89
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
f95c89
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
f95c89
---
f95c89
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 13 ++++++++++---
f95c89
 1 file changed, 10 insertions(+), 3 deletions(-)
f95c89
f95c89
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
f95c89
===================================================================
f95c89
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c	2020-02-06 16:23:12.026546968 +0100
f95c89
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c	2020-02-06 16:23:12.151545820 +0100
f95c89
@@ -8155,6 +8155,8 @@
f95c89
 		hw_resc->resv_rx_rings = 0;
f95c89
 		hw_resc->resv_hw_ring_grps = 0;
f95c89
 		hw_resc->resv_vnics = 0;
f95c89
+		bp->tx_nr_rings = 0;
f95c89
+		bp->rx_nr_rings = 0;
f95c89
 	}
f95c89
 	return rc;
f95c89
 }
f95c89
@@ -10409,20 +10411,25 @@
f95c89
 	if (bp->tx_nr_rings)
f95c89
 		return 0;
f95c89
 
f95c89
+	bnxt_ulp_irq_stop(bp);
f95c89
+	bnxt_clear_int_mode(bp);
f95c89
 	rc = bnxt_set_dflt_rings(bp, true);
f95c89
 	if (rc) {
f95c89
 		netdev_err(bp->dev, "Not enough rings available.\n");
f95c89
-		return rc;
f95c89
+		goto init_dflt_ring_err;
f95c89
 	}
f95c89
 	rc = bnxt_init_int_mode(bp);
f95c89
 	if (rc)
f95c89
-		return rc;
f95c89
+		goto init_dflt_ring_err;
f95c89
+
f95c89
 	bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
f95c89
 	if (bnxt_rfs_supported(bp) && bnxt_rfs_capable(bp)) {
f95c89
 		bp->flags |= BNXT_FLAG_RFS;
f95c89
 		bp->dev->features |= NETIF_F_NTUPLE;
f95c89
 	}
f95c89
-	return 0;
f95c89
+init_dflt_ring_err:
f95c89
+	bnxt_ulp_irq_restart(bp, rc);
f95c89
+	return rc;
f95c89
 }
f95c89
 
f95c89
 int bnxt_restore_pf_fw_resources(struct bnxt *bp)