提交 db2e6bd4 编写于 作者: J Johannes Berg 提交者: John W. Linville

mac80211: add queue debugfs file

I suspect that some driver bugs can cause queues to be
stopped while they shouldn't be, but it's hard to find
out whether that is the case or not without having any
visible information about the queues. This adds a file
to debugfs that allows us to see the queues' statuses.
Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 3b319aae
...@@ -163,6 +163,29 @@ static const struct file_operations noack_ops = { ...@@ -163,6 +163,29 @@ static const struct file_operations noack_ops = {
.open = mac80211_open_file_generic .open = mac80211_open_file_generic
}; };
static ssize_t queues_read(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
struct ieee80211_local *local = file->private_data;
unsigned long flags;
char buf[IEEE80211_MAX_QUEUES * 20];
int q, res = 0;
spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
for (q = 0; q < local->hw.queues; q++)
res += sprintf(buf + res, "%02d: %#.8lx/%d\n", q,
local->queue_stop_reasons[q],
__netif_subqueue_stopped(local->mdev, q));
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
return simple_read_from_buffer(user_buf, count, ppos, buf, res);
}
static const struct file_operations queues_ops = {
.read = queues_read,
.open = mac80211_open_file_generic
};
/* statistics stuff */ /* statistics stuff */
#define DEBUGFS_STATS_FILE(name, buflen, fmt, value...) \ #define DEBUGFS_STATS_FILE(name, buflen, fmt, value...) \
...@@ -298,6 +321,7 @@ void debugfs_hw_add(struct ieee80211_local *local) ...@@ -298,6 +321,7 @@ void debugfs_hw_add(struct ieee80211_local *local)
DEBUGFS_ADD(total_ps_buffered); DEBUGFS_ADD(total_ps_buffered);
DEBUGFS_ADD(wep_iv); DEBUGFS_ADD(wep_iv);
DEBUGFS_ADD(tsf); DEBUGFS_ADD(tsf);
DEBUGFS_ADD(queues);
DEBUGFS_ADD_MODE(reset, 0200); DEBUGFS_ADD_MODE(reset, 0200);
DEBUGFS_ADD(noack); DEBUGFS_ADD(noack);
...@@ -350,6 +374,7 @@ void debugfs_hw_del(struct ieee80211_local *local) ...@@ -350,6 +374,7 @@ void debugfs_hw_del(struct ieee80211_local *local)
DEBUGFS_DEL(total_ps_buffered); DEBUGFS_DEL(total_ps_buffered);
DEBUGFS_DEL(wep_iv); DEBUGFS_DEL(wep_iv);
DEBUGFS_DEL(tsf); DEBUGFS_DEL(tsf);
DEBUGFS_DEL(queues);
DEBUGFS_DEL(reset); DEBUGFS_DEL(reset);
DEBUGFS_DEL(noack); DEBUGFS_DEL(noack);
......
...@@ -783,6 +783,7 @@ struct ieee80211_local { ...@@ -783,6 +783,7 @@ struct ieee80211_local {
struct dentry *total_ps_buffered; struct dentry *total_ps_buffered;
struct dentry *wep_iv; struct dentry *wep_iv;
struct dentry *tsf; struct dentry *tsf;
struct dentry *queues;
struct dentry *reset; struct dentry *reset;
struct dentry *noack; struct dentry *noack;
struct dentry *statistics; struct dentry *statistics;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册