diff options
author | Eyal Shapira <eyal@wizery.com> | 2012-08-06 07:26:16 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2012-08-20 07:20:56 -0400 |
commit | aa7a00809cf6afe3cd6f5af2889110b47b798667 (patch) | |
tree | 4b2d537fdad3058f61ab0bb894b935afc75442b5 /net/mac80211/ieee80211_i.h | |
parent | f609a43dca2964a8a604ef554be92fa11c3b4c41 (diff) |
mac80211: avoid using synchronize_rcu in ieee80211_set_probe_resp
This could take a while (100ms+) and may delay sending assoc resp
in AP mode with WPS or P2P GO (as setting the probe resp takes place
there). We've encountered situations where the delay was big enough
to cause connection problems with devices like Galaxy Nexus.
Switch to using call_rcu with a free handler.
[Arik - rework to use plain buffer and instead of skb]
Signed-off-by: Eyal Shapira <eyal@wizery.com>
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index d1a7c58a8c62..e22aee83ba53 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -272,9 +272,15 @@ struct beacon_data { | |||
272 | struct rcu_head rcu_head; | 272 | struct rcu_head rcu_head; |
273 | }; | 273 | }; |
274 | 274 | ||
275 | struct probe_resp { | ||
276 | struct rcu_head rcu_head; | ||
277 | int len; | ||
278 | u8 data[0]; | ||
279 | }; | ||
280 | |||
275 | struct ieee80211_if_ap { | 281 | struct ieee80211_if_ap { |
276 | struct beacon_data __rcu *beacon; | 282 | struct beacon_data __rcu *beacon; |
277 | struct sk_buff __rcu *probe_resp; | 283 | struct probe_resp __rcu *probe_resp; |
278 | 284 | ||
279 | struct list_head vlans; | 285 | struct list_head vlans; |
280 | 286 | ||