Skip to content

Commit fb1e6e5

Browse files
Vasundhara Volamkuba-moo
authored andcommitted
bnxt_en: Fix AER recovery.
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: b340dc6 ("bnxt_en: Avoid sending firmware messages when AER error is detected.") Reviewed-by: Edwin Peer <[email protected]> Signed-off-by: Vasundhara Volam <[email protected]> Signed-off-by: Michael Chan <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 74f88c1 commit fb1e6e5

File tree

1 file changed

+14
-17
lines changed
  • drivers/net/ethernet/broadcom/bnxt

1 file changed

+14
-17
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12887,10 +12887,10 @@ static pci_ers_result_t bnxt_io_error_detected(struct pci_dev *pdev,
1288712887
*/
1288812888
static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
1288912889
{
12890+
pci_ers_result_t result = PCI_ERS_RESULT_DISCONNECT;
1289012891
struct net_device *netdev = pci_get_drvdata(pdev);
1289112892
struct bnxt *bp = netdev_priv(netdev);
1289212893
int err = 0, off;
12893-
pci_ers_result_t result = PCI_ERS_RESULT_DISCONNECT;
1289412894

1289512895
netdev_info(bp->dev, "PCI Slot Reset\n");
1289612896

@@ -12919,22 +12919,8 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
1291912919
pci_save_state(pdev);
1292012920

1292112921
err = bnxt_hwrm_func_reset(bp);
12922-
if (!err) {
12923-
err = bnxt_hwrm_func_qcaps(bp);
12924-
if (!err && netif_running(netdev))
12925-
err = bnxt_open(netdev);
12926-
}
12927-
bnxt_ulp_start(bp, err);
12928-
if (!err) {
12929-
bnxt_reenable_sriov(bp);
12922+
if (!err)
1293012923
result = PCI_ERS_RESULT_RECOVERED;
12931-
}
12932-
}
12933-
12934-
if (result != PCI_ERS_RESULT_RECOVERED) {
12935-
if (netif_running(netdev))
12936-
dev_close(netdev);
12937-
pci_disable_device(pdev);
1293812924
}
1293912925

1294012926
rtnl_unlock();
@@ -12952,10 +12938,21 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
1295212938
static void bnxt_io_resume(struct pci_dev *pdev)
1295312939
{
1295412940
struct net_device *netdev = pci_get_drvdata(pdev);
12941+
struct bnxt *bp = netdev_priv(netdev);
12942+
int err;
1295512943

12944+
netdev_info(bp->dev, "PCI Slot Resume\n");
1295612945
rtnl_lock();
1295712946

12958-
netif_device_attach(netdev);
12947+
err = bnxt_hwrm_func_qcaps(bp);
12948+
if (!err && netif_running(netdev))
12949+
err = bnxt_open(netdev);
12950+
12951+
bnxt_ulp_start(bp, err);
12952+
if (!err) {
12953+
bnxt_reenable_sriov(bp);
12954+
netif_device_attach(netdev);
12955+
}
1295912956

1296012957
rtnl_unlock();
1296112958
}

0 commit comments

Comments
 (0)