mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/5] tracing/workqueue updates
@ 2009-06-01 17:17 Frederic Weisbecker
  2009-06-01 17:17 ` [PATCH 1/5] tracing/workqueue: get rid of searching last executed worklet in probe_worklet_complete() Frederic Weisbecker
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Frederic Weisbecker @ 2009-06-01 17:17 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: LKML, Frederic Weisbecker, Oleg Nesterov, Zhao Lei,
	Anton Blanchard, Steven Rostedt, Andrew Morton

Hi Ingo,

The following patches are fixes and cleanup for the workqueue tracer.

One of them makes the worklet search patch faster.
Some of them fix and sanitize the histogram output and the others clean and
standardize the code.

Thanks.

The following changes since commit c5f0530c4bb2ec77a805cfcf23db09b3e5ab09d4:
  Ingo Molnar (1):
        Merge branch 'tracing/core' into tracing/workqueues

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing.git tracing/workqueue

Anton Blanchard (2):
      tracing/events: use %pf in workqueue trace events
      tracing/events: rename worklet_execute to worklet_entry and worklet_complete to worklet_exit

Zhaolei (3):
      tracing/workqueue: get rid of searching last executed worklet in probe_worklet_complete()
      tracing/workqueue: fix list header and function name format
      tracing/workqueue: cleanup for trace_workqueue.c

 Documentation/trace/workqueue.txt |   12 ++--
 include/trace/events/workqueue.h  |    8 +-
 kernel/trace/trace_workqueue.c    |  124 +++++++++++++++++-------------------
 3 files changed, 69 insertions(+), 75 deletions(-)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/5] tracing/workqueue: get rid of searching last executed worklet in probe_worklet_complete()
  2009-06-01 17:17 [PATCH 0/5] tracing/workqueue updates Frederic Weisbecker
@ 2009-06-01 17:17 ` Frederic Weisbecker
  2009-06-01 17:17 ` [PATCH 2/5] tracing/events: use %pf in workqueue trace events Frederic Weisbecker
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Frederic Weisbecker @ 2009-06-01 17:17 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: LKML, Zhaolei, Oleg Nesterov, Anton Blanchard, Steven Rostedt,
	Andrew Morton, Frederic Weisbecker

From: Zhaolei <zhaolei@cn.fujitsu.com>

We don't need to search the worklet which was latest executed
inside the workqueue's worklet list.

Instead, we can use a pointer in cpu_workqueue_stats to remember
which worklet was last executed.

Thanks Oleg for pointing it out.

Changelog:
v1->v2: Oleg pointed out that if searching executed workfunc_stats failed
in probe_worklet_execute(), for example, workfunc_stats's memory allocation
failed previously, cpu_workqueue_stats->last_workfunc is not set to correct
value, and it will cause wrong accessing in probe_worklet_complete().
This problem is fixed in v2.

[ Impact: make worklet tracing faster ]

Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Reported-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
 kernel/trace/trace_workqueue.c |   39 ++++++++++++++++-----------------------
 1 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/kernel/trace/trace_workqueue.c b/kernel/trace/trace_workqueue.c
index c67be60..740de3b 100644
--- a/kernel/trace/trace_workqueue.c
+++ b/kernel/trace/trace_workqueue.c
@@ -25,13 +25,6 @@ struct workfunc_stats {
 	unsigned int			inserted;
 	unsigned int			executed;
 
-	/*
-	 * save latest work_struct's pointer to use as identifier in
-	 * probe_worklet_complete, because we can't use work_struct->...
-	 * after worklet got executed
-	 */
-	void				*work;
-
 	/* save execution time temporarily for calculate executed time */
 	u64				start_time;
 	u64				max_executed_time;
@@ -46,10 +39,17 @@ struct cpu_workqueue_stats {
 	/* Protected by cpu workqueue lock */
 	unsigned int		inserted;
 	unsigned int		executed;
+
 	/* list of struct workfunc_stats in this workqueue */
 	struct list_head	workfunclist;
 
 	/*
+	 * pointer to last executed worklet's workfunc_stats in this workqueue,
+	 * used by probe_worklet_complete()
+	 */
+	struct workfunc_stats *last_workfunc;
+
+	/*
 	 * the task maybe destroyed when we read stat file
 	 * we define it to void * because we only use it as a identifier
 	 */
@@ -163,9 +163,10 @@ found_wq:
 		if (wfnode->func == work->func) {
 			wfnode->executed++;
 			wfnode->start_time = trace_clock_global();
-			wfnode->work = work;
+			node->last_workfunc = wfnode;
 			goto found_wf;
 		}
+	node->last_workfunc = NULL;
 	pr_debug("trace_workqueue: worklet not found\n");
 	goto end;
 
@@ -180,7 +181,7 @@ probe_worklet_complete(struct task_struct *wq_thread, void *work)
 {
 	int cpu = cpumask_first(&wq_thread->cpus_allowed);
 	struct cpu_workqueue_stats *node;
-	struct workfunc_stats *wfnode;
+	u64 executed_time;
 	unsigned long flags;
 
 	spin_lock_irqsave(&workqueue_cpu_stat(cpu)->lock, flags);
@@ -192,22 +193,14 @@ probe_worklet_complete(struct task_struct *wq_thread, void *work)
 	goto end;
 
 found_wq:
-	list_for_each_entry(wfnode, &node->workfunclist, list) {
-		u64 executed_time;
+	if (!node->last_workfunc)
+		goto end;
 
-		if (wfnode->work != work)
-			continue;
+	executed_time = trace_clock_global() - node->last_workfunc->start_time;
+	node->last_workfunc->total_time += executed_time;
+	if (executed_time > node->last_workfunc->max_executed_time)
+		node->last_workfunc->max_executed_time = executed_time;
 
-		executed_time = trace_clock_global() - wfnode->start_time;
-		wfnode->total_time += executed_time;
-		if (executed_time > wfnode->max_executed_time)
-			wfnode->max_executed_time = executed_time;
-		goto found_wf;
-	}
-	pr_debug("trace_workqueue: worklet not found\n");
-	goto end;
-
-found_wf:
 end:
 	spin_unlock_irqrestore(&workqueue_cpu_stat(cpu)->lock, flags);
 }
-- 
1.6.2.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/5] tracing/events: use %pf in workqueue trace events
  2009-06-01 17:17 [PATCH 0/5] tracing/workqueue updates Frederic Weisbecker
  2009-06-01 17:17 ` [PATCH 1/5] tracing/workqueue: get rid of searching last executed worklet in probe_worklet_complete() Frederic Weisbecker
