summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k/ath9k.h
diff options
context:
space:
mode:
authorFelix Fietkau2010-06-12 06:33:55 +0200
committerJohn W. Linville2010-06-14 21:39:31 +0200
commit97923b14a5a13e6d59b07eccfbb71f4981c00cb0 (patch)
tree064999e0904c64484fe754703186183f9130ecd4 /drivers/net/wireless/ath/ath9k/ath9k.h
parentath9k: fix extending the rx timestamp with the hardware TSF (diff)
downloadkernel-qcow2-linux-97923b14a5a13e6d59b07eccfbb71f4981c00cb0.tar.gz
kernel-qcow2-linux-97923b14a5a13e6d59b07eccfbb71f4981c00cb0.tar.xz
kernel-qcow2-linux-97923b14a5a13e6d59b07eccfbb71f4981c00cb0.zip
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 6aa8fa6010ac..1a19aea8c88c 100644
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -207,7 +207,6 @@ struct ath_txq {
struct list_head txq_fifo_pending;
u8 txq_headidx;
u8 txq_tailidx;
- int pending_frames;
};
struct ath_atx_ac {
@@ -245,7 +244,6 @@ struct ath_buf {
struct ath_buf_state bf_state;
dma_addr_t bf_dmacontext;
struct ath_wiphy *aphy;
- struct ath_txq *txq;
};
struct ath_atx_tid {
@@ -296,6 +294,7 @@ struct ath_tx {
struct list_head txbuf;
struct ath_txq txq[ATH9K_NUM_TX_QUEUES];
struct ath_descdma txdma;
+ int pending_frames[WME_NUM_AC];
};
struct ath_rx_edma {