ath9k: Process beacons properly
authorSujith Manoharan <c_manoha@qca.qualcomm.com>
Fri, 17 Oct 2014 02:10:10 +0000 (07:40 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 27 Oct 2014 18:16:14 +0000 (14:16 -0400)
When the current operating channel context has
been marked as ATH_CHANCTX_STATE_FORCE_ACTIVE,
do not process beacons that might be received,
since we have to wait for the station to become
authorized.

Also, since the cached TSF value will be zero
initially do not rearm the timer in this
case when a beacon is received, since it results
in spurious values.

Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/channel.c

index 16bed6acec93591e8c7e5ea6f3b6bf47914a09d2..135f74cd61475382dc4043eeff39e7d2ba0b9887 100644 (file)
@@ -495,10 +495,15 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
                    sc->cur_chan == &sc->offchannel.chan)
                        break;
 
-               ath_chanctx_adjust_tbtt_delta(sc);
                sc->sched.beacon_pending = false;
                sc->sched.beacon_miss = 0;
 
+               if (sc->sched.state == ATH_CHANCTX_STATE_FORCE_ACTIVE ||
+                   !sc->cur_chan->tsf_val)
+                       break;
+
+               ath_chanctx_adjust_tbtt_delta(sc);
+
                /* TSF time might have been updated by the incoming beacon,
                 * need update the channel switch timer to reflect the change.
                 */