diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 12 | 
1 files changed, 10 insertions, 2 deletions
| diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c index a327893c6dce..80b9a115245f 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c @@ -1293,12 +1293,14 @@ int iwl_mvm_mac_start(struct ieee80211_hw *hw)  {  	struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);  	int ret; +	int retry, max_retry = 0;  	mutex_lock(&mvm->mutex);  	/* we are starting the mac not in error flow, and restart is enabled */  	if (!test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED, &mvm->status) &&  	    iwlwifi_mod_params.fw_restart) { +		max_retry = IWL_MAX_INIT_RETRY;  		/*  		 * This will prevent mac80211 recovery flows to trigger during  		 * init failures @@ -1306,7 +1308,13 @@ int iwl_mvm_mac_start(struct ieee80211_hw *hw)  		set_bit(IWL_MVM_STATUS_STARTING, &mvm->status);  	} -	ret = __iwl_mvm_mac_start(mvm); +	for (retry = 0; retry <= max_retry; retry++) { +		ret = __iwl_mvm_mac_start(mvm); +		if (!ret) +			break; + +		IWL_ERR(mvm, "mac start retry %d\n", retry); +	}  	clear_bit(IWL_MVM_STATUS_STARTING, &mvm->status);  	mutex_unlock(&mvm->mutex); @@ -1970,7 +1978,6 @@ static void iwl_mvm_mac_remove_interface(struct ieee80211_hw *hw,  		mvm->p2p_device_vif = NULL;  	} -	iwl_mvm_unset_link_mapping(mvm, vif, &vif->bss_conf);  	iwl_mvm_mac_ctxt_remove(mvm, vif);  	RCU_INIT_POINTER(mvm->vif_id_to_mac[mvmvif->id], NULL); @@ -1979,6 +1986,7 @@ static void iwl_mvm_mac_remove_interface(struct ieee80211_hw *hw,  		mvm->monitor_on = false;  out: +	iwl_mvm_unset_link_mapping(mvm, vif, &vif->bss_conf);  	if (vif->type == NL80211_IFTYPE_AP ||  	    vif->type == NL80211_IFTYPE_ADHOC) {  		iwl_mvm_dealloc_int_sta(mvm, &mvmvif->deflink.mcast_sta); | 
