History

wifi: mac80211: Proper mark iTXQs for resumption

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.

Alexander Wetzel committed 3 years ago

Commit 4444bc21 parent e66b7926 files · +21 −54Browse files

Showing the changes to include/net (1 of 6 files). Show all

Unified · Split

include/net/mac80211.h+0−4
@@ -1832,8 +1832,6 @@ struct ieee80211_vif_cfg { · 1831 unmodified lines
1832 * @drv_priv: data area for driver use, will always be aligned to1832 * @drv_priv: data area for driver use, will always be aligned to
1833 * sizeof(void \*).1833 * sizeof(void \*).
1834 * @txq: the multicast data TX queue1834 * @txq: the multicast data TX queue
1835 * @txqs_stopped: per AC flag to indicate that intermediate TXQs are stopped,
1836 * protected by fq->lock.
1837 * @offload_flags: 802.3 -> 802.11 enapsulation offload flags, see1835 * @offload_flags: 802.3 -> 802.11 enapsulation offload flags, see
1838 * &enum ieee80211_offload_flags.1836 * &enum ieee80211_offload_flags.
1839 * @mbssid_tx_vif: Pointer to the transmitting interface if MBSSID is enabled.1837 * @mbssid_tx_vif: Pointer to the transmitting interface if MBSSID is enabled.
@@ -1863,8 +1861,6 @@ struct ieee80211_vif { · 23 unmodified lines
1863 bool probe_req_reg;1861 bool probe_req_reg;
1864 bool rx_mcast_action_reg;1862 bool rx_mcast_action_reg;
1865 1863
1866 bool txqs_stopped[IEEE80211_NUM_ACS];
1867
1868 struct ieee80211_vif *mbssid_tx_vif;1864 struct ieee80211_vif *mbssid_tx_vif;
1869 1865
1870 /* must be last */1866 /* must be last */