aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/main.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-01-09 10:16:55 -0500
committerJohn W. Linville <linville@tuxdriver.com>2013-01-11 14:12:02 -0500
commit7fc00a3054b70b1794c2d64db703eb467ad0365c (patch)
tree3a8c6672e339337b16a6e4bb736d3c6f2d3bb238 /drivers/net/wireless/ath/ath9k/main.c
parent3adcf20afb585993ffee24de36d1975f6b26b120 (diff)
ath9k: add a better fix for the rx tasklet vs rx flush race
Ensure that the rx tasklet is no longer running when entering the reset path. Also remove the distinction between flush and no-flush frame processing. If a frame has been received and ACKed by the hardware, the stack needs to see it, so that the BA receive window does not go out of sync. Cc: stable@vger.kernel.org Signed-off-by: Felix Fietkau <nbd@openwrt.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/main.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index be30a9af1528..d3cf01ec2d15 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -196,6 +196,8 @@ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
196 ath9k_debug_samp_bb_mac(sc); 196 ath9k_debug_samp_bb_mac(sc);
197 ath9k_hw_disable_interrupts(ah); 197 ath9k_hw_disable_interrupts(ah);
198 198
199 tasklet_disable(&sc->intr_tq);
200
199 if (!ath_stoprecv(sc)) 201 if (!ath_stoprecv(sc))
200 ret = false; 202 ret = false;
201 203
@@ -210,6 +212,8 @@ static bool ath_prepare_reset(struct ath_softc *sc, bool retry_tx, bool flush)
210 ath_flushrecv(sc); 212 ath_flushrecv(sc);
211 } 213 }
212 214
215 tasklet_enable(&sc->intr_tq);
216
213 return ret; 217 return ret;
214} 218}
215 219