mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
iwlwifi: mvm: replace RS mutex with a spin_lock
The solution with the worker still had a bug, as in order to get sta, rcu_read_lock should be used and thus no mutex can be used inside iwl_mvm_rs_rate_init. Also, spin_lock is a simpler solution, no need to spawn a dedicated worker. Signed-off-by: Gregory Greenman <gregory.greenman@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
committed by
Johannes Berg
parent
cd4d6b0bcd
commit
f5d88fa334
File diff suppressed because it is too large
Load Diff
@@ -376,9 +376,6 @@ struct iwl_lq_sta {
|
||||
/* tx power reduce for this sta */
|
||||
int tpc_reduce;
|
||||
|
||||
/* avoid races of reinit and update table from rx_tx */
|
||||
struct mutex mutex;
|
||||
|
||||
/* persistent fields - initialized only once - keep last! */
|
||||
struct lq_sta_pers {
|
||||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
@@ -393,6 +390,7 @@ struct iwl_lq_sta {
|
||||
s8 last_rssi;
|
||||
struct rs_rate_stats tx_stats[RS_COLUMN_COUNT][IWL_RATE_COUNT];
|
||||
struct iwl_mvm *drv;
|
||||
spinlock_t lock; /* for races in reinit/update table */
|
||||
} pers;
|
||||
};
|
||||
|
||||
@@ -443,8 +441,6 @@ struct iwl_mvm_sta;
|
||||
int iwl_mvm_tx_protection(struct iwl_mvm *mvm, struct iwl_mvm_sta *mvmsta,
|
||||
bool enable);
|
||||
|
||||
void iwl_mvm_rs_init_wk(struct work_struct *wk);
|
||||
|
||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||
void iwl_mvm_reset_frame_stats(struct iwl_mvm *mvm);
|
||||
#endif
|
||||
|
||||
@@ -1685,9 +1685,7 @@ int iwl_mvm_add_sta(struct iwl_mvm *mvm,
|
||||
if (iwl_mvm_has_tlc_offload(mvm))
|
||||
iwl_mvm_rs_add_sta(mvm, mvm_sta);
|
||||
else
|
||||
mutex_init(&mvm_sta->lq_sta.rs_drv.mutex);
|
||||
|
||||
INIT_WORK(&mvm_sta->rs_init_wk, iwl_mvm_rs_init_wk);
|
||||
spin_lock_init(&mvm_sta->lq_sta.rs_drv.pers.lock);
|
||||
|
||||
iwl_mvm_toggle_tx_ant(mvm, &mvm_sta->tx_ant);
|
||||
|
||||
@@ -1850,8 +1848,6 @@ int iwl_mvm_rm_sta(struct iwl_mvm *mvm,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
cancel_work_sync(&mvm_sta->rs_init_wk);
|
||||
|
||||
/* flush its queues here since we are freeing mvm_sta */
|
||||
ret = iwl_mvm_flush_sta(mvm, mvm_sta, false, 0);
|
||||
if (ret)
|
||||
|
||||
@@ -432,7 +432,6 @@ struct iwl_mvm_sta {
|
||||
struct iwl_lq_sta_rs_fw rs_fw;
|
||||
struct iwl_lq_sta rs_drv;
|
||||
} lq_sta;
|
||||
struct work_struct rs_init_wk;
|
||||
struct ieee80211_vif *vif;
|
||||
struct iwl_mvm_key_pn __rcu *ptk_pn[4];
|
||||
struct iwl_mvm_rxq_dup_data *dup_data;
|
||||
|
||||
Reference in New Issue
Block a user