iwlwifi: pcie: restart the driver when a command times out
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 11 Sep 2013 11:16:20 +0000 (14:16 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 11 Oct 2013 07:56:57 +0000 (09:56 +0200)
This should really not happen. If it does, restarting is the
only way to recover since the driver and the firmware might
very well be out of sync. Moreover, iwl_op_mode_nic_error
will print data that might help debugging.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/pcie/tx.c

index a70a30e..b416841 100644 (file)
@@ -1529,7 +1529,6 @@ static int iwl_pcie_send_hcmd_sync(struct iwl_trans *trans,
                                "Error sending %s: time out after %dms.\n",
                                get_cmd_string(trans_pcie, cmd->id),
                                jiffies_to_msecs(HOST_COMPLETE_TIMEOUT));
-                       dump_stack();
 
                        IWL_ERR(trans,
                                "Current CMD queue read_ptr %d write_ptr %d\n",
@@ -1540,6 +1539,9 @@ static int iwl_pcie_send_hcmd_sync(struct iwl_trans *trans,
                                       "Clearing HCMD_ACTIVE for command %s\n",
                                       get_cmd_string(trans_pcie, cmd->id));
                        ret = -ETIMEDOUT;
+
+                       iwl_op_mode_nic_error(trans->op_mode);
+
                        goto cancel;
                }
        }