Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

bnxt_en: Fix compile error regression with CONFIG_BNXT_SRIOV not set.



Add a new function bnxt_get_registered_vfs() to handle the work
of getting the number of registered VFs under #ifdef CONFIG_BNXT_SRIOV.
The main code will call this function and will always work correctly
whether CONFIG_BNXT_SRIOV is set or not.

Fixes: 230d1f0d ("bnxt_en: Handle firmware reset.")
Reported-by: default avatarkbuild test robot <lkp@intel.com>
Signed-off-by: default avatarMichael Chan <michael.chan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fd0f75d2
Loading
Loading
Loading
Loading
+52 −30
Original line number Diff line number Diff line
@@ -10107,26 +10107,49 @@ void bnxt_fw_exception(struct bnxt *bp)
	bnxt_rtnl_unlock_sp(bp);
}

void bnxt_fw_reset(struct bnxt *bp)
/* Returns the number of registered VFs, or 1 if VF configuration is pending, or
 * < 0 on error.
 */
static int bnxt_get_registered_vfs(struct bnxt *bp)
{
#ifdef CONFIG_BNXT_SRIOV
	int rc;

	if (!BNXT_PF(bp))
		return 0;

	rc = bnxt_hwrm_func_qcfg(bp);
	if (rc) {
		netdev_err(bp->dev, "func_qcfg cmd failed, rc = %d\n", rc);
		return rc;
	}
	if (bp->pf.registered_vfs)
		return bp->pf.registered_vfs;
	if (bp->sriov_cfg)
		return 1;
#endif
	return 0;
}

void bnxt_fw_reset(struct bnxt *bp)
{
	bnxt_rtnl_lock_sp(bp);
	if (test_bit(BNXT_STATE_OPEN, &bp->state) &&
	    !test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
		int n = 0;

		set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
		if (BNXT_PF(bp) && bp->pf.active_vfs &&
		    !test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state)) {
			rc = bnxt_hwrm_func_qcfg(bp);
			if (rc) {
				netdev_err(bp->dev, "Firmware reset aborted, first func_qcfg cmd failed, rc = %d\n",
					   rc);
		if (bp->pf.active_vfs &&
		    !test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
			n = bnxt_get_registered_vfs(bp);
		if (n < 0) {
			netdev_err(bp->dev, "Firmware reset aborted, rc = %d\n",
				   n);
			clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
			dev_close(bp->dev);
			goto fw_reset_exit;
			}
			if (bp->pf.registered_vfs || bp->sriov_cfg) {
				u16 vf_tmo_dsecs = bp->pf.registered_vfs * 10;
		} else if (n > 0) {
			u16 vf_tmo_dsecs = n * 10;

			if (bp->fw_reset_max_dsecs < vf_tmo_dsecs)
				bp->fw_reset_max_dsecs = vf_tmo_dsecs;
@@ -10135,7 +10158,6 @@ void bnxt_fw_reset(struct bnxt *bp)
			bnxt_queue_fw_reset_work(bp, HZ / 10);
			goto fw_reset_exit;
		}
		}
		bnxt_fw_reset_close(bp);
		bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
		bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
@@ -10579,22 +10601,21 @@ static void bnxt_fw_reset_task(struct work_struct *work)
	}

	switch (bp->fw_reset_state) {
	case BNXT_FW_RESET_STATE_POLL_VF:
		rc = bnxt_hwrm_func_qcfg(bp);
		if (rc) {
	case BNXT_FW_RESET_STATE_POLL_VF: {
		int n = bnxt_get_registered_vfs(bp);

		if (n < 0) {
			netdev_err(bp->dev, "Firmware reset aborted, subsequent func_qcfg cmd failed, rc = %d, %d msecs since reset timestamp\n",
				   rc, jiffies_to_msecs(jiffies -
				   n, jiffies_to_msecs(jiffies -
				   bp->fw_reset_timestamp));
			goto fw_reset_abort;
		}
		if (bp->pf.registered_vfs || bp->sriov_cfg) {
		} else if (n > 0) {
			if (time_after(jiffies, bp->fw_reset_timestamp +
				       (bp->fw_reset_max_dsecs * HZ / 10))) {
				clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
				bp->fw_reset_state = 0;
				netdev_err(bp->dev, "Firmware reset aborted, %d VFs still registered, sriov_cfg %d\n",
					   bp->pf.registered_vfs,
					   bp->sriov_cfg);
				netdev_err(bp->dev, "Firmware reset aborted, bnxt_get_registered_vfs() returns %d\n",
					   n);
				return;
			}
			bnxt_queue_fw_reset_work(bp, HZ / 10);
@@ -10607,6 +10628,7 @@ static void bnxt_fw_reset_task(struct work_struct *work)
		rtnl_unlock();
		bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
		return;
	}
	case BNXT_FW_RESET_STATE_RESET_FW: {
		u32 wait_dsecs = bp->fw_health->post_reset_wait_dsecs;