summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-03-10 09:57:16 +0100
committerIngo Molnar <mingo@elte.hu>2009-03-10 09:57:16 +0100
commit9a1043d19c4edc4ff1d80081a39809a506a62e4d (patch)
treea8ba7bdb2ebe8e486f018d55969727abf14e7e33 /include
parent12e87e36e0141c08dbc8b2177c93c75fb18ad7e5 (diff)
parent157587d7ac555458da9f682e3250135e468470a6 (diff)
downloadop-kernel-dev-9a1043d19c4edc4ff1d80081a39809a506a62e4d.zip
op-kernel-dev-9a1043d19c4edc4ff1d80081a39809a506a62e4d.tar.gz
Merge branch 'tip/tracing/ftrace' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace into tracing/ftrace
Diffstat (limited to 'include')
-rw-r--r--include/linux/tracepoint.h10
-rw-r--r--include/trace/block.h70
-rw-r--r--include/trace/irq_event_types.h46
-rw-r--r--include/trace/lockdep_event_types.h26
-rw-r--r--include/trace/power.h12
-rw-r--r--include/trace/sched_event_types.h442
-rw-r--r--include/trace/workqueue.h16
7 files changed, 409 insertions, 213 deletions
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h
index 152b2f0..69b5698 100644
--- a/include/linux/tracepoint.h
+++ b/include/linux/tracepoint.h
@@ -31,8 +31,8 @@ struct tracepoint {
* Keep in sync with vmlinux.lds.h.
*/
-#define TPPROTO(args...) args
-#define TPARGS(args...) args
+#define TP_PROTO(args...) args
+#define TP_ARGS(args...) args
#ifdef CONFIG_TRACEPOINTS
@@ -65,7 +65,7 @@ struct tracepoint {
{ \
if (unlikely(__tracepoint_##name.state)) \
__DO_TRACE(&__tracepoint_##name, \
- TPPROTO(proto), TPARGS(args)); \
+ TP_PROTO(proto), TP_ARGS(args)); \
} \
static inline int register_trace_##name(void (*probe)(proto)) \
{ \
@@ -157,7 +157,7 @@ static inline void tracepoint_synchronize_unregister(void)
#define TRACE_FORMAT(name, proto, args, fmt) \
DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
-#define TRACE_EVENT_FORMAT(name, proto, args, fmt, struct, tpfmt) \
- TRACE_FORMAT(name, PARAMS(proto), PARAMS(args), PARAMS(fmt))
+#define TRACE_EVENT(name, proto, args, struct, print, assign) \
+ DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))
#endif
diff --git a/include/trace/block.h b/include/trace/block.h
index 25c6a1f..25b7068 100644
--- a/include/trace/block.h
+++ b/include/trace/block.h
@@ -5,72 +5,72 @@
#include <linux/tracepoint.h>
DECLARE_TRACE(block_rq_abort,
- TPPROTO(struct request_queue *q, struct request *rq),
- TPARGS(q, rq));
+ TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_ARGS(q, rq));
DECLARE_TRACE(block_rq_insert,
- TPPROTO(struct request_queue *q, struct request *rq),
- TPARGS(q, rq));
+ TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_ARGS(q, rq));
DECLARE_TRACE(block_rq_issue,
- TPPROTO(struct request_queue *q, struct request *rq),
- TPARGS(q, rq));
+ TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_ARGS(q, rq));
DECLARE_TRACE(block_rq_requeue,
- TPPROTO(struct request_queue *q, struct request *rq),
- TPARGS(q, rq));
+ TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_ARGS(q, rq));
DECLARE_TRACE(block_rq_complete,
- TPPROTO(struct request_queue *q, struct request *rq),
- TPARGS(q, rq));
+ TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_ARGS(q, rq));
DECLARE_TRACE(block_bio_bounce,
- TPPROTO(struct request_queue *q, struct bio *bio),
- TPARGS(q, bio));
+ TP_PROTO(struct request_queue *q, struct bio *bio),
+ TP_ARGS(q, bio));
DECLARE_TRACE(block_bio_complete,
- TPPROTO(struct request_queue *q, struct bio *bio),
- TPARGS(q, bio));
+ TP_PROTO(struct request_queue *q, struct bio *bio),
+ TP_ARGS(q, bio));
DECLARE_TRACE(block_bio_backmerge,
- TPPROTO(struct request_queue *q, struct bio *bio),
- TPARGS(q, bio));
+ TP_PROTO(struct request_queue *q, struct bio *bio),
+ TP_ARGS(q, bio));
DECLARE_TRACE(block_bio_frontmerge,
- TPPROTO(struct request_queue *q, struct bio *bio),
- TPARGS(q, bio));
+ TP_PROTO(struct request_queue *q, struct bio *bio),
+ TP_ARGS(q, bio));
DECLARE_TRACE(block_bio_queue,
- TPPROTO(struct request_queue *q, struct bio *bio),
- TPARGS(q, bio));
+ TP_PROTO(struct request_queue *q, struct bio *bio),
+ TP_ARGS(q, bio));
DECLARE_TRACE(block_getrq,
- TPPROTO(struct request_queue *q, struct bio *bio, int rw),
- TPARGS(q, bio, rw));
+ TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
+ TP_ARGS(q, bio, rw));
DECLARE_TRACE(block_sleeprq,
- TPPROTO(struct request_queue *q, struct bio *bio, int rw),
- TPARGS(q, bio, rw));
+ TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
+ TP_ARGS(q, bio, rw));
DECLARE_TRACE(block_plug,
- TPPROTO(struct request_queue *q),
- TPARGS(q));
+ TP_PROTO(struct request_queue *q),
+ TP_ARGS(q));
DECLARE_TRACE(block_unplug_timer,
- TPPROTO(struct request_queue *q),
- TPARGS(q));
+ TP_PROTO(struct request_queue *q),
+ TP_ARGS(q));
DECLARE_TRACE(block_unplug_io,
- TPPROTO(struct request_queue *q),
- TPARGS(q));
+ TP_PROTO(struct request_queue *q),
+ TP_ARGS(q));
DECLARE_TRACE(block_split,
- TPPROTO(struct request_queue *q, struct bio *bio, unsigned int pdu),
- TPARGS(q, bio, pdu));
+ TP_PROTO(struct request_queue *q, struct bio *bio, unsigned int pdu),
+ TP_ARGS(q, bio, pdu));
DECLARE_TRACE(block_remap,
- TPPROTO(struct request_queue *q, struct bio *bio, dev_t dev,
- sector_t from, sector_t to),
- TPARGS(q, bio, dev, from, to));
+ TP_PROTO(struct request_queue *q, struct bio *bio, dev_t dev,
+ sector_t from, sector_t to),
+ TP_ARGS(q, bio, dev, from, to));
#endif
diff --git a/include/trace/irq_event_types.h b/include/trace/irq_event_types.h
index 65850bc..43bcb74 100644
--- a/include/trace/irq_event_types.h
+++ b/include/trace/irq_event_types.h
@@ -8,26 +8,36 @@
#undef TRACE_SYSTEM
#define TRACE_SYSTEM irq
-TRACE_EVENT_FORMAT(irq_handler_entry,
- TPPROTO(int irq, struct irqaction *action),
- TPARGS(irq, action),
- TPFMT("irq=%d handler=%s", irq, action->name),
- TRACE_STRUCT(
- TRACE_FIELD(int, irq, irq)
- ),
- TPRAWFMT("irq %d")
+/*
+ * Tracepoint for entry of interrupt handler:
+ */
+TRACE_FORMAT(irq_handler_entry,
+ TP_PROTO(int irq, struct irqaction *action),
+ TP_ARGS(irq, action),
+ TP_FMT("irq=%d handler=%s", irq, action->name)
);
-TRACE_EVENT_FORMAT(irq_handler_exit,
- TPPROTO(int irq, struct irqaction *action, int ret),
- TPARGS(irq, action, ret),
- TPFMT("irq=%d handler=%s return=%s",
- irq, action->name, ret ? "handled" : "unhandled"),
- TRACE_STRUCT(
- TRACE_FIELD(int, irq, irq)
- TRACE_FIELD(int, ret, ret)
+/*
+ * Tracepoint for return of an interrupt handler:
+ */
+TRACE_EVENT(irq_handler_exit,
+
+ TP_PROTO(int irq, struct irqaction *action, int ret),
+
+ TP_ARGS(irq, action, ret),
+
+ TP_STRUCT__entry(
+ __field( int, irq )
+ __field( int, ret )
),
- TPRAWFMT("irq %d ret %d")
- );
+
+ TP_printk("irq=%d return=%s",
+ __entry->irq, __entry->ret ? "handled" : "unhandled"),
+
+ TP_fast_assign(
+ __entry->irq = irq;
+ __entry->ret = ret;
+ )
+);
#undef TRACE_SYSTEM
diff --git a/include/trace/lockdep_event_types.h b/include/trace/lockdep_event_types.h
index f713d74..adccfcd 100644
--- a/include/trace/lockdep_event_types.h
+++ b/include/trace/lockdep_event_types.h
@@ -1,5 +1,5 @@
-#ifndef TRACE_EVENT_FORMAT
+#ifndef TRACE_FORMAT
# error Do not include this file directly.
# error Unless you know what you are doing.
#endif
@@ -10,32 +10,32 @@
#ifdef CONFIG_LOCKDEP
TRACE_FORMAT(lock_acquire,
- TPPROTO(struct lockdep_map *lock, unsigned int subclass,
+ TP_PROTO(struct lockdep_map *lock, unsigned int subclass,
int trylock, int read, int check,
struct lockdep_map *next_lock, unsigned long ip),
- TPARGS(lock, subclass, trylock, read, check, next_lock, ip),
- TPFMT("%s%s%s", trylock ? "try " : "",
+ TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip),
+ TP_FMT("%s%s%s", trylock ? "try " : "",
read ? "read " : "", lock->name)
);
TRACE_FORMAT(lock_release,
- TPPROTO(struct lockdep_map *lock, int nested, unsigned long ip),
- TPARGS(lock, nested, ip),
- TPFMT("%s", lock->name)
+ TP_PROTO(struct lockdep_map *lock, int nested, unsigned long ip),
+ TP_ARGS(lock, nested, ip),
+ TP_FMT("%s", lock->name)
);
#ifdef CONFIG_LOCK_STAT
TRACE_FORMAT(lock_contended,
- TPPROTO(struct lockdep_map *lock, unsigned long ip),
- TPARGS(lock, ip),
- TPFMT("%s", lock->name)
+ TP_PROTO(struct lockdep_map *lock, unsigned long ip),
+ TP_ARGS(lock, ip),
+ TP_FMT("%s", lock->name)
);
TRACE_FORMAT(lock_acquired,
- TPPROTO(struct lockdep_map *lock, unsigned long ip),
- TPARGS(lock, ip),
- TPFMT("%s", lock->name)
+ TP_PROTO(struct lockdep_map *lock, unsigned long ip),
+ TP_ARGS(lock, ip),
+ TP_FMT("%s", lock->name)
);
#endif
diff --git a/include/trace/power.h b/include/trace/power.h
index 38aca53..ef20466 100644
--- a/include/trace/power.h
+++ b/include/trace/power.h
@@ -18,15 +18,15 @@ struct power_trace {
};
DECLARE_TRACE(power_start,
- TPPROTO(struct power_trace *it, unsigned int type, unsigned int state),
- TPARGS(it, type, state));
+ TP_PROTO(struct power_trace *it, unsigned int type, unsigned int state),
+ TP_ARGS(it, type, state));
DECLARE_TRACE(power_mark,
- TPPROTO(struct power_trace *it, unsigned int type, unsigned int state),
- TPARGS(it, type, state));
+ TP_PROTO(struct power_trace *it, unsigned int type, unsigned int state),
+ TP_ARGS(it, type, state));
DECLARE_TRACE(power_end,
- TPPROTO(struct power_trace *it),
- TPARGS(it));
+ TP_PROTO(struct power_trace *it),
+ TP_ARGS(it));
#endif /* _TRACE_POWER_H */
diff --git a/include/trace/sched_event_types.h b/include/trace/sched_event_types.h
index a6de5c1..fb37af6 100644
--- a/include/trace/sched_event_types.h
+++ b/include/trace/sched_event_types.h
@@ -1,6 +1,6 @@
/* use <trace/sched.h> instead */
-#ifndef TRACE_EVENT_FORMAT
+#ifndef TRACE_EVENT
# error Do not include this file directly.
# error Unless you know what you are doing.
#endif
@@ -8,144 +8,330 @@
#undef TRACE_SYSTEM
#define TRACE_SYSTEM sched
-TRACE_EVENT_FORMAT(sched_kthread_stop,
- TPPROTO(struct task_struct *t),
- TPARGS(t),
- TPFMT("task %s:%d", t->comm, t->pid),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, pid, t->pid)
+/*
+ * Tracepoint for calling kthread_stop, performed to end a kthread:
+ */
+TRACE_EVENT(sched_kthread_stop,
+
+ TP_PROTO(struct task_struct *t),
+
+ TP_ARGS(t),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
),
- TPRAWFMT("task %d")
- );
-
-TRACE_EVENT_FORMAT(sched_kthread_stop_ret,
- TPPROTO(int ret),
- TPARGS(ret),
- TPFMT("ret=%d", ret),
- TRACE_STRUCT(
- TRACE_FIELD(int, ret, ret)
+
+ TP_printk("task %s:%d", __entry->comm, __entry->pid),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, t->comm, TASK_COMM_LEN);
+ __entry->pid = t->pid;
+ )
+);
+
+/*
+ * Tracepoint for the return value of the kthread stopping:
+ */
+TRACE_EVENT(sched_kthread_stop_ret,
+
+ TP_PROTO(int ret),
+
+ TP_ARGS(ret),
+
+ TP_STRUCT__entry(
+ __field( int, ret )
),
- TPRAWFMT("ret=%d")
- );
-
-TRACE_EVENT_FORMAT(sched_wait_task,
- TPPROTO(struct rq *rq, struct task_struct *p),
- TPARGS(rq, p),
- TPFMT("task %s:%d", p->comm, p->pid),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, pid, p->pid)
+
+ TP_printk("ret %d", __entry->ret),
+
+ TP_fast_assign(
+ __entry->ret = ret;
+ )
+);
+
+/*
+ * Tracepoint for waiting on task to unschedule:
+ *
+ * (NOTE: the 'rq' argument is not used by generic trace events,
+ * but used by the latency tracer plugin. )
+ */
+TRACE_EVENT(sched_wait_task,
+
+ TP_PROTO(struct rq *rq, struct task_struct *p),
+
+ TP_ARGS(rq, p),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( int, prio )
),
- TPRAWFMT("task %d")
- );
-
-TRACE_EVENT_FORMAT(sched_wakeup,
- TPPROTO(struct rq *rq, struct task_struct *p, int success),
- TPARGS(rq, p, success),
- TPFMT("task %s:%d %s",
- p->comm, p->pid, success ? "succeeded" : "failed"),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, pid, p->pid)
- TRACE_FIELD(int, success, success)
+
+ TP_printk("task %s:%d [%d]",
+ __entry->comm, __entry->pid, __entry->prio),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->prio = p->prio;
+ )
+);
+
+/*
+ * Tracepoint for waking up a task:
+ *
+ * (NOTE: the 'rq' argument is not used by generic trace events,
+ * but used by the latency tracer plugin. )
+ */
+TRACE_EVENT(sched_wakeup,
+
+ TP_PROTO(struct rq *rq, struct task_struct *p, int success),
+
+ TP_ARGS(rq, p, success),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( int, prio )
+ __field( int, success )
),
- TPRAWFMT("task %d success=%d")
- );
-
-TRACE_EVENT_FORMAT(sched_wakeup_new,
- TPPROTO(struct rq *rq, struct task_struct *p, int success),
- TPARGS(rq, p, success),
- TPFMT("task %s:%d",
- p->comm, p->pid, success ? "succeeded" : "failed"),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, pid, p->pid)
- TRACE_FIELD(int, success, success)
+
+ TP_printk("task %s:%d [%d] success=%d",
+ __entry->comm, __entry->pid, __entry->prio,
+ __entry->success),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->prio = p->prio;
+ __entry->success = success;
+ )
+);
+
+/*
+ * Tracepoint for waking up a new task:
+ *
+ * (NOTE: the 'rq' argument is not used by generic trace events,
+ * but used by the latency tracer plugin. )
+ */
+TRACE_EVENT(sched_wakeup_new,
+
+ TP_PROTO(struct rq *rq, struct task_struct *p, int success),
+
+ TP_ARGS(rq, p, success),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( int, prio )
+ __field( int, success )
),
- TPRAWFMT("task %d success=%d")
- );
-
-TRACE_EVENT_FORMAT(sched_switch,
- TPPROTO(struct rq *rq, struct task_struct *prev,
- struct task_struct *next),
- TPARGS(rq, prev, next),
- TPFMT("task %s:%d ==> %s:%d",
- prev->comm, prev->pid, next->comm, next->pid),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, prev_pid, prev->pid)
- TRACE_FIELD(int, prev_prio, prev->prio)
- TRACE_FIELD_SPECIAL(char next_comm[TASK_COMM_LEN],
- next_comm,
- TPCMD(memcpy(TRACE_ENTRY->next_comm,
- next->comm,
- TASK_COMM_LEN)))
- TRACE_FIELD(pid_t, next_pid, next->pid)
- TRACE_FIELD(int, next_prio, next->prio)
+
+ TP_printk("task %s:%d [%d] success=%d",
+ __entry->comm, __entry->pid, __entry->prio,
+ __entry->success),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->prio = p->prio;
+ __entry->success = success;
+ )
+);
+
+/*
+ * Tracepoint for task switches, performed by the scheduler:
+ *
+ * (NOTE: the 'rq' argument is not used by generic trace events,
+ * but used by the latency tracer plugin. )
+ */
+TRACE_EVENT(sched_switch,
+
+ TP_PROTO(struct rq *rq, struct task_struct *prev,
+ struct task_struct *next),
+
+ TP_ARGS(rq, prev, next),
+
+ TP_STRUCT__entry(
+ __array( char, prev_comm, TASK_COMM_LEN )
+ __field( pid_t, prev_pid )
+ __field( int, prev_prio )
+ __array( char, next_comm, TASK_COMM_LEN )
+ __field( pid_t, next_pid )
+ __field( int, next_prio )
),
- TPRAWFMT("prev %d:%d ==> next %s:%d:%d")
- );
-
-TRACE_EVENT_FORMAT(sched_migrate_task,
- TPPROTO(struct task_struct *p, int orig_cpu, int dest_cpu),
- TPARGS(p, orig_cpu, dest_cpu),
- TPFMT("task %s:%d from: %d to: %d",
- p->comm, p->pid, orig_cpu, dest_cpu),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, pid, p->pid)
- TRACE_FIELD(int, orig_cpu, orig_cpu)
- TRACE_FIELD(int, dest_cpu, dest_cpu)
+
+ TP_printk("task %s:%d [%d] ==> %s:%d [%d]",
+ __entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
+ __entry->next_comm, __entry->next_pid, __entry->next_prio),
+
+ TP_fast_assign(
+ memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN);
+ __entry->prev_pid = prev->pid;
+ __entry->prev_prio = prev->prio;
+ memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN);
+ __entry->next_pid = next->pid;
+ __entry->next_prio = next->prio;
+ )
+);
+
+/*
+ * Tracepoint for a task being migrated:
+ */
+TRACE_EVENT(sched_migrate_task,
+
+ TP_PROTO(struct task_struct *p, int orig_cpu, int dest_cpu),
+
+ TP_ARGS(p, orig_cpu, dest_cpu),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( int, prio )
+ __field( int, orig_cpu )
+ __field( int, dest_cpu )
),
- TPRAWFMT("task %d from: %d to: %d")
- );
-
-TRACE_EVENT_FORMAT(sched_process_free,
- TPPROTO(struct task_struct *p),
- TPARGS(p),
- TPFMT("task %s:%d", p->comm, p->pid),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, pid, p->pid)
+
+ TP_printk("task %s:%d [%d] from: %d to: %d",
+ __entry->comm, __entry->pid, __entry->prio,
+ __entry->orig_cpu, __entry->dest_cpu),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->prio = p->prio;
+ __entry->orig_cpu = orig_cpu;
+ __entry->dest_cpu = dest_cpu;
+ )
+);
+
+/*
+ * Tracepoint for freeing a task:
+ */
+TRACE_EVENT(sched_process_free,
+
+ TP_PROTO(struct task_struct *p),
+
+ TP_ARGS(p),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( int, prio )
),
- TPRAWFMT("task %d")
- );
-
-TRACE_EVENT_FORMAT(sched_process_exit,
- TPPROTO(struct task_struct *p),
- TPARGS(p),
- TPFMT("task %s:%d", p->comm, p->pid),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, pid, p->pid)
+
+ TP_printk("task %s:%d [%d]",
+ __entry->comm, __entry->pid, __entry->prio),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->prio = p->prio;
+ )
+);
+
+/*
+ * Tracepoint for a task exiting:
+ */
+TRACE_EVENT(sched_process_exit,
+
+ TP_PROTO(struct task_struct *p),
+
+ TP_ARGS(p),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( int, prio )
),
- TPRAWFMT("task %d")
- );
-
-TRACE_EVENT_FORMAT(sched_process_wait,
- TPPROTO(struct pid *pid),
- TPARGS(pid),
- TPFMT("pid %d", pid_nr(pid)),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, pid, pid_nr(pid))
+
+ TP_printk("task %s:%d [%d]",
+ __entry->comm, __entry->pid, __entry->prio),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->prio = p->prio;
+ )
+);
+
+/*
+ * Tracepoint for a waiting task:
+ */
+TRACE_EVENT(sched_process_wait,
+
+ TP_PROTO(struct pid *pid),
+
+ TP_ARGS(pid),
+
+ TP_STRUCT__entry(
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
+ __field( int, prio )
),
- TPRAWFMT("task %d")
- );
-
-TRACE_EVENT_FORMAT(sched_process_fork,
- TPPROTO(struct task_struct *parent, struct task_struct *child),
- TPARGS(parent, child),
- TPFMT("parent %s:%d child %s:%d",
- parent->comm, parent->pid, child->comm, child->pid),
- TRACE_STRUCT(
- TRACE_FIELD(pid_t, parent, parent->pid)
- TRACE_FIELD(pid_t, child, child->pid)
+
+ TP_printk("task %s:%d [%d]",
+ __entry->comm, __entry->pid, __entry->prio),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
+ __entry->pid = pid_nr(pid);
+ __entry->prio = current->prio;
+ )
+);
+
+/*
+ * Tracepoint for do_fork:
+ */
+TRACE_EVENT(sched_process_fork,
+
+ TP_PROTO(struct task_struct *parent, struct task_struct *child),
+
+ TP_ARGS(parent, child),
+
+ TP_STRUCT__entry(
+ __array( char, parent_comm, TASK_COMM_LEN )
+ __field( pid_t, parent_pid )
+ __array( char, child_comm, TASK_COMM_LEN )
+ __field( pid_t, child_pid )
),
- TPRAWFMT("parent %d child %d")
- );
-
-TRACE_EVENT_FORMAT(sched_signal_send,
- TPPROTO(int sig, struct task_struct *p),
- TPARGS(sig, p),
- TPFMT("sig: %d task %s:%d", sig, p->comm, p->pid),
- TRACE_STRUCT(
- TRACE_FIELD(int, sig, sig)
- TRACE_FIELD(pid_t, pid, p->pid)
+
+ TP_printk("parent %s:%d child %s:%d",
+ __entry->parent_comm, __entry->parent_pid,
+ __entry->child_comm, __entry->child_pid),
+
+ TP_fast_assign(
+ memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN);
+ __entry->parent_pid = parent->pid;
+ memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN);
+ __entry->child_pid = child->pid;
+ )
+);
+
+/*
+ * Tracepoint for sending a signal:
+ */
+TRACE_EVENT(sched_signal_send,
+
+ TP_PROTO(int sig, struct task_struct *p),
+
+ TP_ARGS(sig, p),
+
+ TP_STRUCT__entry(
+ __field( int, sig )
+ __array( char, comm, TASK_COMM_LEN )
+ __field( pid_t, pid )
),
- TPRAWFMT("sig: %d task %d")
- );
+
+ TP_printk("sig: %d task %s:%d",
+ __entry->sig, __entry->comm, __entry->pid),
+
+ TP_fast_assign(
+ memcpy(__entry->comm, p->comm, TASK_COMM_LEN);
+ __entry->pid = p->pid;
+ __entry->sig = sig;
+ )
+);
#undef TRACE_SYSTEM
diff --git a/include/trace/workqueue.h b/include/trace/workqueue.h
index 867829d..7626523 100644
--- a/include/trace/workqueue.h
+++ b/include/trace/workqueue.h
@@ -6,20 +6,20 @@
#include <linux/sched.h>
DECLARE_TRACE(workqueue_insertion,
- TPPROTO(struct task_struct *wq_thread, struct work_struct *work),
- TPARGS(wq_thread, work));
+ TP_PROTO(struct task_struct *wq_thread, struct work_struct *work),
+ TP_ARGS(wq_thread, work));
DECLARE_TRACE(workqueue_execution,
- TPPROTO(struct task_struct *wq_thread, struct work_struct *work),
- TPARGS(wq_thread, work));
+ 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,
- TPPROTO(struct task_struct *wq_thread, int cpu),
- TPARGS(wq_thread, cpu));
+ TP_PROTO(struct task_struct *wq_thread, int cpu),
+ TP_ARGS(wq_thread, cpu));
DECLARE_TRACE(workqueue_destruction,
- TPPROTO(struct task_struct *wq_thread),
- TPARGS(wq_thread));
+ TP_PROTO(struct task_struct *wq_thread),
+ TP_ARGS(wq_thread));
#endif /* __TRACE_WORKQUEUE_H */
OpenPOWER on IntegriCloud