aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2021-12-02 13:52:18 +0100
committerFelix Fietkau <nbd@nbd.name>2021-12-02 13:52:18 +0100
commit15d8c7aa74c202c530dbd53e53b00e418f0b64f4 (patch)
treeac4cb982b286e738f3c88b94e9b54071c7aaccf7
parent7e153900566ec1aebdc4f15f5a9d9ff9b9401cc1 (diff)
downloadupstream-15d8c7aa74c202c530dbd53e53b00e418f0b64f4.tar.gz
upstream-15d8c7aa74c202c530dbd53e53b00e418f0b64f4.tar.bz2
upstream-15d8c7aa74c202c530dbd53e53b00e418f0b64f4.zip
mac80211: fix queue assignment of aggregation start requests
Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--package/kernel/mac80211/patches/subsys/309-mac80211-send-ADDBA-requests-using-the-tid-queue-of-.patch28
1 files changed, 28 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/subsys/309-mac80211-send-ADDBA-requests-using-the-tid-queue-of-.patch b/package/kernel/mac80211/patches/subsys/309-mac80211-send-ADDBA-requests-using-the-tid-queue-of-.patch
new file mode 100644
index 0000000000..1c213289c5
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/309-mac80211-send-ADDBA-requests-using-the-tid-queue-of-.patch
@@ -0,0 +1,28 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Thu, 2 Dec 2021 13:30:05 +0100
+Subject: [PATCH] mac80211: send ADDBA requests using the tid/queue of the
+ aggregation session
+
+Sending them out on a different queue can cause a race condition where a
+number of packets in the queue may be discarded by the receiver, because
+the ADDBA request is sent too early.
+This affects any driver with software A-MPDU setup which does not allocate
+packet seqno in hardware on tx, regardless of whether iTXQ is used or not.
+The only driver I've seen that explicitly deals with this issue internally
+is mwl8k.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/net/mac80211/agg-tx.c
++++ b/net/mac80211/agg-tx.c
+@@ -106,7 +106,7 @@ static void ieee80211_send_addba_request
+ mgmt->u.action.u.addba_req.start_seq_num =
+ cpu_to_le16(start_seq_num << 4);
+
+- ieee80211_tx_skb(sdata, skb);
++ ieee80211_tx_skb_tid(sdata, skb, tid);
+ }
+
+ void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn)