Commit 6e2f8388 authored by Michael Chan's avatar Michael Chan Committed by David S. Miller
Browse files

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: bae361c5 ("bnxt_en: Improve AER slot reset.")
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 59ae2101
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -12196,6 +12196,9 @@ static pci_ers_result_t bnxt_io_error_detected(struct pci_dev *pdev,
		bnxt_close(netdev);

	pci_disable_device(pdev);
	bnxt_free_ctx_mem(bp);
	kfree(bp->ctx);
	bp->ctx = NULL;
	rtnl_unlock();

	/* 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);

		err = bnxt_hwrm_func_reset(bp);
		if (!err) {
			err = bnxt_hwrm_func_qcaps(bp);
			if (!err && netif_running(netdev))
				err = bnxt_open(netdev);

		if (!err)
			result = PCI_ERS_RESULT_RECOVERED;
		}
		bnxt_ulp_start(bp, err);
		if (!err) {
			bnxt_reenable_sriov(bp);
			result = PCI_ERS_RESULT_RECOVERED;
		}
	}

	if (result != PCI_ERS_RESULT_RECOVERED) {