Commit 7c6cdf63 authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'bnxt_en-Bug-fixes'



Michael Chan says:

====================
bnxt_en: Bug fixes.

Four fixes related to the bnxt_en driver's resume path, AER reset, and
the timer function.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 38af8f2d e0009404
Loading
Loading
Loading
Loading
+17 −18
Original line number Diff line number Diff line
@@ -10037,7 +10037,7 @@ static void bnxt_timer(struct timer_list *t)
	struct bnxt *bp = from_timer(bp, t, timer);
	struct net_device *dev = bp->dev;

	if (!netif_running(dev))
	if (!netif_running(dev) || !test_bit(BNXT_STATE_OPEN, &bp->state))
		return;

	if (atomic_read(&bp->intr_sem) != 0)
@@ -12133,19 +12133,9 @@ static int bnxt_resume(struct device *device)
		goto resume_exit;
	}

	if (bnxt_hwrm_queue_qportcfg(bp)) {
		rc = -ENODEV;
		goto resume_exit;
	}

	if (bp->hwrm_spec_code >= 0x10803) {
		if (bnxt_alloc_ctx_mem(bp)) {
			rc = -ENODEV;
	rc = bnxt_hwrm_func_qcaps(bp);
	if (rc)
		goto resume_exit;
		}
	}
	if (BNXT_NEW_RM(bp))
		bnxt_hwrm_func_resc_qcaps(bp, false);

	if (bnxt_hwrm_func_drv_rgtr(bp, NULL, 0, false)) {
		rc = -ENODEV;
@@ -12161,6 +12151,8 @@ static int bnxt_resume(struct device *device)

resume_exit:
	bnxt_ulp_start(bp, rc);
	if (!rc)
		bnxt_reenable_sriov(bp);
	rtnl_unlock();
	return rc;
}
@@ -12204,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. */
@@ -12237,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) {