iwlwifi: pcie: delete the Tx queue timer earlier upon firmware crash
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 10 May 2017 10:03:01 +0000 (13:03 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 23 Jun 2017 09:20:55 +0000 (12:20 +0300)
When the firmware crashes, the transmit queues can't make
any progress. This is why we stop the counter that monitor
the transmit queues' activity.
The call that notifies the error to the op_mode may take
a bit of time, so stop the timer of the transmit queues
earlier.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/pcie/rx.c

index fa5f39f72d22b6139140a6e5baf6e066d1a932c5..a5c0f69423d23654417a2ae1f0981dd909377278 100644 (file)
@@ -1413,16 +1413,16 @@ static void iwl_pcie_irq_handle_error(struct iwl_trans *trans)
                return;
        }
 
-       /* The STATUS_FW_ERROR bit is set in this function. This must happen
-        * before we wake up the command caller, to ensure a proper cleanup. */
-       iwl_trans_fw_error(trans);
-
        for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) {
                if (!trans_pcie->txq[i])
                        continue;
                del_timer(&trans_pcie->txq[i]->stuck_timer);
        }
 
+       /* The STATUS_FW_ERROR bit is set in this function. This must happen
+        * before we wake up the command caller, to ensure a proper cleanup. */
+       iwl_trans_fw_error(trans);
+
        clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status);
        wake_up(&trans_pcie->wait_command_queue);
 }