ath9k: merge aggregation fix from r22688
authorFelix Fietkau <nbd@openwrt.org>
Tue, 17 Aug 2010 13:25:19 +0000 (13:25 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 17 Aug 2010 13:25:19 +0000 (13:25 +0000)
SVN-Revision: 22689

package/mac80211/patches/560-ath9k_baw_fix.patch [new file with mode: 0644]

diff --git a/package/mac80211/patches/560-ath9k_baw_fix.patch b/package/mac80211/patches/560-ath9k_baw_fix.patch
new file mode 100644 (file)
index 0000000..50e4b99
--- /dev/null
@@ -0,0 +1,36 @@
+--- a/drivers/net/wireless/ath/ath9k/ath9k.h
++++ b/drivers/net/wireless/ath/ath9k/ath9k.h
+@@ -254,7 +254,7 @@ struct ath_atx_tid {
+       struct list_head buf_q;
+       struct ath_node *an;
+       struct ath_atx_ac *ac;
+-      struct ath_buf *tx_buf[ATH_TID_MAX_BUFS];
++      unsigned long tx_buf[BITS_TO_LONGS(ATH_TID_MAX_BUFS)];
+       u16 seq_start;
+       u16 seq_next;
+       u16 baw_size;
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -168,9 +168,9 @@ static void ath_tx_update_baw(struct ath
+       index  = ATH_BA_INDEX(tid->seq_start, seqno);
+       cindex = (tid->baw_head + index) & (ATH_TID_MAX_BUFS - 1);
+-      tid->tx_buf[cindex] = NULL;
++      __clear_bit(cindex, tid->tx_buf);
+-      while (tid->baw_head != tid->baw_tail && !tid->tx_buf[tid->baw_head]) {
++      while (tid->baw_head != tid->baw_tail && !test_bit(tid->baw_head, tid->tx_buf)) {
+               INCR(tid->seq_start, IEEE80211_SEQ_MAX);
+               INCR(tid->baw_head, ATH_TID_MAX_BUFS);
+       }
+@@ -186,9 +186,7 @@ static void ath_tx_addto_baw(struct ath_
+       index  = ATH_BA_INDEX(tid->seq_start, bf->bf_seqno);
+       cindex = (tid->baw_head + index) & (ATH_TID_MAX_BUFS - 1);
+-
+-      BUG_ON(tid->tx_buf[cindex] != NULL);
+-      tid->tx_buf[cindex] = bf;
++      __set_bit(cindex, tid->tx_buf);
+       if (index >= ((tid->baw_tail - tid->baw_head) &
+               (ATH_TID_MAX_BUFS - 1))) {