SLOW_WORK: Move slow_work's proc file to debugfs

Move slow_work's debugging proc file to debugfs.

Signed-off-by: David Howells <dhowells@redhat.com>
Requested-and-acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
David Howells 2009-12-01 15:36:11 +00:00 committed by Linus Torvalds
parent df87f8c06c
commit f13a48bd79
7 changed files with 28 additions and 22 deletions

View file

@ -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

View file

@ -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 {
/* 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 {
#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
}; };

View file

@ -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.

View file

@ -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)

View file

@ -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 = {
}; };
/* /*
* 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)
{ {

View file

@ -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) {}
/* /*
* 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)
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)
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;
} }

View file

@ -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;
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 *);