]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/2.6.32.3/ath9k-fix-missed-error-codes-in-the-tx-status-check.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 2.6.32.3 / ath9k-fix-missed-error-codes-in-the-tx-status-check.patch
1 From 5b479a076de091590423a9e6dfc2584126b28761 Mon Sep 17 00:00:00 2001
2 From: Felix Fietkau <nbd@openwrt.org>
3 Date: Thu, 24 Dec 2009 14:04:32 +0100
4 Subject: ath9k: fix missed error codes in the tx status check
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 From: Felix Fietkau <nbd@openwrt.org>
10
11 commit 5b479a076de091590423a9e6dfc2584126b28761 upstream.
12
13 My previous change added in:
14
15 commit 815833e7ecf0b9a017315cae6aef4d7cd9517681
16 ath9k: fix tx status reporting
17
18 was not checking all possible tx error conditions. This could possibly
19 lead to throughput issues due to slow rate control adaption or missed
20 retransmissions of failed A-MPDU frames.
21
22 This patch adds a mask for all possible error conditions and uses it
23 in the xmit ok check.
24
25 Reported-by: Björn Smedman <bjorn.smedman@venatech.se>
26 Signed-off-by: Felix Fietkau <nbd@openwrt.org>
27 Signed-off-by: John W. Linville <linville@tuxdriver.com>
28 Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
29
30 ---
31 drivers/net/wireless/ath/ath9k/mac.h | 3 +++
32 drivers/net/wireless/ath/ath9k/xmit.c | 2 +-
33 2 files changed, 4 insertions(+), 1 deletion(-)
34
35 --- a/drivers/net/wireless/ath/ath9k/mac.h
36 +++ b/drivers/net/wireless/ath/ath9k/mac.h
37 @@ -77,6 +77,9 @@
38 #define ATH9K_TXERR_XTXOP 0x08
39 #define ATH9K_TXERR_TIMER_EXPIRED 0x10
40 #define ATH9K_TX_ACKED 0x20
41 +#define ATH9K_TXERR_MASK \
42 + (ATH9K_TXERR_XRETRY | ATH9K_TXERR_FILT | ATH9K_TXERR_FIFO | \
43 + ATH9K_TXERR_XTXOP | ATH9K_TXERR_TIMER_EXPIRED)
44
45 #define ATH9K_TX_BA 0x01
46 #define ATH9K_TX_PWRMGMT 0x02
47 --- a/drivers/net/wireless/ath/ath9k/xmit.c
48 +++ b/drivers/net/wireless/ath/ath9k/xmit.c
49 @@ -2020,7 +2020,7 @@ static void ath_tx_processq(struct ath_s
50 if (bf_isaggr(bf))
51 txq->axq_aggr_depth--;
52
53 - txok = !(ds->ds_txstat.ts_status & ATH9K_TXERR_FILT);
54 + txok = !(ds->ds_txstat.ts_status & ATH9K_TXERR_MASK);
55 txq->axq_tx_inprogress = false;
56 spin_unlock_bh(&txq->axq_lock);
57