aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-03-06 05:06:37 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-03-06 15:16:17 -0500
commit62e2c102cc1d2600381410c089ca9a37359577d2 (patch)
treed4f6dc51c8713579f52782fba76d2012ce415abb
parent12ce8ba3eb09bb83509a459835917a3100ad8db1 (diff)
ath5k: do not stop queues for full calibration
Some calibration types interfere with tx activity, but the queue stop does not prevent that. In fact, some calibration types need tx activity to properly function, so stopping the queues for them is counterproductive. In some tests this patch has been shown to improve stability, especially in AP or ad-hoc mode. Signed-off-by: Felix Fietkau <nbd@openwrt.org> Acked-by: Nick Kossifidis <mickflemm@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/ath/ath5k/base.c14
1 files changed, 2 insertions, 12 deletions
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index b51d58c414d2..0e643b016b32 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -2332,15 +2332,6 @@ ath5k_calibrate_work(struct work_struct *work)
2332 "got new rfgain, resetting\n"); 2332 "got new rfgain, resetting\n");
2333 ieee80211_queue_work(ah->hw, &ah->reset_work); 2333 ieee80211_queue_work(ah->hw, &ah->reset_work);
2334 } 2334 }
2335
2336 /* TODO: On full calibration we should stop TX here,
2337 * so that it doesn't interfere (mostly due to gain_f
2338 * calibration that messes with tx packets -see phy.c).
2339 *
2340 * NOTE: Stopping the queues from above is not enough
2341 * to stop TX but saves us from disconecting (at least
2342 * we don't lose packets). */
2343 ieee80211_stop_queues(ah->hw);
2344 } else 2335 } else
2345 ah->ah_cal_mask |= AR5K_CALIBRATION_SHORT; 2336 ah->ah_cal_mask |= AR5K_CALIBRATION_SHORT;
2346 2337
@@ -2355,10 +2346,9 @@ ath5k_calibrate_work(struct work_struct *work)
2355 ah->curchan->center_freq)); 2346 ah->curchan->center_freq));
2356 2347
2357 /* Clear calibration flags */ 2348 /* Clear calibration flags */
2358 if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) { 2349 if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL)
2359 ieee80211_wake_queues(ah->hw);
2360 ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL; 2350 ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL;
2361 } else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT) 2351 else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT)
2362 ah->ah_cal_mask &= ~AR5K_CALIBRATION_SHORT; 2352 ah->ah_cal_mask &= ~AR5K_CALIBRATION_SHORT;
2363} 2353}
2364 2354