Messages in this thread | | | Date | Mon, 13 Apr 2009 17:24:14 +0200 | From | Frederic Weisbecker <> | Subject | Re: [PATCH v2 1/4] ftrace, workqueuetrace: Make workqueue tracepoints use TRACE_EVENT macro |
| |
On Mon, Apr 13, 2009 at 02:52:05PM +0900, KOSAKI Motohiro wrote: > From: Zhao Lei <zhaolei@cn.fujitsu.com> > Subject: [PATCH v2] ftrace, workqueuetrace: Make workqueue tracepoints use TRACE_EVENT macro > > TRACE_EVENT is a more generic way to define tracepoints. > Doing so adds these new capabilities to this tracepoint: > > - zero-copy and per-cpu splice() tracing > - binary tracing without printf overhead > - structured logging records exposed under /debug/tracing/events > - trace events embedded in function tracer output and other plugins > - user-defined, per tracepoint filter expressions > > Then, this patch convert DEFINE_TRACE to TRACE_EVENT in workqueue related tracepoint. >
Kosaki-san, you might also want to credit your changes in this patch. Something like:
[v2: kosaki@jp.fujitsu.com: print the function names instead of addr, and zap the work addr]
> Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> > Signed-off-by: KOSAKI Motohiro <kosaki@jp.fujitsu.com> > Cc: Steven Rostedt <rostedt@goodmis.org> > Cc: Frederic Weisbecker <fweisbec@gmail.com> > Cc: Tom Zanussi <tzanussi@gmail.com> > Cc: Ingo Molnar <mingo@elte.hu> > --- > include/trace/trace_event_types.h | 1 > include/trace/trace_events.h | 1 > include/trace/workqueue.h | 19 ------ > include/trace/workqueue_event_types.h | 101 ++++++++++++++++++++++++++++++++++ > 4 files changed, 105 insertions(+), 17 deletions(-) > create mode 100644 include/trace/workqueue_event_types.h > > Index: b/include/trace/trace_event_types.h > =================================================================== > --- a/include/trace/trace_event_types.h 2009-04-13 12:11:00.000000000 +0900 > +++ b/include/trace/trace_event_types.h 2009-04-13 12:18:56.000000000 +0900 > @@ -5,3 +5,4 @@ > #include <trace/lockdep_event_types.h> > #include <trace/skb_event_types.h> > #include <trace/kmem_event_types.h> > +#include <trace/workqueue_event_types.h> > Index: b/include/trace/trace_events.h > =================================================================== > --- a/include/trace/trace_events.h 2009-04-13 12:11:00.000000000 +0900 > +++ b/include/trace/trace_events.h 2009-04-13 12:18:56.000000000 +0900 > @@ -5,3 +5,4 @@ > #include <trace/lockdep.h> > #include <trace/skb.h> > #include <trace/kmem.h> > +#include <trace/workqueue.h> > Index: b/include/trace/workqueue.h > =================================================================== > --- a/include/trace/workqueue.h 2009-04-13 12:08:59.000000000 +0900 > +++ b/include/trace/workqueue.h 2009-04-13 12:18:56.000000000 +0900 > @@ -1,25 +1,10 @@ > #ifndef __TRACE_WORKQUEUE_H > #define __TRACE_WORKQUEUE_H > > -#include <linux/tracepoint.h> > #include <linux/workqueue.h> > #include <linux/sched.h> > +#include <linux/tracepoint.h> > > -DECLARE_TRACE(workqueue_insertion, > - TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), > - TP_ARGS(wq_thread, work)); > - > -DECLARE_TRACE(workqueue_execution, > - TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), > - TP_ARGS(wq_thread, work)); > - > -/* Trace the creation of one workqueue thread on a cpu */ > -DECLARE_TRACE(workqueue_creation, > - TP_PROTO(struct task_struct *wq_thread, int cpu), > - TP_ARGS(wq_thread, cpu)); > - > -DECLARE_TRACE(workqueue_destruction, > - TP_PROTO(struct task_struct *wq_thread), > - TP_ARGS(wq_thread)); > +#include <trace/workqueue_event_types.h> > > #endif /* __TRACE_WORKQUEUE_H */ > Index: b/include/trace/workqueue_event_types.h > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ b/include/trace/workqueue_event_types.h 2009-04-13 12:25:16.000000000 +0900 > @@ -0,0 +1,101 @@ > + > +/* use <trace/workqueue.h> instead */ > +#ifndef TRACE_EVENT > +# error Do not include this file directly. > +# error Unless you know what you are doing. > +#endif > + > +#undef TRACE_SYSTEM > +#define TRACE_SYSTEM workqueue > + > +TRACE_EVENT(workqueue_insertion, > + > + TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), > + > + TP_ARGS(wq_thread, work), > + > + TP_STRUCT__entry( > + __array(char, thread_comm, TASK_COMM_LEN) > + __field(pid_t, thread_pid) > + __field(struct work_struct *, work) > + __field(work_func_t, func) > + ), > + > + TP_fast_assign( > + memcpy(__entry->thread_comm, wq_thread->comm, TASK_COMM_LEN); > + __entry->thread_pid = wq_thread->pid; > + __entry->work = work; > + __entry->func = work->func; > + ), > + > + TP_printk("thread=%s:%d func=%pF", __entry->thread_comm, > + __entry->thread_pid, __entry->func) > +); > + > +TRACE_EVENT(workqueue_execution, > + > + TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), > + > + TP_ARGS(wq_thread, work), > + > + TP_STRUCT__entry( > + __array(char, thread_comm, TASK_COMM_LEN) > + __field(pid_t, thread_pid) > + __field(struct work_struct *, work) > + __field(work_func_t, func) > + ), > + > + TP_fast_assign( > + memcpy(__entry->thread_comm, wq_thread->comm, TASK_COMM_LEN); > + __entry->thread_pid = wq_thread->pid; > + __entry->work = work; > + __entry->func = work->func; > + ), > + > + TP_printk("thread=%s:%d func=%pF", __entry->thread_comm, > + __entry->thread_pid, __entry->func) > +); > + > +/* Trace the creation of one workqueue thread on a cpu */ > +TRACE_EVENT(workqueue_creation, > + > + TP_PROTO(struct task_struct *wq_thread, int cpu), > + > + TP_ARGS(wq_thread, cpu), > + > + TP_STRUCT__entry( > + __array(char, thread_comm, TASK_COMM_LEN) > + __field(pid_t, thread_pid) > + __field(int, cpu) > + ), > + > + TP_fast_assign( > + memcpy(__entry->thread_comm, wq_thread->comm, TASK_COMM_LEN); > + __entry->thread_pid = wq_thread->pid; > + __entry->cpu = cpu; > + ), > + > + TP_printk("thread=%s:%d cpu=%d", __entry->thread_comm, > + __entry->thread_pid, __entry->cpu) > +); > + > +TRACE_EVENT(workqueue_destruction, > + > + TP_PROTO(struct task_struct *wq_thread), > + > + TP_ARGS(wq_thread), > + > + TP_STRUCT__entry( > + __array(char, thread_comm, TASK_COMM_LEN) > + __field(pid_t, thread_pid) > + ), > + > + TP_fast_assign( > + memcpy(__entry->thread_comm, wq_thread->comm, TASK_COMM_LEN); > + __entry->thread_pid = wq_thread->pid; > + ), > + > + TP_printk("thread=%s:%d", __entry->thread_comm, __entry->thread_pid) > +); > + > +#undef TRACE_SYSTEM > >
Thank you both!
Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
| |