aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/recv.c
diff options
context:
space:
mode:
authorRajkumar Manoharan <rmanohar@qca.qualcomm.com>2012-03-14 20:04:27 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-04-09 16:05:53 -0400
commit01e189182d62d6ee3603233fc88f9235e9830b92 (patch)
tree6dee11b6c24d86b99747dc625bdeaed6a7da8f5e /drivers/net/wireless/ath/ath9k/recv.c
parent54da20d83f0e7fe87b75aec44bc2b1448d119320 (diff)
ath9k: recover ar9380 chips from rare stuck state
In the experiment with Azimuth ADEPT-n testbed where the APs transmit power was reduced to 25% and the signal strength was futher attenuated by 20dB and induced a path loss of ~7dB, the station was reporting beacon losses and the following issue were observed. * rx clear is stuck at low for more than 300ms * dcu chain and complete state is stuck at one of the hang signature This patch triggers the hang detection logic that recovers the chip from any of the above conditions. As the issue was originally reported in ChromeOs with AR9382 chips, this detection logic is enabled only for AR9380/2 chips. Cc: Paul Stewart <pstew@google.com> Reported-by: Gary Morain <gmorain@google.com> Signed-off-by: Rajkumar Manoharan <rmanohar@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/recv.c')
-rw-r--r--drivers/net/wireless/ath/ath9k/recv.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
index 1c4583c7ff7c..858801735282 100644
--- a/drivers/net/wireless/ath/ath9k/recv.c
+++ b/drivers/net/wireless/ath/ath9k/recv.c
@@ -1855,6 +1855,10 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
1855 if (retval) 1855 if (retval)
1856 goto requeue_drop_frag; 1856 goto requeue_drop_frag;
1857 1857
1858 if (rs.is_mybeacon) {
1859 sc->hw_busy_count = 0;
1860 ath_start_rx_poll(sc, 3);
1861 }
1858 /* Ensure we always have an skb to requeue once we are done 1862 /* Ensure we always have an skb to requeue once we are done
1859 * processing the current buffer's skb */ 1863 * processing the current buffer's skb */
1860 requeue_skb = ath_rxbuf_alloc(common, common->rx_bufsize, GFP_ATOMIC); 1864 requeue_skb = ath_rxbuf_alloc(common, common->rx_bufsize, GFP_ATOMIC);