aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-debugfs.c
diff options
context:
space:
mode:
authorStanislaw Gruszka <sgruszka@redhat.com>2010-12-03 09:41:48 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-12-06 16:01:29 -0500
commit22de94de7de78b8de2fb1f2df5aa85b5556cfcfd (patch)
treef965d5f907ffc039ca146c22a5c2e87744cbc604 /drivers/net/wireless/iwlwifi/iwl-debugfs.c
parentabc471dc31be15f9fee5ec77f25d31b927d334b9 (diff)
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>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-debugfs.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-debugfs.c24
1 files changed, 9 insertions, 15 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
index 3cc58420d445..d36836376e6b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
@@ -1534,32 +1534,26 @@ static ssize_t iwl_dbgfs_ucode_bt_stats_read(struct file *file,
1534 user_buf, count, ppos); 1534 user_buf, count, ppos);
1535} 1535}
1536 1536
1537static ssize_t iwl_dbgfs_monitor_period_write(struct file *file, 1537static ssize_t iwl_dbgfs_wd_timeout_write(struct file *file,
1538 const char __user *user_buf, 1538 const char __user *user_buf,
1539 size_t count, loff_t *ppos) { 1539 size_t count, loff_t *ppos) {
1540 1540
1541 struct iwl_priv *priv = file->private_data; 1541 struct iwl_priv *priv = file->private_data;
1542 char buf[8]; 1542 char buf[8];
1543 int buf_size; 1543 int buf_size;
1544 int period; 1544 int timeout;
1545 1545
1546 memset(buf, 0, sizeof(buf)); 1546 memset(buf, 0, sizeof(buf));
1547 buf_size = min(count, sizeof(buf) - 1); 1547 buf_size = min(count, sizeof(buf) - 1);
1548 if (copy_from_user(buf, user_buf, buf_size)) 1548 if (copy_from_user(buf, user_buf, buf_size))
1549 return -EFAULT; 1549 return -EFAULT;
1550 if (sscanf(buf, "%d", &period) != 1) 1550 if (sscanf(buf, "%d", &timeout) != 1)
1551 return -EINVAL; 1551 return -EINVAL;
1552 if (period < 0 || period > IWL_MAX_MONITORING_PERIOD) 1552 if (timeout < 0 || timeout > IWL_MAX_WD_TIMEOUT)
1553 priv->cfg->base_params->monitor_recover_period = 1553 timeout = IWL_DEF_WD_TIMEOUT;
1554 IWL_DEF_MONITORING_PERIOD;
1555 else
1556 priv->cfg->base_params->monitor_recover_period = period;
1557 1554
1558 if (priv->cfg->base_params->monitor_recover_period) 1555 priv->cfg->base_params->wd_timeout = timeout;
1559 mod_timer(&priv->monitor_recover, jiffies + msecs_to_jiffies( 1556 iwl_setup_watchdog(priv);
1560 priv->cfg->base_params->monitor_recover_period));
1561 else
1562 del_timer_sync(&priv->monitor_recover);
1563 return count; 1557 return count;
1564} 1558}
1565 1559
@@ -1686,7 +1680,7 @@ DEBUGFS_READ_FILE_OPS(rxon_flags);
1686DEBUGFS_READ_FILE_OPS(rxon_filter_flags); 1680DEBUGFS_READ_FILE_OPS(rxon_filter_flags);
1687DEBUGFS_WRITE_FILE_OPS(txfifo_flush); 1681DEBUGFS_WRITE_FILE_OPS(txfifo_flush);
1688DEBUGFS_READ_FILE_OPS(ucode_bt_stats); 1682DEBUGFS_READ_FILE_OPS(ucode_bt_stats);
1689DEBUGFS_WRITE_FILE_OPS(monitor_period); 1683DEBUGFS_WRITE_FILE_OPS(wd_timeout);
1690DEBUGFS_READ_FILE_OPS(bt_traffic); 1684DEBUGFS_READ_FILE_OPS(bt_traffic);
1691DEBUGFS_READ_WRITE_FILE_OPS(protection_mode); 1685DEBUGFS_READ_WRITE_FILE_OPS(protection_mode);
1692DEBUGFS_READ_FILE_OPS(reply_tx_error); 1686DEBUGFS_READ_FILE_OPS(reply_tx_error);
@@ -1763,7 +1757,7 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name)
1763 DEBUGFS_ADD_FILE(reply_tx_error, dir_debug, S_IRUSR); 1757 DEBUGFS_ADD_FILE(reply_tx_error, dir_debug, S_IRUSR);
1764 DEBUGFS_ADD_FILE(rxon_flags, dir_debug, S_IWUSR); 1758 DEBUGFS_ADD_FILE(rxon_flags, dir_debug, S_IWUSR);
1765 DEBUGFS_ADD_FILE(rxon_filter_flags, dir_debug, S_IWUSR); 1759 DEBUGFS_ADD_FILE(rxon_filter_flags, dir_debug, S_IWUSR);
1766 DEBUGFS_ADD_FILE(monitor_period, dir_debug, S_IWUSR); 1760 DEBUGFS_ADD_FILE(wd_timeout, dir_debug, S_IWUSR);
1767 if (priv->cfg->bt_params && priv->cfg->bt_params->advanced_bt_coexist) 1761 if (priv->cfg->bt_params && priv->cfg->bt_params->advanced_bt_coexist)
1768 DEBUGFS_ADD_FILE(bt_traffic, dir_debug, S_IRUSR); 1762 DEBUGFS_ADD_FILE(bt_traffic, dir_debug, S_IRUSR);
1769 if (priv->cfg->base_params->sensitivity_calib_by_driver) 1763 if (priv->cfg->base_params->sensitivity_calib_by_driver)