aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/ath9k.h
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2010-06-12 00:33:55 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-06-14 15:39:31 -0400
commit97923b14a5a13e6d59b07eccfbb71f4981c00cb0 (patch)
tree064999e0904c64484fe754703186183f9130ecd4 /drivers/net/wireless/ath/ath9k/ath9k.h
parenta6d2055b02dde1067075795274672720baadd3ca (diff)
ath9k: fix queue stopping threshold
ath9k tries to prevent WMM queue tx buffer starvation caused by traffic on different queues by limiting the number of pending frames in a tx queue (tracked in the ath_buf structure). This had a leak issue, because the a skb can be reassigned to a different ath_buf in the tx path, causing the pending frame counter to become inaccurate. To fix this, track the number of frames in an array in the softc, using the mac80211 queue mapping as index. 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/ath9k.h')
-rw-r--r--drivers/net/wireless/ath/ath9k/ath9k.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
index 6aa8fa6010a..1a19aea8c88 100644
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -207,7 +207,6 @@ struct ath_txq {
207 struct list_head txq_fifo_pending; 207 struct list_head txq_fifo_pending;
208 u8 txq_headidx; 208 u8 txq_headidx;
209 u8 txq_tailidx; 209 u8 txq_tailidx;
210 int pending_frames;
211}; 210};
212 211
213struct ath_atx_ac { 212struct ath_atx_ac {
@@ -245,7 +244,6 @@ struct ath_buf {
245 struct ath_buf_state bf_state; 244 struct ath_buf_state bf_state;
246 dma_addr_t bf_dmacontext; 245 dma_addr_t bf_dmacontext;
247 struct ath_wiphy *aphy; 246 struct ath_wiphy *aphy;
248 struct ath_txq *txq;
249}; 247};
250 248
251struct ath_atx_tid { 249struct ath_atx_tid {
@@ -296,6 +294,7 @@ struct ath_tx {
296 struct list_head txbuf; 294 struct list_head txbuf;
297 struct ath_txq txq[ATH9K_NUM_TX_QUEUES]; 295 struct ath_txq txq[ATH9K_NUM_TX_QUEUES];
298 struct ath_descdma txdma; 296 struct ath_descdma txdma;
297 int pending_frames[WME_NUM_AC];
299}; 298};
300 299
301struct ath_rx_edma { 300struct ath_rx_edma {