spin_lock_init(&local->active_txq_lock[i]);
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
-@@ -2341,28 +2341,27 @@ void ieee80211_sta_update_pending_airtim
+@@ -2341,29 +2341,33 @@ void ieee80211_sta_update_pending_airtim
struct sta_info *sta, u8 ac,
u16 tx_airtime, bool tx_completed)
{
+- int tx_pending;
++ int tx_pending = 0;
+ atomic_t *counter;
- int tx_pending;
if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL))
return;
+ counter = &sta->airtime[ac].aql_tx_pending;
+ else
+ counter = &local->aql_bc_pending_airtime;
++
++ if (!tx_completed)
++ atomic_add(tx_airtime, counter);
++ else
++ tx_pending = atomic_sub_return(tx_airtime, counter);
++ if (tx_pending < 0)
++ atomic_cmpxchg(counter, tx_pending, 0);
++
++ if (!sta)
++ return;
+ if (!tx_completed) {
-+ atomic_add(tx_airtime, counter);
atomic_add(tx_airtime, &local->aql_total_pending_airtime);
atomic_add(tx_airtime, &local->aql_ac_pending_airtime[ac]);
return;
- atomic_cmpxchg(&sta->airtime[ac].aql_tx_pending,
- tx_pending, 0);
- }
-+ tx_pending = atomic_sub_return(tx_airtime, counter);
-+ if (tx_pending < 0)
-+ atomic_cmpxchg(counter, tx_pending, 0);
-
+-
atomic_sub(tx_airtime, &local->aql_total_pending_airtime);
tx_pending = atomic_sub_return(tx_airtime,
+ &local->aql_ac_pending_airtime[ac]);
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -3958,9 +3958,8 @@ begin: