aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-08-27 07:45:28 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-08-27 13:53:31 -0400
commit5b714c6a3753dad0798a70a049e15c7f6bc9446b (patch)
tree39345981014b14e881cbfbef87a4a3a74469fada /net/mac80211/ieee80211_i.h
parentc35d02705e9c2db90a89b29142046b4ffd5a76e5 (diff)
mac80211: fix offchannel queue stop
Somebody noticed this problem, and I outlined to them how to fix it, but haven't heard back from them. So while I was adding the state field I figured I could use it to fix it. The problem, as I understand it, is that when we go offchannel while the driver has a queue stopped, the driver will likely start draining the queue and then enable it while offchannel. This in turn will enable the interface queue, and that leads to transmitting data frames on the wrong channel. Fix this by keeping track of offchannel status per interface, and not enabling the interface queues on interfaces that are offchannel when the driver enables a queue. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r--net/mac80211/ieee80211_i.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index d529bd5eab47..9af50fbcd48b 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -477,9 +477,12 @@ enum ieee80211_sub_if_data_flags {
477 * @SDATA_STATE_RUNNING: virtual interface is up & running; this 477 * @SDATA_STATE_RUNNING: virtual interface is up & running; this
478 * mirrors netif_running() but is separate for interface type 478 * mirrors netif_running() but is separate for interface type
479 * change handling while the interface is up 479 * change handling while the interface is up
480 * @SDATA_STATE_OFFCHANNEL: This interface is currently in offchannel
481 * mode, so queues are stopped
480 */ 482 */
481enum ieee80211_sdata_state_bits { 483enum ieee80211_sdata_state_bits {
482 SDATA_STATE_RUNNING, 484 SDATA_STATE_RUNNING,
485 SDATA_STATE_OFFCHANNEL,
483}; 486};
484 487
485struct ieee80211_sub_if_data { 488struct ieee80211_sub_if_data {