@ 2009-06-01 17:17 ` Frederic Weisbecker
  2009-06-01 17:17 ` [PATCH 3/5] tracing/events: rename worklet_execute to worklet_entry and worklet_complete to worklet_exit Frederic Weisbecker
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Frederic Weisbecker @ 2009-06-01 17:17 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: LKML, Anton Blanchard, Oleg Nesterov, Zhao Lei, Steven Rostedt,
	Andrew Morton, Frederic Weisbecker

From: Anton Blanchard <anton@samba.org>

Using %pf instead of %pF supresses printing of the function offset
which will always be 0.

[ Impact: cleanup workqueue events traces output ]

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
 Documentation/trace/workqueue.txt |    6 +++---
 include/trace/events/workqueue.h  |    8 ++++----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/Documentation/trace/workqueue.txt b/Documentation/trace/workqueue.txt
index 4019a8a..c446b28 100644
--- a/Documentation/trace/workqueue.txt
+++ b/Documentation/trace/workqueue.txt
@@ -107,8 +107,8 @@ worklet_cancel  worklet_enqueue   worklet_execute          workqueue_destruction
  # TASK-PID    CPU#    TIMESTAMP  FUNCTION
  #   | |       |          |         |
 
-<...>-5627  [000]  4597.858645: worklet_enqueue: thread=ata/0:508 func=ata_pio_task+0x0/0x280 cpu=0
-<...>-508   [000]  4597.858660: worklet_execute: thread=ata/0:508 work=ffff88007e9e67b8 func=ata_pio_task+0x0/0x280
+<...>-5627  [000]  4597.858645: worklet_enqueue: thread=ata/0:508 func=ata_pio_task cpu=0
+<...>-508   [000]  4597.858660: worklet_execute: thread=ata/0:508 work=ffff88007e9e67b8 func=ata_pio_task
 <...>-508   [000]  4597.858684: worklet_complete: thread=ata/0:508 work=ffff88007e9e67b8
