bnxt_en: Fix AER reset logic on 57500 chips.
AER reset should follow the same steps as suspend/resume. We need to
free context memory during AER reset and allocate new context memory
during recovery by calling bnxt_hwrm_func_qcaps(). We also need
to call bnxt_reenable_sriov() to restore the VFs.
Fixes: bae361c54f
("bnxt_en: Improve AER slot reset.")
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
59ae210173
commit
6e2f83884c
|
@ -12196,6 +12196,9 @@ static pci_ers_result_t bnxt_io_error_detected(struct pci_dev *pdev,
|
||||||
bnxt_close(netdev);
|
bnxt_close(netdev);
|
||||||
|
|
||||||
pci_disable_device(pdev);
|
pci_disable_device(pdev);
|
||||||
|
bnxt_free_ctx_mem(bp);
|
||||||
|
kfree(bp->ctx);
|
||||||
|
bp->ctx = NULL;
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
|
||||||
/* Request a slot slot reset. */
|
/* Request a slot slot reset. */
|
||||||
|
@ -12229,12 +12232,16 @@ static pci_ers_result_t bnxt_io_slot_reset(struct pci_dev *pdev)
|
||||||
pci_set_master(pdev);
|
pci_set_master(pdev);
|
||||||
|
|
||||||
err = bnxt_hwrm_func_reset(bp);
|
err = bnxt_hwrm_func_reset(bp);
|
||||||
if (!err && netif_running(netdev))
|
if (!err) {
|
||||||
err = bnxt_open(netdev);
|
err = bnxt_hwrm_func_qcaps(bp);
|
||||||
|
if (!err && netif_running(netdev))
|
||||||
if (!err)
|
err = bnxt_open(netdev);
|
||||||
result = PCI_ERS_RESULT_RECOVERED;
|
}
|
||||||
bnxt_ulp_start(bp, err);
|
bnxt_ulp_start(bp, err);
|
||||||
|
if (!err) {
|
||||||
|
bnxt_reenable_sriov(bp);
|
||||||
|
result = PCI_ERS_RESULT_RECOVERED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result != PCI_ERS_RESULT_RECOVERED) {
|
if (result != PCI_ERS_RESULT_RECOVERED) {
|
||||||
|
|
Loading…
Reference in New Issue