mac80211: use call_rcu() on sta deletion
mac80211 calls synchronize_rcu() on sta deletion, which increase the roaming time significantly. Convert it into a call_rcu() mechanism, in order to avoid blocking. Since some of the cleanup functions might sleep, schedule from the call_rcu callback a new work that will do the actual cleanup. In order to make sure the cleanup occurs before the interface went down, flush local->workqueue on ieee80211_do_stop(). Signed-off-by: Yoni Divinsky <yoni.divinsky@ti.com> Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:

committed by
Johannes Berg

parent
e548c49e6d
commit
b22cfcfcae
@@ -287,6 +287,7 @@ struct sta_ampdu_mlme {
|
||||
struct sta_info {
|
||||
/* General information, mostly static */
|
||||
struct list_head list;
|
||||
struct rcu_head rcu_head;
|
||||
struct sta_info __rcu *hnext;
|
||||
struct ieee80211_local *local;
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
@@ -297,6 +298,7 @@ struct sta_info {
|
||||
spinlock_t lock;
|
||||
|
||||
struct work_struct drv_unblock_wk;
|
||||
struct work_struct free_sta_wk;
|
||||
|
||||
u16 listen_interval;
|
||||
|
||||
|
Reference in New Issue
Block a user