diff options
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/rs.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c index a4c1e3bf4ff1..9a20468345e4 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c @@ -2691,6 +2691,8 @@ static void rs_drv_get_rate(void *mvm_r, struct ieee80211_sta *sta,  		return;  	lq_sta = mvm_sta; + +	spin_lock_bh(&lq_sta->pers.lock);  	iwl_mvm_hwrate_to_tx_rate_v1(lq_sta->last_rate_n_flags,  				     info->band, &info->control.rates[0]);  	info->control.rates[0].count = 1; @@ -2705,6 +2707,7 @@ static void rs_drv_get_rate(void *mvm_r, struct ieee80211_sta *sta,  		iwl_mvm_hwrate_to_tx_rate_v1(last_ucode_rate, info->band,  					     &txrc->reported_rate);  	} +	spin_unlock_bh(&lq_sta->pers.lock);  }  static void *rs_drv_alloc_sta(void *mvm_rate, struct ieee80211_sta *sta, @@ -3261,11 +3264,11 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,  	/* If it's locked we are in middle of init flow  	 * just wait for next tx status to update the lq_sta data  	 */ -	if (!spin_trylock(&mvmsta->deflink.lq_sta.rs_drv.pers.lock)) +	if (!spin_trylock_bh(&mvmsta->deflink.lq_sta.rs_drv.pers.lock))  		return;  	__iwl_mvm_rs_tx_status(mvm, sta, tid, info, ndp); -	spin_unlock(&mvmsta->deflink.lq_sta.rs_drv.pers.lock); +	spin_unlock_bh(&mvmsta->deflink.lq_sta.rs_drv.pers.lock);  }  #ifdef CONFIG_MAC80211_DEBUGFS @@ -4114,9 +4117,9 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm,  	} else {  		struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta); -		spin_lock(&mvmsta->deflink.lq_sta.rs_drv.pers.lock); +		spin_lock_bh(&mvmsta->deflink.lq_sta.rs_drv.pers.lock);  		rs_drv_rate_init(mvm, sta, band); -		spin_unlock(&mvmsta->deflink.lq_sta.rs_drv.pers.lock); +		spin_unlock_bh(&mvmsta->deflink.lq_sta.rs_drv.pers.lock);  	}  }  | 