-<...>-2437  [000]  4597.861259: worklet_cancel: func=ata_pio_task+0x0/0x280
+<...>-2437  [000]  4597.861259: worklet_cancel: func=ata_pio_task
 [...]
diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h
index 49608c7..6cb7833 100644
--- a/include/trace/events/workqueue.h
+++ b/include/trace/events/workqueue.h
@@ -32,7 +32,7 @@ TRACE_EVENT(worklet_enqueue,
 		__entry->cpu		= cpu;
 	),
 
-	TP_printk("thread=%s:%d func=%pF cpu=%d", __entry->thread_comm,
+	TP_printk("thread=%s:%d func=%pf cpu=%d", __entry->thread_comm,
 		__entry->thread_pid, __entry->func, __entry->cpu)
 );
 
@@ -63,7 +63,7 @@ TRACE_EVENT(worklet_enqueue_delayed,
 		__entry->delay		= delay;
 	),
 
-	TP_printk("thread=%s:%d func=%pF cpu=%d delay=%lu",
+	TP_printk("thread=%s:%d func=%pf cpu=%d delay=%lu",
 		__entry->thread_comm, __entry->thread_pid, __entry->func,
 		__entry->cpu, __entry->delay)
 );
@@ -88,7 +88,7 @@ TRACE_EVENT(worklet_execute,
 		__entry->func		= work->func;
 	),
 
-	TP_printk("thread=%s:%d work=%p func=%pF", __entry->thread_comm,
+	TP_printk("thread=%s:%d work=%p func=%pf", __entry->thread_comm,
 		__entry->thread_pid, __entry->work, __entry->func)
 );
 
@@ -128,7 +128,7 @@ TRACE_EVENT(worklet_cancel,
 		__entry->func	= work->func;
 	),
 
-	TP_printk("func=%pF", __entry->func)
+	TP_printk("func=%pf", __entry->func)
 );
 
 /* Trace the creation of one workqueue thread on a cpu */
-- 
1.6.2.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 3/5] tracing/events: rename worklet_execute to worklet_entry and worklet_complete to worklet_exit
  2009-06-01 17:17 [PATCH 0/5] tracing/workqueue updates Frederic Weisbecker
  2009-06-01 17:17 ` [PATCH 1/5] tracing/workqueue: get rid of searching last executed worklet in probe_worklet_complete() Frederic Weisbecker
  2009-06-01 17:17 ` [PATCH 2/5] tracing/events: use %pf in workqueue trace events Frederic Weisbecker
@ 2009-06-01 17:17 ` Frederic Weisbecker
  2009-06-01 17:17 ` [PATCH 4/5] tracing/workqueue: fix list header and function name format Frederic Weisbecker
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Frederic Weisbecker @ 2009-06-01 17:17 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: LKML, Anton Blanchard, Oleg Nesterov, Zhao Lei, Steven Rostedt,
	Andrew Morton, Frederic Weisbecker

From: Anton Blanchard <anton@samba.org>

Keep a common naming convention for tracing the latency of events such as
softirq_entry/softirq_exit.

[ Impact: standardize workqueue tracepoint names ]

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
 Documentation/trace/workqueue.txt |    8 ++++----
 kernel/trace/trace_workqueue.c    |   20 ++++++++++----------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/Documentation/trace/workqueue.txt b/Documentation/trace/workqueue.txt
