iwlwifi: mvm: don't transmit on unallocated queue
authorJohannes Berg <johannes.berg@intel.com>
Sat, 25 Apr 2020 10:04:56 +0000 (13:04 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 8 May 2020 06:53:02 +0000 (09:53 +0300)
We can currently end up transmitting on an unallocated queue, if
the allocation fails. Stop doing that, by simply not transmitting.
We don't have any better strategy here, unfortunately, but the
previous commits make that much less likely.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20200425130140.dcf1801f25ef.I6d71e13ea042765800f2ee41401b8eb282527c34@changeid
drivers/net/wireless/intel/iwlwifi/mvm/sta.c

index b36aef1d61b04a0bcada1e70404ac241a32fbe20..44d4720b7629ca31a1a379168c99587296a78ba2 100644 (file)
@@ -1400,7 +1400,17 @@ void iwl_mvm_add_new_dqa_stream_wk(struct work_struct *wk)
                if (tid == IEEE80211_NUM_TIDS)
                        tid = IWL_MAX_TID_COUNT;
 
-               iwl_mvm_sta_alloc_queue(mvm, txq->sta, txq->ac, tid);
+               /*
+                * We can't really do much here, but if this fails we can't
+                * transmit anyway - so just don't transmit the frame etc.
+                * and let them back up ... we've tried our best to allocate
+                * a queue in the function itself.
+                */
+               if (iwl_mvm_sta_alloc_queue(mvm, txq->sta, txq->ac, tid)) {
+                       list_del_init(&mvmtxq->list);
+                       continue;
+               }
+
                list_del_init(&mvmtxq->list);
                local_bh_disable();
                iwl_mvm_mac_itxq_xmit(mvm->hw, txq);