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

Commit 6860bd15 authored by Alexander Bondar's avatar Alexander Bondar Committed by Emmanuel Grumbach
Browse files

iwlwifi: pcie: stop sending commands to dead firmware



If we call ieee80211_hw_restart, it means that the
firmware is in bad condition and will be reset soon.
Since the firmware will be reset, there is no good
reason to keep sending host commands.

Signed-off-by: default avatarAlexander Bondar <alexander.bondar@intel.com>
Reviewed-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 3fde33b7
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -477,4 +477,12 @@ static inline bool iwl_is_rfkill_set(struct iwl_trans *trans)
		CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW);
}

static inline void iwl_nic_error(struct iwl_trans *trans)
{
	struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);

	set_bit(STATUS_FW_ERROR, &trans_pcie->status);
	iwl_op_mode_nic_error(trans->op_mode);
}

#endif /* __iwl_trans_int_pcie_h__ */
+2 −1
Original line number Diff line number Diff line
@@ -800,12 +800,13 @@ static void iwl_pcie_irq_handle_error(struct iwl_trans *trans)
	iwl_pcie_dump_csr(trans);
	iwl_dump_fh(trans, NULL);

	/* set the ERROR bit before we wake up the caller */
	set_bit(STATUS_FW_ERROR, &trans_pcie->status);
	clear_bit(STATUS_HCMD_ACTIVE, &trans_pcie->status);
	wake_up(&trans_pcie->wait_command_queue);

	local_bh_disable();
	iwl_op_mode_nic_error(trans->op_mode);
	iwl_nic_error(trans);
	local_bh_enable();
}

+3 −3
Original line number Diff line number Diff line
@@ -207,7 +207,7 @@ static void iwl_pcie_txq_stuck_timer(unsigned long data)
		IWL_ERR(trans, "scratch %d = 0x%08x\n", i,
			le32_to_cpu(txq->scratchbufs[i].scratch));

	iwl_op_mode_nic_error(trans->op_mode);
	iwl_nic_error(trans);
}

/*
@@ -1023,7 +1023,7 @@ static void iwl_pcie_cmdq_reclaim(struct iwl_trans *trans, int txq_id, int idx)
		if (nfreed++ > 0) {
			IWL_ERR(trans, "HCMD skipped: index (%d) %d %d\n",
				idx, q->write_ptr, q->read_ptr);
			iwl_op_mode_nic_error(trans->op_mode);
			iwl_nic_error(trans);
		}
	}

@@ -1562,7 +1562,7 @@ static int iwl_pcie_send_hcmd_sync(struct iwl_trans *trans,
				       get_cmd_string(trans_pcie, cmd->id));
			ret = -ETIMEDOUT;

			iwl_op_mode_nic_error(trans->op_mode);
			iwl_nic_error(trans);

			goto cancel;
		}