index c446b28..b380a76 100644
--- a/Documentation/trace/workqueue.txt
+++ b/Documentation/trace/workqueue.txt
@@ -98,8 +98,8 @@ For a simple capture of all workqueues events:
 # mount -t debugfs debug /sys/kernel/debug/
 # cd /sys/kernel/debug/tracing/events/workqueue
 # ls
-filter          worklet_complete  worklet_enqueue_delayed  workqueue_creation     workqueue_flush
-worklet_cancel  worklet_enqueue   worklet_execute          workqueue_destruction
+filter          worklet_exit  worklet_enqueue_delayed  workqueue_creation     workqueue_flush
+worklet_cancel  worklet_enqueue   worklet_entry          workqueue_destruction
 # for e in $(ls); do echo 1 > $e/enable; done
 # cat /sys/kernel/debug/tracing/trace
 
@@ -108,7 +108,7 @@ worklet_cancel  worklet_enqueue   worklet_execute          workqueue_destruction
  #   | |       |          |         |
 
 <...>-5627  [000]  4597.858645: worklet_enqueue: thread=ata/0:508 func=ata_pio_task cpu=0
-<...>-508   [000]  4597.858660: worklet_execute: thread=ata/0:508 work=ffff88007e9e67b8 func=ata_pio_task
-<...>-508   [000]  4597.858684: worklet_complete: thread=ata/0:508 work=ffff88007e9e67b8
+<...>-508   [000]  4597.858660: worklet_entry: thread=ata/0:508 work=ffff88007e9e67b8 func=ata_pio_task
+<...>-508   [000]  4597.858684: worklet_exit: thread=ata/0:508 work=ffff88007e9e67b8
 <...>-2437  [000]  4597.861259: worklet_cancel: func=ata_pio_task
 [...]
