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.
96 lines
3.3 KiB
96 lines
3.3 KiB
From 62709321caaafe7638f3df3f791a03dac1130b59 Mon Sep 17 00:00:00 2001
|
|
From: Jonathan Toppins <jtoppins@redhat.com>
|
|
Date: Fri, 6 Dec 2019 20:12:52 -0500
|
|
Subject: [PATCH 95/96] [netdrv] bnxt_en: Call bnxt_ulp_stop()/bnxt_ulp_start()
|
|
during error recovery
|
|
|
|
Message-id: <6a79e26467333b7a1e9cb6e56caf1341323e69ff.1575651772.git.jtoppins@redhat.com>
|
|
Patchwork-id: 291384
|
|
O-Subject: [PATCH rhel8 12/13] bnxt_en: Call bnxt_ulp_stop()/bnxt_ulp_start() during error recovery.
|
|
Bugzilla: 1773724
|
|
RH-Acked-by: Steve Best <sbest@redhat.com>
|
|
RH-Acked-by: David Arcari <darcari@redhat.com>
|
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
|
RH-Acked-by: John Linville <linville@redhat.com>
|
|
|
|
Notify the RDMA driver by calling the bnxt_ulp_stop()/bnxt_ulp_start()
|
|
hooks during error recovery. The current ULP IRQ start/stop
|
|
sequence in error recovery (which is insufficient) is replaced with the
|
|
full reset sequence when we call bnxt_ulp_stop()/bnxt_ulp_start().
|
|
|
|
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
|
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
(cherry picked from commit f3a6d206c25ad9490f3a3c6d62baba9504227a75)
|
|
Bugzilla: 1773724
|
|
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
|
Tested: simple boot test
|
|
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
|
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
|
---
|
|
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 23 ++++++++++++++---------
|
|
1 file changed, 14 insertions(+), 9 deletions(-)
|
|
|
|
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
|
===================================================================
|
|
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.982446401 +0100
|
|
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:23.130445043 +0100
|
|
@@ -8767,6 +8767,8 @@
|
|
}
|
|
if (resc_reinit || fw_reset) {
|
|
if (fw_reset) {
|
|
+ if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
|
+ bnxt_ulp_stop(bp);
|
|
rc = bnxt_fw_init_one(bp);
|
|
if (rc) {
|
|
set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
|
|
@@ -9229,13 +9231,16 @@
|
|
if (rc) {
|
|
bnxt_hwrm_if_change(bp, false);
|
|
} else {
|
|
- if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state) &&
|
|
- BNXT_PF(bp)) {
|
|
- struct bnxt_pf_info *pf = &bp->pf;
|
|
- int n = pf->active_vfs;
|
|
+ if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state)) {
|
|
+ if (BNXT_PF(bp)) {
|
|
+ struct bnxt_pf_info *pf = &bp->pf;
|
|
+ int n = pf->active_vfs;
|
|
|
|
- if (n)
|
|
- bnxt_cfg_hw_sriov(bp, &n, true);
|
|
+ if (n)
|
|
+ bnxt_cfg_hw_sriov(bp, &n, true);
|
|
+ }
|
|
+ if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
|
+ bnxt_ulp_start(bp, 0);
|
|
}
|
|
bnxt_hwmon_open(bp);
|
|
}
|
|
@@ -10056,8 +10061,8 @@
|
|
|
|
static void bnxt_fw_reset_close(struct bnxt *bp)
|
|
{
|
|
+ bnxt_ulp_stop(bp);
|
|
__bnxt_close_nic(bp, true, false);
|
|
- bnxt_ulp_irq_stop(bp);
|
|
bnxt_clear_int_mode(bp);
|
|
bnxt_hwrm_func_drv_unrgtr(bp);
|
|
bnxt_free_ctx_mem(bp);
|
|
@@ -10737,13 +10742,13 @@
|
|
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
|
dev_close(bp->dev);
|
|
}
|
|
- bnxt_ulp_irq_restart(bp, rc);
|
|
- rtnl_unlock();
|
|
|
|
bp->fw_reset_state = 0;
|
|
/* Make sure fw_reset_state is 0 before clearing the flag */
|
|
smp_mb__before_atomic();
|
|
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
|
+ bnxt_ulp_start(bp, rc);
|
|
+ rtnl_unlock();
|
|
break;
|
|
}
|
|
return;
|