ath9k: add a fix to reduce the number of spurious tx hang detections
authorFelix Fietkau <nbd@openwrt.org>
Fri, 15 Mar 2013 22:24:36 +0000 (22:24 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 15 Mar 2013 22:24:36 +0000 (22:24 +0000)
Backport of r36040

git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@36052 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/mac80211/patches/300-pending_work.patch

index 7cc4569673450ba0dd30eef7a521951bf7ec1c84..ad9c5004a8a068d89a5d2daea7aa6b9baaeb3b73 100644 (file)
  #define ATH_RSSI_LPF_LEN              10
  #define RSSI_LPF_THRESHOLD            -20
  #define ATH_RSSI_EP_MULTIPLIER     (1<<7)
+--- a/drivers/net/wireless/ath/ath9k/link.c
++++ b/drivers/net/wireless/ath/ath9k/link.c
+@@ -31,21 +31,21 @@ void ath_tx_complete_poll_work(struct wo
+       sc->tx_complete_poll_work_seen++;
+ #endif
+-      for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
+-              if (ATH_TXQ_SETUP(sc, i)) {
+-                      txq = &sc->tx.txq[i];
+-                      ath_txq_lock(sc, txq);
+-                      if (txq->axq_depth) {
+-                              if (txq->axq_tx_inprogress) {
+-                                      needreset = true;
+-                                      ath_txq_unlock(sc, txq);
+-                                      break;
+-                              } else {
+-                                      txq->axq_tx_inprogress = true;
+-                              }
++      for (i = 0; i < IEEE80211_NUM_ACS; i++) {
++              txq = sc->tx.txq_map[i];
++
++              ath_txq_lock(sc, txq);
++              if (txq->axq_depth) {
++                      if (txq->axq_tx_inprogress) {
++                              needreset = true;
++                              ath_txq_unlock(sc, txq);
++                              break;
++                      } else {
++                              txq->axq_tx_inprogress = true;
+                       }
+-                      ath_txq_unlock_complete(sc, txq);
+               }
++              ath_txq_unlock_complete(sc, txq);
++      }
+       if (needreset) {
+               ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,