]> Git Repo - linux.git/commitdiff
wifi: iwlwifi: mvm: don't wait for tx queues if firmware is dead
authorEmmanuel Grumbach <[email protected]>
Sun, 25 Aug 2024 16:17:04 +0000 (19:17 +0300)
committerJohannes Berg <[email protected]>
Mon, 26 Aug 2024 15:42:38 +0000 (17:42 +0200)
There is a WARNING in iwl_trans_wait_tx_queues_empty() (that was
recently converted from just a message), that can be hit if we
wait for TX queues to become empty after firmware died. Clearly,
we can't expect anything from the firmware after it's declared dead.

Don't call iwl_trans_wait_tx_queues_empty() in this case. While it could
be a good idea to stop the flow earlier, the flush functions do some
maintenance work that is not related to the firmware, so keep that part
of the code running even when the firmware is not running.

Signed-off-by: Emmanuel Grumbach <[email protected]>
Signed-off-by: Miri Korenblit <[email protected]>
Link: https://patch.msgid.link/20240825191257.a7cbd794cee9.I44a739fbd4ffcc46b83844dd1c7b2eb0c7b270f6@changeid
[edit commit message]
Signed-off-by: Johannes Berg <[email protected]>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

index 835a05b9183331fa2f94bad31944f3043bf3a0c1..625ccf566e1c2a2f2e322159f75b0008f1763a14 100644 (file)
@@ -5818,6 +5818,10 @@ static void iwl_mvm_flush_no_vif(struct iwl_mvm *mvm, u32 queues, bool drop)
        int i;
 
        if (!iwl_mvm_has_new_tx_api(mvm)) {
+               /* we can't ask the firmware anything if it is dead */
+               if (test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED,
+                            &mvm->status))
+                       return;
                if (drop) {
                        guard(mvm)(mvm);
                        iwl_mvm_flush_tx_path(mvm,
@@ -5911,8 +5915,11 @@ void iwl_mvm_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 
        /* this can take a while, and we may need/want other operations
         * to succeed while doing this, so do it without the mutex held
+        * If the firmware is dead, this can't work...
         */
-       if (!drop && !iwl_mvm_has_new_tx_api(mvm))
+       if (!drop && !iwl_mvm_has_new_tx_api(mvm) &&
+           !test_bit(IWL_MVM_STATUS_HW_RESTART_REQUESTED,
+                     &mvm->status))
                iwl_trans_wait_tx_queues_empty(mvm->trans, msk);
 }
 
This page took 0.070541 seconds and 4 git commands to generate.