mac80211: Update to version 5.1-rc2-1
[openwrt/staging/hauke.git] / package / kernel / mac80211 / patches / subsys / 358-mac80211-make-ieee80211_schedule_txq-schedule-empty-.patch
index 7469c47fbd56a954586e82926b33cd95fd9c54fd..d1d44e864271aa086bc686f4315c4b0792d6c0ab 100644 (file)
@@ -19,11 +19,68 @@ new packets in mac80211) would not get serviced.
 
 Fixes: 89cea7493a346 ("ath9k: Switch to mac80211 TXQ scheduling and airtime APIs")
 Signed-off-by: Felix Fietkau <nbd@nbd.name>
+Acked-by: Toke Høiland-Jørgensen <toke@redhat.com>
 ---
+ drivers/net/wireless/ath/ath10k/htt_rx.c |  2 +-
+ drivers/net/wireless/ath/ath10k/mac.c    |  4 ++--
+ drivers/net/wireless/ath/ath9k/xmit.c    |  5 ++++-
+ include/net/mac80211.h                   | 24 ++++++++++++++++++++----
+ net/mac80211/tx.c                        | 10 ++++++----
+ 5 files changed, 33 insertions(+), 12 deletions(-)
 
+--- a/drivers/net/wireless/ath/ath10k/htt_rx.c
++++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
+@@ -2728,7 +2728,7 @@ static void ath10k_htt_rx_tx_fetch_ind(s
+                       num_msdus++;
+                       num_bytes += ret;
+               }
+-              ieee80211_return_txq(hw, txq);
++              ieee80211_return_txq(hw, txq, false);
+               ieee80211_txq_schedule_end(hw, txq->ac);
+               record->num_msdus = cpu_to_le16(num_msdus);
+--- a/drivers/net/wireless/ath/ath10k/mac.c
++++ b/drivers/net/wireless/ath/ath10k/mac.c
+@@ -4089,7 +4089,7 @@ static int ath10k_mac_schedule_txq(struc
+                       if (ret < 0)
+                               break;
+               }
+-              ieee80211_return_txq(hw, txq);
++              ieee80211_return_txq(hw, txq, false);
+               ath10k_htt_tx_txq_update(hw, txq);
+               if (ret == -EBUSY)
+                       break;
+@@ -4374,7 +4374,7 @@ static void ath10k_mac_op_wake_tx_queue(
+               if (ret < 0)
+                       break;
+       }
+-      ieee80211_return_txq(hw, txq);
++      ieee80211_return_txq(hw, txq, false);
+       ath10k_htt_tx_txq_update(hw, txq);
+ out:
+       ieee80211_txq_schedule_end(hw, ac);
+--- a/drivers/net/wireless/ath/ath9k/xmit.c
++++ b/drivers/net/wireless/ath/ath9k/xmit.c
+@@ -1938,12 +1938,15 @@ void ath_txq_schedule(struct ath_softc *
+               goto out;
+       while ((queue = ieee80211_next_txq(hw, txq->mac80211_qnum))) {
++              bool force;
++
+               tid = (struct ath_atx_tid *)queue->drv_priv;
+               ret = ath_tx_sched_aggr(sc, txq, tid);
+               ath_dbg(common, QUEUE, "ath_tx_sched_aggr returned %d\n", ret);
+-              ieee80211_return_txq(hw, queue);
++              force = !skb_queue_empty(&tid->retry_q);
++              ieee80211_return_txq(hw, queue, force);
+       }
+ out:
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -6226,26 +6226,42 @@ static inline void ieee80211_txq_schedul
+@@ -6290,26 +6290,42 @@ static inline void ieee80211_txq_schedul
  {
  }