wifi: mac80211: Proper mark iTXQs for resumption
authorAlexander Wetzel <alexander@wetzel-home.de>
Fri, 30 Dec 2022 12:18:49 +0000 (13:18 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Feb 2023 07:34:35 +0000 (08:34 +0100)
commit7b8fe53d2a1da48db02ae961b29b8ee2f5515861
treea48523e4862b266b801e5752bfab99d7d1745b54
parentc932501bc232985f2c5580f52cc9a799e168900b
wifi: mac80211: Proper mark iTXQs for resumption

commit 4444bc2116aecdcde87dce80373540adc8bd478b upstream.

When a running wake_tx_queue() call is aborted due to a hw queue stop
the corresponding iTXQ is not always correctly marked for resumption:
wake_tx_push_queue() can stops the queue run without setting
@IEEE80211_TXQ_STOP_NETIF_TX.

Without the @IEEE80211_TXQ_STOP_NETIF_TX flag __ieee80211_wake_txqs()
will not schedule a new queue run and remaining frames in the queue get
stuck till another frame is queued to it.

Fix the issue for all drivers - also the ones with custom wake_tx_queue
callbacks - by moving the logic into ieee80211_tx_dequeue() and drop the
redundant @txqs_stopped.

@IEEE80211_TXQ_STOP_NETIF_TX is also renamed to @IEEE80211_TXQ_DIRTY to
better describe the flag.

Fixes: c850e31f79f0 ("wifi: mac80211: add internal handler for wake_tx_queue")
Signed-off-by: Alexander Wetzel <alexander@wetzel-home.de>
Link: https://lore.kernel.org/r/20221230121850.218810-1-alexander@wetzel-home.de
Cc: stable@vger.kernel.org
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/net/mac80211.h
net/mac80211/debugfs_sta.c
net/mac80211/driver-ops.h
net/mac80211/ieee80211_i.h
net/mac80211/tx.c
net/mac80211/util.c