44 lines
1.1 KiB
Diff
44 lines
1.1 KiB
Diff
|
From: Sujith Manoharan <c_manoha@qca.qualcomm.com>
|
||
|
Date: Fri, 17 Oct 2014 07:40:17 +0530
|
||
|
Subject: [PATCH] ath9k: Fix offchannel flush timeout
|
||
|
|
||
|
An offchannel operation also needs to have
|
||
|
a flush timeout that doesn't exceed the NoA
|
||
|
absence duration of a GO context, so use
|
||
|
channel_switch_time. The first offchannel
|
||
|
operation is set a flush timeout of 10ms since
|
||
|
channel_switch_time will be zero.
|
||
|
|
||
|
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
|
||
|
---
|
||
|
|
||
|
--- a/drivers/net/wireless/ath/ath9k/channel.c
|
||
|
+++ b/drivers/net/wireless/ath/ath9k/channel.c
|
||
|
@@ -207,6 +207,26 @@ void ath_chanctx_check_active(struct ath
|
||
|
if (!ctx)
|
||
|
return;
|
||
|
|
||
|
+ if (ctx == &sc->offchannel.chan) {
|
||
|
+ spin_lock_bh(&sc->chan_lock);
|
||
|
+
|
||
|
+ if (likely(sc->sched.channel_switch_time))
|
||
|
+ ctx->flush_timeout =
|
||
|
+ usecs_to_jiffies(sc->sched.channel_switch_time);
|
||
|
+ else
|
||
|
+ ctx->flush_timeout =
|
||
|
+ msecs_to_jiffies(10);
|
||
|
+
|
||
|
+ spin_unlock_bh(&sc->chan_lock);
|
||
|
+
|
||
|
+ /*
|
||
|
+ * There is no need to iterate over the
|
||
|
+ * active/assigned channel contexts if
|
||
|
+ * the current context is offchannel.
|
||
|
+ */
|
||
|
+ return;
|
||
|
+ }
|
||
|
+
|
||
|
ictx = ctx;
|
||
|
|
||
|
list_for_each_entry(avp, &ctx->vifs, list) {
|