lkml.org 
[lkml]   [2009]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/4] ftrace, workqueuetrace: Make workqueue tracepoints use TRACE_EVENT macro
    Date
    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.


    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



    \
     
     \ /
      Last update: 2009-04-13 07:55    [W:4.350 / U:0.600 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site