提交 f13a48bd 编写于 作者: D David Howells 提交者: Linus Torvalds

SLOW_WORK: Move slow_work's proc file to debugfs

Move slow_work's debugging proc file to debugfs.
Signed-off-by: NDavid Howells <dhowells@redhat.com>
Requested-and-acked-by: NIngo Molnar <mingo@elte.hu>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 df87f8c0
...@@ -279,9 +279,9 @@ The slow-work thread pool has a number of configurables: ...@@ -279,9 +279,9 @@ The slow-work thread pool has a number of configurables:
VIEWING EXECUTING AND QUEUED ITEMS VIEWING EXECUTING AND QUEUED ITEMS
================================== ==================================
If CONFIG_SLOW_WORK_PROC is enabled, a proc file is made available: If CONFIG_SLOW_WORK_DEBUG is enabled, a debugfs file is made available:
/proc/slow_work_rq /sys/kernel/debug/slow_work/runqueue
through which the list of work items being executed and the queues of items to through which the list of work items being executed and the queues of items to
be executed may be viewed. The owner of a work item is given the chance to be executed may be viewed. The owner of a work item is given the chance to
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include <linux/timer.h> #include <linux/timer.h>
struct slow_work; struct slow_work;
#ifdef CONFIG_SLOW_WORK_PROC #ifdef CONFIG_SLOW_WORK_DEBUG
struct seq_file; struct seq_file;
#endif #endif
...@@ -42,8 +42,8 @@ struct slow_work_ops { ...@@ -42,8 +42,8 @@ struct slow_work_ops {
/* execute a work item */ /* execute a work item */
void (*execute)(struct slow_work *work); void (*execute)(struct slow_work *work);
#ifdef CONFIG_SLOW_WORK_PROC #ifdef CONFIG_SLOW_WORK_DEBUG
/* describe a work item for /proc */ /* describe a work item for debugfs */
void (*desc)(struct slow_work *work, struct seq_file *m); void (*desc)(struct slow_work *work, struct seq_file *m);
#endif #endif
}; };
...@@ -64,7 +64,7 @@ struct slow_work { ...@@ -64,7 +64,7 @@ struct slow_work {
#define SLOW_WORK_DELAYED 5 /* item is struct delayed_slow_work with active timer */ #define SLOW_WORK_DELAYED 5 /* item is struct delayed_slow_work with active timer */
const struct slow_work_ops *ops; /* operations table for this item */ const struct slow_work_ops *ops; /* operations table for this item */
struct list_head link; /* link in queue */ struct list_head link; /* link in queue */
#ifdef CONFIG_SLOW_WORK_PROC #ifdef CONFIG_SLOW_WORK_DEBUG
struct timespec mark; /* jiffies at which queued or exec begun */ struct timespec mark; /* jiffies at which queued or exec begun */
#endif #endif
}; };
......
...@@ -1098,12 +1098,12 @@ config SLOW_WORK ...@@ -1098,12 +1098,12 @@ config SLOW_WORK
See Documentation/slow-work.txt. See Documentation/slow-work.txt.
config SLOW_WORK_PROC config SLOW_WORK_DEBUG
bool "Slow work debugging through /proc" bool "Slow work debugging through debugfs"
default n default n
depends on SLOW_WORK && PROC_FS depends on SLOW_WORK && DEBUG_FS
help help
Display the contents of the slow work run queue through /proc, Display the contents of the slow work run queue through debugfs,
including items currently executing. including items currently executing.
See Documentation/slow-work.txt. See Documentation/slow-work.txt.
......
...@@ -94,7 +94,7 @@ obj-$(CONFIG_X86_DS) += trace/ ...@@ -94,7 +94,7 @@ obj-$(CONFIG_X86_DS) += trace/
obj-$(CONFIG_RING_BUFFER) += trace/ obj-$(CONFIG_RING_BUFFER) += trace/
obj-$(CONFIG_SMP) += sched_cpupri.o obj-$(CONFIG_SMP) += sched_cpupri.o
obj-$(CONFIG_SLOW_WORK) += slow-work.o obj-$(CONFIG_SLOW_WORK) += slow-work.o
obj-$(CONFIG_SLOW_WORK_PROC) += slow-work-proc.o obj-$(CONFIG_SLOW_WORK_DEBUG) += slow-work-debugfs.o
obj-$(CONFIG_PERF_EVENTS) += perf_event.o obj-$(CONFIG_PERF_EVENTS) += perf_event.o
ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER),y) ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER),y)
......
...@@ -57,7 +57,7 @@ static void slow_work_print_mark(struct seq_file *m, struct slow_work *work) ...@@ -57,7 +57,7 @@ static void slow_work_print_mark(struct seq_file *m, struct slow_work *work)
} }
/* /*
* Describe a slow work item for /proc * Describe a slow work item for debugfs
*/ */
static int slow_work_runqueue_show(struct seq_file *m, void *v) static int slow_work_runqueue_show(struct seq_file *m, void *v)
{ {
...@@ -211,7 +211,7 @@ static const struct seq_operations slow_work_runqueue_ops = { ...@@ -211,7 +211,7 @@ static const struct seq_operations slow_work_runqueue_ops = {
}; };
/* /*
* open "/proc/slow_work_rq" to list queue contents * open "/sys/kernel/debug/slow_work/runqueue" to list queue contents
*/ */
static int slow_work_runqueue_open(struct inode *inode, struct file *file) static int slow_work_runqueue_open(struct inode *inode, struct file *file)
{ {
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/freezer.h> #include <linux/freezer.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/proc_fs.h> #include <linux/debugfs.h>
#include "slow-work.h" #include "slow-work.h"
static void slow_work_cull_timeout(unsigned long); static void slow_work_cull_timeout(unsigned long);
...@@ -138,7 +138,7 @@ static void slow_work_clear_thread_processing(int id) {} ...@@ -138,7 +138,7 @@ static void slow_work_clear_thread_processing(int id) {}
/* /*
* Data for tracking currently executing items for indication through /proc * Data for tracking currently executing items for indication through /proc
*/ */
#ifdef CONFIG_SLOW_WORK_PROC #ifdef CONFIG_SLOW_WORK_DEBUG
struct slow_work *slow_work_execs[SLOW_WORK_THREAD_LIMIT]; struct slow_work *slow_work_execs[SLOW_WORK_THREAD_LIMIT];
pid_t slow_work_pids[SLOW_WORK_THREAD_LIMIT]; pid_t slow_work_pids[SLOW_WORK_THREAD_LIMIT];
DEFINE_RWLOCK(slow_work_execs_lock); DEFINE_RWLOCK(slow_work_execs_lock);
...@@ -823,7 +823,7 @@ static void slow_work_new_thread_execute(struct slow_work *work) ...@@ -823,7 +823,7 @@ static void slow_work_new_thread_execute(struct slow_work *work)
static const struct slow_work_ops slow_work_new_thread_ops = { static const struct slow_work_ops slow_work_new_thread_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.execute = slow_work_new_thread_execute, .execute = slow_work_new_thread_execute,
#ifdef CONFIG_SLOW_WORK_PROC #ifdef CONFIG_SLOW_WORK_DEBUG
.desc = slow_work_new_thread_desc, .desc = slow_work_new_thread_desc,
#endif #endif
}; };
...@@ -1055,9 +1055,15 @@ static int __init init_slow_work(void) ...@@ -1055,9 +1055,15 @@ static int __init init_slow_work(void)
if (slow_work_max_max_threads < nr_cpus * 2) if (slow_work_max_max_threads < nr_cpus * 2)
slow_work_max_max_threads = nr_cpus * 2; slow_work_max_max_threads = nr_cpus * 2;
#endif #endif
#ifdef CONFIG_SLOW_WORK_PROC #ifdef CONFIG_SLOW_WORK_DEBUG
proc_create("slow_work_rq", S_IFREG | 0400, NULL, {
&slow_work_runqueue_fops); struct dentry *dbdir;
dbdir = debugfs_create_dir("slow_work", NULL);
if (dbdir && !IS_ERR(dbdir))
debugfs_create_file("runqueue", S_IFREG | 0400, dbdir,
NULL, &slow_work_runqueue_fops);
}
#endif #endif
return 0; return 0;
} }
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
/* /*
* slow-work.c * slow-work.c
*/ */
#ifdef CONFIG_SLOW_WORK_PROC #ifdef CONFIG_SLOW_WORK_DEBUG
extern struct slow_work *slow_work_execs[]; extern struct slow_work *slow_work_execs[];
extern pid_t slow_work_pids[]; extern pid_t slow_work_pids[];
extern rwlock_t slow_work_execs_lock; extern rwlock_t slow_work_execs_lock;
...@@ -30,9 +30,9 @@ extern struct list_head vslow_work_queue; ...@@ -30,9 +30,9 @@ extern struct list_head vslow_work_queue;
extern spinlock_t slow_work_queue_lock; extern spinlock_t slow_work_queue_lock;
/* /*
* slow-work-proc.c * slow-work-debugfs.c
*/ */
#ifdef CONFIG_SLOW_WORK_PROC #ifdef CONFIG_SLOW_WORK_DEBUG
extern const struct file_operations slow_work_runqueue_fops; extern const struct file_operations slow_work_runqueue_fops;
extern void slow_work_new_thread_desc(struct slow_work *, struct seq_file *); extern void slow_work_new_thread_desc(struct slow_work *, struct seq_file *);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册