|
@@ -2597,8 +2597,18 @@ static void iwl_mvm_purge_deferred_tx_frames(struct iwl_mvm *mvm,
|
|
|
spin_lock_bh(&mvm_sta->lock);
|
|
|
for (i = 0; i <= IWL_MAX_TID_COUNT; i++) {
|
|
|
tid_data = &mvm_sta->tid_data[i];
|
|
|
- while ((skb = __skb_dequeue(&tid_data->deferred_tx_frames)))
|
|
|
+
|
|
|
+ while ((skb = __skb_dequeue(&tid_data->deferred_tx_frames))) {
|
|
|
+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * The first deferred frame should've stopped the MAC
|
|
|
+ * queues, so we should never get a second deferred
|
|
|
+ * frame for the RA/TID.
|
|
|
+ */
|
|
|
+ iwl_mvm_start_mac_queues(mvm, info->hw_queue);
|
|
|
ieee80211_free_txskb(mvm->hw, skb);
|
|
|
+ }
|
|
|
}
|
|
|
spin_unlock_bh(&mvm_sta->lock);
|
|
|
}
|