diff --git a/kernel/trace/trace_workqueue.c b/kernel/trace/trace_workqueue.c
index 740de3b..fa70ea2 100644
--- a/kernel/trace/trace_workqueue.c
+++ b/kernel/trace/trace_workqueue.c
@@ -141,7 +141,7 @@ probe_worklet_enqueue_delayed(struct task_struct *wq_thread,
 
 /* Execution of a work */
 static void
-probe_worklet_execute(struct task_struct *wq_thread, struct work_struct *work)
+probe_worklet_entry(struct task_struct *wq_thread, struct work_struct *work)
 {
 	int cpu = cpumask_first(&wq_thread->cpus_allowed);
 	struct cpu_workqueue_stats *node;
@@ -177,7 +177,7 @@ end:
 
 /* Complete of a work */
 static void
-probe_worklet_complete(struct task_struct *wq_thread, void *work)
+probe_worklet_exit(struct task_struct *wq_thread, void *work)
 {
 	int cpu = cpumask_first(&wq_thread->cpus_allowed);
 	struct cpu_workqueue_stats *node;
@@ -497,17 +497,17 @@ int __init trace_workqueue_early_init(void)
 	if (ret)
 		goto out_worklet_enqueue;
 
-	ret = register_trace_worklet_execute(probe_worklet_execute);
+	ret = register_trace_worklet_entry(probe_worklet_entry);
 	if (ret)
 		goto out_worklet_enqueue_delayed;
 
-	ret = register_trace_worklet_complete(probe_worklet_complete);
+	ret = register_trace_worklet_exit(probe_worklet_exit);
 	if (ret)
-		goto out_worklet_execute;
+		goto out_worklet_entry;
 
 	ret = register_trace_workqueue_creation(probe_workqueue_creation);
 	if (ret)
-		goto out_worklet_complete;
+		goto out_worklet_exit;
 
 	ret = register_trace_workqueue_destruction(probe_workqueue_destruction);
 	if (ret)
@@ -522,10 +522,10 @@ int __init trace_workqueue_early_init(void)
 
 out_workqueue_creation:
 	unregister_trace_workqueue_creation(probe_workqueue_creation);
-out_worklet_complete:
-	unregister_trace_worklet_complete(probe_worklet_complete);
-out_worklet_execute:
-	unregister_trace_worklet_execute(probe_worklet_execute);
+out_worklet_exit:
+	unregister_trace_worklet_exit(probe_worklet_exit);
+out_worklet_entry:
+	unregister_trace_worklet_entry(probe_worklet_entry);
 out_worklet_enqueue_delayed:
 	unregister_trace_worklet_enqueue_delayed(probe_worklet_enqueue_delayed);
 out_worklet_enqueue:
-- 
1.6.2.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 4/5] tracing/workqueue: fix list header and function name format
  2009-06-01 17:17 [PATCH 0/5] tracing/workqueue updates Frederic Weisbecker
                   ` (2 preceding siblings ...)
  2009-06-01 17:17 ` [PATCH 3/5] tracing/events: rename worklet_execute to worklet_entry and worklet_complete to worklet_exit Frederic Weisbecker
@ 2009-06-01 17:17 ` Frederic Weisbecker
  2009-06-01 17:17 ` [PATCH 5/5] tracing/workqueue: cleanup for trace_workqueue.c Frederic Weisbecker
  2009-06-01 21:42 ` [PATCH 0/5] tracing/workqueue updates Ingo Molnar
  5 siblings, 0 replies; 7+ messages in thread
From: Frederic Weisbecker @ 2009-06-01 17:17 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: LKML, Zhaolei, Oleg Nesterov, Anton Blanchard, Steven Rostedt,
	Andrew Morton, Frederic Weisbecker

From: Zhaolei <zhaolei@cn.fujitsu.com>

Fix list header of workqueue trace,
and use %pf to print the function name only(ignore the offsets).

Before patch:
 # CPU INSERTED EXECUTED    MAX us   AVG us   TASKNAME:PID
 #  |     |        |           |      ` |     -WORKFUNC
 #  |     |        |           |        |          |
     0        1        1     1053     1053   `-flush_async_commits+0x0/0x90
 ...

After patch:
 # CPU INSERTED EXECUTED   MAX us   AVG us   TASKNAME:PID
 #  |     |        |         |        |      `-WORKFUNC
 #  |     |        |         |        |           |
     0        1        1     1155     1155   `-flush_async_commits
 ...

[ Impact: fix and clarify workqueue stats output ]

Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
 kernel/trace/trace_workqueue.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/kernel/trace/trace_workqueue.c b/kernel/trace/trace_workqueue.c
index fa70ea2..cb6429e 100644
--- a/kernel/trace/trace_workqueue.c
+++ b/kernel/trace/trace_workqueue.c
@@ -402,7 +402,7 @@ static int workqueue_stat_show(struct seq_file *s, void *p)
 			avg_time = 0;
 		}
 
-		seq_printf(s, "  %3d   %6d   %6u   %6llu   %6llu   %c-%pF\n",
+		seq_printf(s, "  %3d   %6d   %6u   %6llu   %6llu   %c-%pf\n",
 			cws->cpu,
 			wfstat->inserted,
 			wfstat->executed,
@@ -450,11 +450,13 @@ static void workqueue_stat_file_open(void)
 		/**/
 static int workqueue_stat_headers(struct seq_file *s)
 {
-	seq_printf(s, "# CPU INSERTED EXECUTED    MAX us   AVG us"
-			"   TASKNAME:PID\n");
-	seq_printf(s, "#  |     |        |           |      ` |"
-			"     -WORKFUNC\n");
-	seq_printf(s, "#  |     |        |           |        |          |\n");
+	seq_printf(s,
+		"# CPU INSERTED EXECUTED   MAX us   AVG us   TASKNAME:PID\n");
+	seq_printf(s,
+		"#  |     |        |         |        |      `-WORKFUNC\n");
+	seq_printf(s,
+		"#  |     |        |         |        |           |\n");
+
 	return 0;
 }
 
