ath9k: Assign offchannel duration properly
authorSujith Manoharan <c_manoha@qca.qualcomm.com>
Wed, 10 Sep 2014 13:45:56 +0000 (19:15 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 11 Sep 2014 19:27:39 +0000 (15:27 -0400)
In multi-channel mode, an offchannel request will
be deferred if both contexts are active. The duration
of the offchannel operation is calculated but is
not stored in the scheduler state. Fix this.

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 522894ba727a9252ee544abb4f54210449645851..ae575cb44e5a5c13729bb7c0760c980eddf82e2e 100644 (file)
@@ -588,10 +588,15 @@ static void ath_chanctx_switch(struct ath_softc *sc, struct ath_chanctx *ctx,
 
        if (test_bit(ATH_OP_MULTI_CHANNEL, &common->op_flags) &&
            (sc->cur_chan != ctx) && (ctx == &sc->offchannel.chan)) {
-               sc->sched.offchannel_pending = true;
-               sc->sched.wait_switch = true;
                if (chandef)
                        ctx->chandef = *chandef;
+
+               sc->sched.offchannel_pending = true;
+               sc->sched.wait_switch = true;
+               sc->sched.offchannel_duration =
+                       jiffies_to_usecs(sc->offchannel.duration) +
+                       sc->sched.channel_switch_time;
+
                spin_unlock_bh(&sc->chan_lock);
                ath_dbg(common, CHAN_CTX,
                        "Set offchannel_pending to true\n");