aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@nbd.name>2022-07-02 16:53:54 +0200
committerFelix Fietkau <nbd@nbd.name>2022-07-02 16:57:30 +0200
commita3946a7cd10efd7a02e8c073b7dc7b8204224568 (patch)
tree62f361da241594c23884eb65c4057247e4b15e98
parent158a5af80102dc01979ad7c405867eea6efd37dc (diff)
downloadupstream-a3946a7cd10efd7a02e8c073b7dc7b8204224568.tar.gz
upstream-a3946a7cd10efd7a02e8c073b7dc7b8204224568.tar.bz2
upstream-a3946a7cd10efd7a02e8c073b7dc7b8204224568.zip
mac80211: fix mesh queue selection issue
Signed-off-by: Felix Fietkau <nbd@nbd.name> (cherry-picked from commit 51e9d496ba7958fb9f2d3eb4bc7f257837145dd0)
-rw-r--r--package/kernel/mac80211/patches/subsys/338-mac80211-fix-queue-selection-for-mesh-OCB-interfaces.patch28
1 files changed, 28 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/subsys/338-mac80211-fix-queue-selection-for-mesh-OCB-interfaces.patch b/package/kernel/mac80211/patches/subsys/338-mac80211-fix-queue-selection-for-mesh-OCB-interfaces.patch
new file mode 100644
index 0000000000..9547db03d1
--- /dev/null
+++ b/package/kernel/mac80211/patches/subsys/338-mac80211-fix-queue-selection-for-mesh-OCB-interfaces.patch
@@ -0,0 +1,28 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Sat, 2 Jul 2022 16:41:32 +0200
+Subject: [PATCH] mac80211: fix queue selection for mesh/OCB interfaces
+
+When using iTXQ, the code assumes that there is only one vif queue for
+broadcast packets, using the BE queue. Allowing non-BE queue marking
+violates that assumption and txq->ac == skb_queue_mapping is no longer
+guaranteed. This can cause issues with queue handling in the driver and
+also causes issues with the recent ATF change, resulting in an AQL
+underflow warning.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/net/mac80211/wme.c
++++ b/net/mac80211/wme.c
+@@ -147,8 +147,8 @@ u16 __ieee80211_select_queue(struct ieee
+ bool qos;
+
+ /* all mesh/ocb stations are required to support WME */
+- if (sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
+- sdata->vif.type == NL80211_IFTYPE_OCB)
++ if (sta && (sdata->vif.type == NL80211_IFTYPE_MESH_POINT ||
++ sdata->vif.type == NL80211_IFTYPE_OCB))
+ qos = true;
+ else if (sta)
+ qos = sta->sta.wme;