-- 
1.6.2.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 5/5] tracing/workqueue: cleanup for trace_workqueue.c
  2009-06-01 17:17 [PATCH 0/5] tracing/workqueue updates Frederic Weisbecker
                   ` (3 preceding siblings ...)
  2009-06-01 17:17 ` [PATCH 4/5] tracing/workqueue: fix list header and function name format Frederic Weisbecker
@ 2009-06-01 17:17 ` Frederic Weisbecker
  2009-06-01 21:42 ` [PATCH 0/5] tracing/workqueue updates Ingo Molnar
  5 siblings, 0 replies; 7+ messages in thread
From: Frederic Weisbecker @ 2009-06-01 17:17 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: LKML, Zhaolei, Oleg Nesterov, Anton Blanchard, Steven Rostedt,
	Andrew Morton, Frederic Weisbecker

From: Zhaolei <zhaolei@cn.fujitsu.com>

1: Make function's order in source same with definition in struct tracer_stat
2: Remove ";" after workqueue_stat_file_release()
3: Remove redundant blank in struct tracer_stat workqueue_stats
4: add "static" prefix for some function and struct

[ Impact: reorganize code, cleanup ]

Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
 kernel/trace/trace_workqueue.c |   65 +++++++++++++++++++--------------------
 1 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/kernel/trace/trace_workqueue.c b/kernel/trace/trace_workqueue.c
index cb6429e..ae98be4 100644
--- a/kernel/trace/trace_workqueue.c
+++ b/kernel/trace/trace_workqueue.c
@@ -81,7 +81,7 @@ static int wq_file_ref;
  * Update record when insert a work into workqueue
  * Caller need to hold cpu_workqueue_stats spin_lock
  */
-int do_worklet_enqueue(struct cpu_workqueue_stats *cws,
+static int do_worklet_enqueue(struct cpu_workqueue_stats *cws,
 			 struct work_struct *work)
 {
 	struct workfunc_stats *wfstat;
@@ -415,6 +415,27 @@ static int workqueue_stat_show(struct seq_file *s, void *p)
 	return 0;
 }
 
+static int workqueue_stat_headers(struct seq_file *s)
+{
+	seq_printf(s,
+		"# CPU INSERTED EXECUTED   MAX us   AVG us   TASKNAME:PID\n");
+	seq_printf(s,
+		"#  |     |        |         |        |      `-WORKFUNC\n");
+	seq_printf(s,
+		"#  |     |        |         |        |           |\n");
+
+	return 0;
+}
+
+static void workqueue_stat_file_open(void)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&free_wq_lock, flags);
+	wq_file_ref++;
+	spin_unlock_irqrestore(&free_wq_lock, flags);
+}
+
 /*
  * Here we are sure that we have no more readers on our stat file
  * and that further readers will block until we return from this function.
@@ -436,42 +457,20 @@ static void workqueue_stat_file_release(void)
 	}
 
 	spin_unlock_irqrestore(&free_wq_lock, flags);
-};
-
-static void workqueue_stat_file_open(void)
-{
-	unsigned long flags;
-
-	spin_lock_irqsave(&free_wq_lock, flags);
-	wq_file_ref++;
-	spin_unlock_irqrestore(&free_wq_lock, flags);
-}
-
-		/**/
-static int workqueue_stat_headers(struct seq_file *s)
-{
-	seq_printf(s,
-		"# CPU INSERTED EXECUTED   MAX us   AVG us   TASKNAME:PID\n");
-	seq_printf(s,
-		"#  |     |        |         |        |      `-WORKFUNC\n");
-	seq_printf(s,
-		"#  |     |        |         |        |           |\n");
-
-	return 0;
 }
 
