iwlwifi: allow to define the stuck queue timer per queue
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Mon, 12 Jan 2015 12:38:29 +0000 (14:38 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 1 Feb 2015 13:57:23 +0000 (15:57 +0200)
Different queue can have different behavior. While it can be
unacceptable for a certain queue to be stuck for 2 seconds
(e.g. the command queue), it can happen that another queue
will stay stuck for even longer (a queue servicing a power
saving client in GO).
The op_mode can even make the timeout be a function of the
listen interval.

Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
13 files changed:
drivers/net/wireless/iwlwifi/dvm/main.c
drivers/net/wireless/iwlwifi/dvm/tx.c
drivers/net/wireless/iwlwifi/dvm/ucode.c
drivers/net/wireless/iwlwifi/iwl-config.h
drivers/net/wireless/iwlwifi/iwl-trans.h
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
drivers/net/wireless/iwlwifi/mvm/mvm.h
drivers/net/wireless/iwlwifi/mvm/ops.c
drivers/net/wireless/iwlwifi/mvm/sta.c
drivers/net/wireless/iwlwifi/mvm/utils.c
drivers/net/wireless/iwlwifi/pcie/internal.h
drivers/net/wireless/iwlwifi/pcie/trans.c
drivers/net/wireless/iwlwifi/pcie/tx.c

index a21400c..c4d6dd7 100644 (file)
@@ -1228,7 +1228,8 @@ static struct iwl_op_mode *iwl_op_mode_dvm_start(struct iwl_trans *trans,
        trans_cfg.no_reclaim_cmds = no_reclaim_cmds;
        trans_cfg.n_no_reclaim_cmds = ARRAY_SIZE(no_reclaim_cmds);
        trans_cfg.rx_buf_size_8k = iwlwifi_mod_params.amsdu_size_8K;
-       trans_cfg.queue_watchdog_timeout = IWL_WATCHDOG_DISABLED;
+       trans_cfg.cmd_q_wdg_timeout = IWL_WATCHDOG_DISABLED;
+
        trans_cfg.command_names = iwl_dvm_cmd_strings;
        trans_cfg.cmd_fifo = IWLAGN_CMD_FIFO_NUM;
 
index d1ce3ce..1e40a12 100644 (file)
@@ -715,7 +715,7 @@ int iwlagn_tx_agg_oper(struct iwl_priv *priv, struct ieee80211_vif *vif,
        fifo = ctx->ac_to_fifo[tid_to_ac[tid]];
 
        iwl_trans_txq_enable(priv->trans, q, fifo, sta_priv->sta_id, tid,
-                            buf_size, ssn);
+                            buf_size, ssn, 0);
 
        /*
         * If the limit is 0, then it wasn't initialised yet,
index d5cee15..4dbef7e 100644 (file)
@@ -267,7 +267,7 @@ static int iwl_alive_notify(struct iwl_priv *priv)
        for (i = 0; i < n_queues; i++)
                if (queue_to_txf[i] != IWL_TX_FIFO_UNUSED)
                        iwl_trans_ac_txq_enable(priv->trans, i,
-                                               queue_to_txf[i]);
+                                               queue_to_txf[i], 0);
 
        priv->passive_no_rx = false;
        priv->transport_queue_stop = 0;
index 445bff6..4b190d9 100644 (file)
@@ -126,7 +126,7 @@ enum iwl_led_mode {
 
 /* TX queue watchdog timeouts in mSecs */
 #define IWL_WATCHDOG_DISABLED  0
-#define IWL_DEF_WD_TIMEOUT     2000
+#define IWL_DEF_WD_TIMEOUT     2500
 #define IWL_LONG_WD_TIMEOUT    10000
 #define IWL_MAX_WD_TIMEOUT     120000