iwlwifi: jiffies based tx queues watchdog
This patch replace monitor/recover timer by watchdog based on time stamp. New code allow to discover hangs more precisely. Timeout values are currently doubled monitoring period values of previous timer. This have to be tuned based of firmware timing capabilities. Tested on 3945, 4965, 5300, 6300. Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
abc471dc31
commit
22de94de7d
@@ -1534,32 +1534,26 @@ static ssize_t iwl_dbgfs_ucode_bt_stats_read(struct file *file,
|
||||
user_buf, count, ppos);
|
||||
}
|
||||
|
||||
static ssize_t iwl_dbgfs_monitor_period_write(struct file *file,
|
||||
static ssize_t iwl_dbgfs_wd_timeout_write(struct file *file,
|
||||
const char __user *user_buf,
|
||||
size_t count, loff_t *ppos) {
|
||||
|
||||
struct iwl_priv *priv = file->private_data;
|
||||
char buf[8];
|
||||
int buf_size;
|
||||
int period;
|
||||
int timeout;
|
||||
|
||||
memset(buf, 0, sizeof(buf));
|
||||
buf_size = min(count, sizeof(buf) - 1);
|
||||
if (copy_from_user(buf, user_buf, buf_size))
|
||||
return -EFAULT;
|
||||
if (sscanf(buf, "%d", &period) != 1)
|
||||
if (sscanf(buf, "%d", &timeout) != 1)
|
||||
return -EINVAL;
|
||||
if (period < 0 || period > IWL_MAX_MONITORING_PERIOD)
|
||||
priv->cfg->base_params->monitor_recover_period =
|
||||
IWL_DEF_MONITORING_PERIOD;
|
||||
else
|
||||
priv->cfg->base_params->monitor_recover_period = period;
|
||||
if (timeout < 0 || timeout > IWL_MAX_WD_TIMEOUT)
|
||||
timeout = IWL_DEF_WD_TIMEOUT;
|
||||
|
||||
if (priv->cfg->base_params->monitor_recover_period)
|
||||
mod_timer(&priv->monitor_recover, jiffies + msecs_to_jiffies(
|
||||
priv->cfg->base_params->monitor_recover_period));
|
||||
else
|
||||
del_timer_sync(&priv->monitor_recover);
|
||||
priv->cfg->base_params->wd_timeout = timeout;
|
||||
iwl_setup_watchdog(priv);
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -1686,7 +1680,7 @@ DEBUGFS_READ_FILE_OPS(rxon_flags);
|
||||
DEBUGFS_READ_FILE_OPS(rxon_filter_flags);
|
||||
DEBUGFS_WRITE_FILE_OPS(txfifo_flush);
|
||||
DEBUGFS_READ_FILE_OPS(ucode_bt_stats);
|
||||
DEBUGFS_WRITE_FILE_OPS(monitor_period);
|
||||
DEBUGFS_WRITE_FILE_OPS(wd_timeout);
|
||||
DEBUGFS_READ_FILE_OPS(bt_traffic);
|
||||
DEBUGFS_READ_WRITE_FILE_OPS(protection_mode);
|
||||
DEBUGFS_READ_FILE_OPS(reply_tx_error);
|
||||
@@ -1763,7 +1757,7 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name)
|
||||
DEBUGFS_ADD_FILE(reply_tx_error, dir_debug, S_IRUSR);
|
||||
DEBUGFS_ADD_FILE(rxon_flags, dir_debug, S_IWUSR);
|
||||
DEBUGFS_ADD_FILE(rxon_filter_flags, dir_debug, S_IWUSR);
|
||||
DEBUGFS_ADD_FILE(monitor_period, dir_debug, S_IWUSR);
|
||||
DEBUGFS_ADD_FILE(wd_timeout, dir_debug, S_IWUSR);
|
||||
if (priv->cfg->bt_params && priv->cfg->bt_params->advanced_bt_coexist)
|
||||
DEBUGFS_ADD_FILE(bt_traffic, dir_debug, S_IRUSR);
|
||||
if (priv->cfg->base_params->sensitivity_calib_by_driver)
|
||||
|
||||
Reference in New Issue
Block a user