Commit 2d15d213 authored by Johannes Berg's avatar Johannes Berg
Browse files

wifi: iwlwifi: mvm: restart device through NMI



When some channel context manipulations fail, the device
is going to be restarted to try to recover. Make this go
through a real FW restart via an NMI so the transport is
aware of it and can later handle escalation, and to make
it easier to restructure the code later.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20241227095718.96b732029d20.I2e729f402db58a76cea620b6f62a02da49a10b48@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 14eef4e2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -5387,7 +5387,7 @@ iwl_mvm_switch_vif_chanctx_swap(struct iwl_mvm *mvm,

out_restart:
	/* things keep failing, better restart the hw */
	iwl_mvm_nic_restart(mvm);
	iwl_force_nmi(mvm->trans);
	return ret;
}

@@ -5423,7 +5423,7 @@ iwl_mvm_switch_vif_chanctx_reassign(struct iwl_mvm *mvm,

out_restart:
	/* things keep failing, better restart the hw */
	iwl_mvm_nic_restart(mvm);
	iwl_force_nmi(mvm->trans);
	return ret;
}

+0 −1
Original line number Diff line number Diff line
@@ -2586,7 +2586,6 @@ void iwl_mvm_tcm_add_vif(struct iwl_mvm *mvm, struct ieee80211_vif *vif);
void iwl_mvm_tcm_rm_vif(struct iwl_mvm *mvm, struct ieee80211_vif *vif);
u8 iwl_mvm_tcm_load_percentage(u32 airtime, u32 elapsed);

void iwl_mvm_nic_restart(struct iwl_mvm *mvm);
unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm,
				    struct ieee80211_vif *vif);
void iwl_mvm_connection_loss(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
+1 −1
Original line number Diff line number Diff line
@@ -2025,7 +2025,7 @@ static void iwl_mvm_reprobe_wk(struct work_struct *wk)
	module_put(THIS_MODULE);
}

void iwl_mvm_nic_restart(struct iwl_mvm *mvm)
static void iwl_mvm_nic_restart(struct iwl_mvm *mvm)
{
	iwl_abort_notification_waits(&mvm->notif_wait);
	iwl_dbg_tlv_del_timers(mvm->trans);