diff options
author | Arik Nemtsov <arik@wizery.com> | 2014-07-11 03:01:36 +0300 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-07-15 16:00:00 -0400 |
commit | e65628691f04f1a9ce57d8036c9b119c43031187 (patch) | |
tree | 9a59d65558e3e85c08500bafd9bb31564ee888a2 /drivers/net/wireless/ti | |
parent | d8c5a48d2751086de9ed0ae9ff97ab094e2d534d (diff) |
wlcore: don't switch channels on disconnected STA vifs
Sending the FW a channel switch command on a disconnected
vif may result in a beacon loss event. Avoid this corner case.
Signed-off-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ti')
-rw-r--r-- | drivers/net/wireless/ti/wlcore/main.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c index d92f578dd95c..ec211413ffe6 100644 --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c @@ -5192,6 +5192,10 @@ static void wl12xx_op_channel_switch(struct ieee80211_hw *hw, if (unlikely(wl->state == WLCORE_STATE_OFF)) { wl12xx_for_each_wlvif_sta(wl, wlvif) { struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif); + + if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) + continue; + ieee80211_chswitch_done(vif, false); } goto out; @@ -5207,6 +5211,9 @@ static void wl12xx_op_channel_switch(struct ieee80211_hw *hw, wl12xx_for_each_wlvif_sta(wl, wlvif) { unsigned long delay_usec; + if (!test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) + continue; + ret = wl->ops->channel_switch(wl, wlvif, ch_switch); if (ret) goto out_sleep; |