mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-26 04:16:39 +00:00
wifi: mac80211: move key tailroom work to wiphy work
This way we hold the wiphy mutex there, as a step towards removing some of the additional locks we have. Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
777b26002b
commit
e3208fb739
6 changed files with 17 additions and 11 deletions
|
@ -1041,7 +1041,7 @@ struct ieee80211_sub_if_data {
|
|||
/* count for keys needing tailroom space allocation */
|
||||
int crypto_tx_tailroom_needed_cnt;
|
||||
int crypto_tx_tailroom_pending_dec;
|
||||
struct delayed_work dec_tailroom_needed_wk;
|
||||
struct wiphy_delayed_work dec_tailroom_needed_wk;
|
||||
|
||||
struct net_device *dev;
|
||||
struct ieee80211_local *local;
|
||||
|
|
|
@ -2149,8 +2149,8 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
|
|||
|
||||
INIT_LIST_HEAD(&sdata->key_list);
|
||||
|
||||
INIT_DELAYED_WORK(&sdata->dec_tailroom_needed_wk,
|
||||
ieee80211_delayed_tailroom_dec);
|
||||
wiphy_delayed_work_init(&sdata->dec_tailroom_needed_wk,
|
||||
ieee80211_delayed_tailroom_dec);
|
||||
|
||||
for (i = 0; i < NUM_NL80211_BANDS; i++) {
|
||||
struct ieee80211_supported_band *sband;
|
||||
|
|
|
@ -775,8 +775,9 @@ static void __ieee80211_key_destroy(struct ieee80211_key *key,
|
|||
if (delay_tailroom) {
|
||||
/* see ieee80211_delayed_tailroom_dec */
|
||||
sdata->crypto_tx_tailroom_pending_dec++;
|
||||
schedule_delayed_work(&sdata->dec_tailroom_needed_wk,
|
||||
HZ/2);
|
||||
wiphy_delayed_work_queue(sdata->local->hw.wiphy,
|
||||
&sdata->dec_tailroom_needed_wk,
|
||||
HZ / 2);
|
||||
} else {
|
||||
decrease_tailroom_need_count(sdata, 1);
|
||||
}
|
||||
|
@ -1122,7 +1123,8 @@ void ieee80211_free_keys(struct ieee80211_sub_if_data *sdata,
|
|||
struct ieee80211_key *key, *tmp;
|
||||
LIST_HEAD(keys);
|
||||
|
||||
cancel_delayed_work_sync(&sdata->dec_tailroom_needed_wk);
|
||||
wiphy_delayed_work_cancel(local->hw.wiphy,
|
||||
&sdata->dec_tailroom_needed_wk);
|
||||
|
||||
mutex_lock(&local->key_mtx);
|
||||
|
||||
|
@ -1193,7 +1195,8 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
|
|||
mutex_unlock(&local->key_mtx);
|
||||
}
|
||||
|
||||
void ieee80211_delayed_tailroom_dec(struct work_struct *wk)
|
||||
void ieee80211_delayed_tailroom_dec(struct wiphy *wiphy,
|
||||
struct wiphy_work *wk)
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* Copyright 2002-2004, Instant802 Networks, Inc.
|
||||
* Copyright 2005, Devicescape Software, Inc.
|
||||
* Copyright (C) 2019, 2022 Intel Corporation
|
||||
* Copyright (C) 2019, 2022-2023 Intel Corporation
|
||||
*/
|
||||
|
||||
#ifndef IEEE80211_KEY_H
|
||||
|
@ -174,6 +174,7 @@ int ieee80211_key_switch_links(struct ieee80211_sub_if_data *sdata,
|
|||
#define rcu_dereference_check_key_mtx(local, ref) \
|
||||
rcu_dereference_check(ref, lockdep_is_held(&((local)->key_mtx)))
|
||||
|
||||
void ieee80211_delayed_tailroom_dec(struct work_struct *wk);
|
||||
void ieee80211_delayed_tailroom_dec(struct wiphy *wiphy,
|
||||
struct wiphy_work *wk);
|
||||
|
||||
#endif /* IEEE80211_KEY_H */
|
||||
|
|
|
@ -372,7 +372,8 @@ static void ieee80211_restart_work(struct work_struct *work)
|
|||
sdata_unlock(sdata);
|
||||
}
|
||||
}
|
||||
flush_delayed_work(&sdata->dec_tailroom_needed_wk);
|
||||
wiphy_delayed_work_flush(local->hw.wiphy,
|
||||
&sdata->dec_tailroom_needed_wk);
|
||||
}
|
||||
ieee80211_scan_cancel(local);
|
||||
|
||||
|
|
|
@ -161,7 +161,8 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
|
|||
break;
|
||||
}
|
||||
|
||||
flush_delayed_work(&sdata->dec_tailroom_needed_wk);
|
||||
wiphy_delayed_work_flush(local->hw.wiphy,
|
||||
&sdata->dec_tailroom_needed_wk);
|
||||
drv_remove_interface(local, sdata);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue