mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2025-09-30 07:02:36 +00:00
37 lines
1.5 KiB
Diff
37 lines
1.5 KiB
Diff
From: Alexander Wetzel <Alexander@wetzel-home.de>
|
|
Date: Thu, 17 Jul 2025 18:25:46 +0200
|
|
Subject: [PATCH] wifi: mac80211: Do not schedule stopped TXQs
|
|
|
|
Ignore TXQs with the flag IEEE80211_TXQ_STOP when scheduling a queue.
|
|
|
|
The flag is only set after all fragments have been dequeued and won't
|
|
allow dequeueing other frames as long as the flag is set.
|
|
|
|
For drivers using ieee80211_txq_schedule_start() this prevents an
|
|
loop trying to push the queued frames while IEEE80211_TXQ_STOP is set:
|
|
|
|
After setting IEEE80211_TXQ_STOP the driver will call
|
|
ieee80211_return_txq(). Which calls __ieee80211_schedule_txq(), detects
|
|
that there sill are frames in the queue and immediately restarts the
|
|
stopped TXQ. Which can't dequeue any frame and thus starts over the loop.
|
|
|
|
Signed-off-by: Alexander Wetzel <Alexander@wetzel-home.de>
|
|
Fixes: ba8c3d6f16a1 ("mac80211: add an intermediate software queue implementation")
|
|
Link: https://patch.msgid.link/20250717162547.94582-2-Alexander@wetzel-home.de
|
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|
---
|
|
|
|
--- a/net/mac80211/tx.c
|
|
+++ b/net/mac80211/tx.c
|
|
@@ -4099,7 +4099,9 @@ void __ieee80211_schedule_txq(struct iee
|
|
|
|
spin_lock_bh(&local->active_txq_lock[txq->ac]);
|
|
|
|
- has_queue = force || txq_has_queue(txq);
|
|
+ has_queue = force ||
|
|
+ (!test_bit(IEEE80211_TXQ_STOP, &txqi->flags) &&
|
|
+ txq_has_queue(txq));
|
|
if (list_empty(&txqi->schedule_order) &&
|
|
(has_queue || ieee80211_txq_keep_active(txqi))) {
|
|
/* If airtime accounting is active, always enqueue STAs at the
|