From: Vasundhara Volam <vasundhara-v.vo...@broadcom.com>

[ Upstream commit fb1e6e562b37b39adfe251919c9abfdb3e01f921 ]

A recent change skips sending firmware messages to the firmware when
pci_channel_offline() is true during fatal AER error.  To make this
complete, we need to move the re-initialization sequence to
bnxt_io_resume(), otherwise the firmware messages to re-initialize
will all be skipped.  In any case, it is more correct to re-initialize
in bnxt_io_resume().

Also, fix the reverse x-mas tree format when defining variables
in bnxt_io_slot_reset().

Fixes: b340dc680ed4 ("bnxt_en: Avoid sending firmware messages when AER error 
is detected.")
Reviewed-by: Edwin Peer <edwin.p...@broadcom.com>
Signed-off-by: Vasundhara Volam <vasundhara-v.vo...@broadcom.com>
Signed-off-by: Michael Chan <michael.c...@broadcom.com>
Signed-off-by: Jakub Kicinski <k...@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c |   31 +++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -12890,10 +12890,10 @@ static pci_ers_result_t bnxt_io_error_de
  */
 static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
 {
+       pci_ers_result_t result = PCI_ERS_RESULT_DISCONNECT;
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct bnxt *bp = netdev_priv(netdev);
        int err = 0, off;
-       pci_ers_result_t result = PCI_ERS_RESULT_DISCONNECT;
 
        netdev_info(bp->dev, "PCI Slot Reset\n");
 
@@ -12922,22 +12922,8 @@ static pci_ers_result_t bnxt_io_slot_res
                pci_save_state(pdev);
 
                err = bnxt_hwrm_func_reset(bp);
-               if (!err) {
-                       err = bnxt_hwrm_func_qcaps(bp);
-                       if (!err && netif_running(netdev))
-                               err = bnxt_open(netdev);
-               }
-               bnxt_ulp_start(bp, err);
-               if (!err) {
-                       bnxt_reenable_sriov(bp);
+               if (!err)
                        result = PCI_ERS_RESULT_RECOVERED;
-               }
-       }
-
-       if (result != PCI_ERS_RESULT_RECOVERED) {
-               if (netif_running(netdev))
-                       dev_close(netdev);
-               pci_disable_device(pdev);
        }
 
        rtnl_unlock();
@@ -12955,10 +12941,21 @@ static pci_ers_result_t bnxt_io_slot_res
 static void bnxt_io_resume(struct pci_dev *pdev)
 {
        struct net_device *netdev = pci_get_drvdata(pdev);
+       struct bnxt *bp = netdev_priv(netdev);
+       int err;
 
+       netdev_info(bp->dev, "PCI Slot Resume\n");
        rtnl_lock();
 
-       netif_device_attach(netdev);
+       err = bnxt_hwrm_func_qcaps(bp);
+       if (!err && netif_running(netdev))
+               err = bnxt_open(netdev);
+
+       bnxt_ulp_start(bp, err);
+       if (!err) {
+               bnxt_reenable_sriov(bp);
+               netif_device_attach(netdev);
+       }
 
        rtnl_unlock();
 }


Reply via email to