You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.9 KiB
78 lines
2.9 KiB
From dbe4cfd4c9843b1273f200131b94a525b58081ae Mon Sep 17 00:00:00 2001
|
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
|
Date: Wed, 2 Oct 2019 18:22:49 -0400
|
|
Subject: [PATCH 34/96] [netdrv] bnxt_en: Fix VNIC clearing logic for 57500
|
|
chips
|
|
|
|
Message-id: <35f3ca679fd3fa079ba85558e610e106471c630f.1570027456.git.jtoppins@redhat.com>
|
|
Patchwork-id: 276449
|
|
O-Subject: [RHEL-8.2 PATCH 27/78] bnxt_en: Fix VNIC clearing logic for 57500 chips.
|
|
Bugzilla: 1724766
|
|
RH-Acked-by: John Linville <linville@redhat.com>
|
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
|
|
|
During device shutdown, the VNIC clearing sequence needs to be modified
|
|
to free the VNIC first before freeing the RSS contexts. The current
|
|
code is doing the reverse and we can get mis-directed RX completions
|
|
to CP ring ID 0 when the RSS contexts are freed and zeroed. The clearing
|
|
of RSS contexts is not required with the new sequence.
|
|
|
|
Refactor the VNIC clearing logic into a new function bnxt_clear_vnic()
|
|
and do the chip specific VNIC clearing sequence.
|
|
|
|
Fixes: 7b3af4f75b81 ("bnxt_en: Add RSS support for 57500 chips.")
|
|
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
(cherry picked from commit a46ecb116fb7f722fa8cb2da01959c36e4e10c41)
|
|
Bugzilla: 1724766
|
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
|
Tested: build, boot, basic ping
|
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
|
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
|
---
|
|
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 26 ++++++++++++++++++--------
|
|
1 file changed, 18 insertions(+), 8 deletions(-)
|
|
|
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.827521257 +0100
|
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.964520000 +0100
|
|
@@ -7021,19 +7021,29 @@
|
|
bnxt_hwrm_vnic_set_rss(bp, i, false);
|
|
}
|
|
|
|
-static void bnxt_hwrm_resource_free(struct bnxt *bp, bool close_path,
|
|
- bool irq_re_init)
|
|
+static void bnxt_clear_vnic(struct bnxt *bp)
|
|
{
|
|
- if (bp->vnic_info) {
|
|
- bnxt_hwrm_clear_vnic_filter(bp);
|
|
+ if (!bp->vnic_info)
|
|
+ return;
|
|
+
|
|
+ bnxt_hwrm_clear_vnic_filter(bp);
|
|
+ if (!(bp->flags & BNXT_FLAG_CHIP_P5)) {
|
|
/* clear all RSS setting before free vnic ctx */
|
|
bnxt_hwrm_clear_vnic_rss(bp);
|
|
bnxt_hwrm_vnic_ctx_free(bp);
|
|
- /* before free the vnic, undo the vnic tpa settings */
|
|
- if (bp->flags & BNXT_FLAG_TPA)
|
|
- bnxt_set_tpa(bp, false);
|
|
- bnxt_hwrm_vnic_free(bp);
|
|
}
|
|
+ /* before free the vnic, undo the vnic tpa settings */
|
|
+ if (bp->flags & BNXT_FLAG_TPA)
|
|
+ bnxt_set_tpa(bp, false);
|
|
+ bnxt_hwrm_vnic_free(bp);
|
|
+ if (bp->flags & BNXT_FLAG_CHIP_P5)
|
|
+ bnxt_hwrm_vnic_ctx_free(bp);
|
|
+}
|
|
+
|
|
+static void bnxt_hwrm_resource_free(struct bnxt *bp, bool close_path,
|
|
+ bool irq_re_init)
|
|
+{
|
|
+ bnxt_clear_vnic(bp);
|
|
bnxt_hwrm_ring_free(bp, close_path);
|
|
bnxt_hwrm_ring_grp_free(bp);
|
|
if (irq_re_init) {
|