-struct tracer_stat workqueue_stats __read_mostly = {
-	.name		 = "workqueues",
-	.stat_start	 = workqueue_stat_start,
-	.stat_next	 = workqueue_stat_next,
-	.stat_show	 = workqueue_stat_show,
-	.stat_headers	 = workqueue_stat_headers,
-	.file_open	 = workqueue_stat_file_open,
-	.file_open	 = workqueue_stat_file_release,
+static struct tracer_stat workqueue_stats __read_mostly = {
+	.name		= "workqueues",
+	.stat_start	= workqueue_stat_start,
+	.stat_next	= workqueue_stat_next,
+	.stat_show	= workqueue_stat_show,
+	.stat_headers	= workqueue_stat_headers,
+	.file_open	= workqueue_stat_file_open,
+	.file_open	= workqueue_stat_file_release,
 };
 
 
-int __init stat_workqueue_init(void)
+static int __init stat_workqueue_init(void)
 {
 	if (register_stat_tracer(&workqueue_stats)) {
 		pr_warning("Unable to register workqueue stat tracer\n");
@@ -486,7 +485,7 @@ fs_initcall(stat_workqueue_init);
  * Workqueues are created very early, just after pre-smp initcalls.
  * So we must register our tracepoints at this stage.
  */
-int __init trace_workqueue_early_init(void)
+static int __init trace_workqueue_early_init(void)
 {
 	int ret, cpu;
 
-- 
1.6.2.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/5] tracing/workqueue updates
  2009-06-01 17:17 [PATCH 0/5] tracing/workqueue updates Frederic Weisbecker
                   ` (4 preceding siblings ...)
  2009-06-01 17:17 ` [PATCH 5/5] tracing/workqueue: cleanup for trace_workqueue.c Frederic Weisbecker
@ 2009-06-01 21:42 ` Ingo Molnar
  5 siblings, 0 replies; 7+ messages in thread
From: Ingo Molnar @ 2009-06-01 21:42 UTC (permalink / raw)
  To: Frederic Weisbecker
  Cc: LKML, Oleg Nesterov, Zhao Lei, Anton Blanchard, Steven Rostedt,
	Andrew Morton


* Frederic Weisbecker <fweisbec@gmail.com> wrote:

> Hi Ingo,
> 
> The following patches are fixes and cleanup for the workqueue tracer.
> 
> One of them makes the worklet search patch faster.
> Some of them fix and sanitize the histogram output and the others clean and
> standardize the code.
> 
> Thanks.
> 
> The following changes since commit c5f0530c4bb2ec77a805cfcf23db09b3e5ab09d4:
>   Ingo Molnar (1):
>         Merge branch 'tracing/core' into tracing/workqueues
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing.git tracing/workqueue
> 
> Anton Blanchard (2):
>       tracing/events: use %pf in workqueue trace events
>       tracing/events: rename worklet_execute to worklet_entry and worklet_complete to worklet_exit
> 
> Zhaolei (3):
>       tracing/workqueue: get rid of searching last executed worklet in probe_worklet_complete()
>       tracing/workqueue: fix list header and function name format
>       tracing/workqueue: cleanup for trace_workqueue.c
> 
>  Documentation/trace/workqueue.txt |   12 ++--
>  include/trace/events/workqueue.h  |    8 +-
>  kernel/trace/trace_workqueue.c    |  124 +++++++++++++++++-------------------
>  3 files changed, 69 insertions(+), 75 deletions(-)

Pulled, thanks Frederic!

	Ingo

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-06-01 21:43 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-01 17:17 [PATCH 0/5] tracing/workqueue updates Frederic Weisbecker
2009-06-01 17:17 ` [PATCH 1/5] tracing/workqueue: get rid of searching last executed worklet in probe_worklet_complete() Frederic Weisbecker
2009-06-01 17:17 ` [PATCH 2/5] tracing/events: use %pf in workqueue trace events Frederic Weisbecker
2009-06-01 17:17 ` [PATCH 3/5] tracing/events: rename worklet_execute to worklet_entry and worklet_complete to worklet_exit Frederic Weisbecker
2009-06-01 17:17 ` [PATCH 4/5] tracing/workqueue: fix list header and function name format Frederic Weisbecker
2009-06-01 17:17 ` [PATCH 5/5] tracing/workqueue: cleanup for trace_workqueue.c Frederic Weisbecker
2009-06-01 21:42 ` [PATCH 0/5] tracing/workqueue updates Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®