summaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2014-05-14 15:34:41 +0200
committerJohannes Berg <johannes.berg@intel.com>2014-05-14 15:48:38 +0200
commitb4b177a5556a686909e643f1e9b6434c10de079f (patch)
tree5125bf36af13ddd351655dd50c9d45b2bbe0dfee /net/mac80211/ieee80211_i.h
parentf5651986fe438c1ba05fdafa383d38bd86713d13 (diff)
downloadlinux-stable-b4b177a5556a686909e643f1e9b6434c10de079f.tar.gz
linux-stable-b4b177a5556a686909e643f1e9b6434c10de079f.tar.bz2
linux-stable-b4b177a5556a686909e643f1e9b6434c10de079f.zip
mac80211: fix on-channel remain-on-channel
Jouni reported that if a remain-on-channel was active on the same channel as the current operating channel, then the ROC would start, but any frames transmitted using mgmt-tx on the same channel would get delayed until after the ROC. The reason for this is that the ROC starts, but doesn't have any handling for "remain on the same channel", so it stops the interface queues. The later mgmt-tx then puts the frame on the interface queues (since it's on the current operating channel) and thus they get delayed until after the ROC. To fix this, add some logic to handle remaining on the same channel specially and not stop the queues etc. in this case. This not only fixes the bug but also improves behaviour in this case as data frames etc. can continue to flow. Cc: stable@vger.kernel.org Reported-by: Jouni Malinen <j@w1.fi> Tested-by: Jouni Malinen <j@w1.fi> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r--net/mac80211/ieee80211_i.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 222c28b75315..f169b6ee94ee 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -317,6 +317,7 @@ struct ieee80211_roc_work {
bool started, abort, hw_begun, notified;
bool to_be_freed;
+ bool on_channel;
unsigned long hw_start_time;