diff options
| author | Felix Blyakher <felixb@sgi.com> | 2009-06-10 18:07:47 -0400 |
|---|---|---|
| committer | Felix Blyakher <felixb@sgi.com> | 2009-06-10 18:07:47 -0400 |
| commit | 4e73e0eb633f8a1b5cbf20e7f42c6dbfec1d1ca7 (patch) | |
| tree | 0cea46e43f0625244c3d06a71d6559e5ec5419ca /include/trace | |
| parent | 4156e735d3abde8e9243b5d22f7999dd3fffab2e (diff) | |
| parent | 07a2039b8eb0af4ff464efd3dfd95de5c02648c6 (diff) | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'include/trace')
| -rw-r--r-- | include/trace/block.h | 70 | ||||
| -rw-r--r-- | include/trace/irq.h | 9 | ||||
| -rw-r--r-- | include/trace/irq_event_types.h | 55 | ||||
| -rw-r--r-- | include/trace/kmemtrace.h | 63 | ||||
| -rw-r--r-- | include/trace/lockdep.h | 9 | ||||
| -rw-r--r-- | include/trace/lockdep_event_types.h | 44 | ||||
| -rw-r--r-- | include/trace/power.h | 32 | ||||
| -rw-r--r-- | include/trace/sched.h | 49 | ||||
| -rw-r--r-- | include/trace/sched_event_types.h | 337 | ||||
| -rw-r--r-- | include/trace/skb.h | 4 | ||||
| -rw-r--r-- | include/trace/syscall.h | 35 | ||||
| -rw-r--r-- | include/trace/trace_event_types.h | 5 | ||||
| -rw-r--r-- | include/trace/trace_events.h | 5 | ||||
| -rw-r--r-- | include/trace/workqueue.h | 25 |
14 files changed, 657 insertions, 85 deletions
diff --git a/include/trace/block.h b/include/trace/block.h index 25c6a1fd5b77..25b7068b819e 100644 --- a/include/trace/block.h +++ b/include/trace/block.h | |||
| @@ -5,72 +5,72 @@ | |||
| 5 | #include <linux/tracepoint.h> | 5 | #include <linux/tracepoint.h> |
| 6 | 6 | ||
| 7 | DECLARE_TRACE(block_rq_abort, | 7 | DECLARE_TRACE(block_rq_abort, |
| 8 | TPPROTO(struct request_queue *q, struct request *rq), | 8 | TP_PROTO(struct request_queue *q, struct request *rq), |
| 9 | TPARGS(q, rq)); | 9 | TP_ARGS(q, rq)); |
| 10 | 10 | ||
| 11 | DECLARE_TRACE(block_rq_insert, | 11 | DECLARE_TRACE(block_rq_insert, |
| 12 | TPPROTO(struct request_queue *q, struct request *rq), | 12 | TP_PROTO(struct request_queue *q, struct request *rq), |
| 13 | TPARGS(q, rq)); | 13 | TP_ARGS(q, rq)); |
| 14 | 14 | ||
| 15 | DECLARE_TRACE(block_rq_issue, | 15 | DECLARE_TRACE(block_rq_issue, |
| 16 | TPPROTO(struct request_queue *q, struct request *rq), | 16 | TP_PROTO(struct request_queue *q, struct request *rq), |
| 17 | TPARGS(q, rq)); | 17 | TP_ARGS(q, rq)); |
| 18 | 18 | ||
| 19 | DECLARE_TRACE(block_rq_requeue, | 19 | DECLARE_TRACE(block_rq_requeue, |
| 20 | TPPROTO(struct request_queue *q, struct request *rq), | 20 | TP_PROTO(struct request_queue *q, struct request *rq), |
| 21 | TPARGS(q, rq)); | 21 | TP_ARGS(q, rq)); |
| 22 | 22 | ||
| 23 | DECLARE_TRACE(block_rq_complete, | 23 | DECLARE_TRACE(block_rq_complete, |
| 24 | TPPROTO(struct request_queue *q, struct request *rq), | 24 | TP_PROTO(struct request_queue *q, struct request *rq), |
| 25 | TPARGS(q, rq)); | 25 | TP_ARGS(q, rq)); |
| 26 | 26 | ||
| 27 | DECLARE_TRACE(block_bio_bounce, | 27 | DECLARE_TRACE(block_bio_bounce, |
| 28 | TPPROTO(struct request_queue *q, struct bio *bio), | 28 | TP_PROTO(struct request_queue *q, struct bio *bio), |
| 29 | TPARGS(q, bio)); | 29 | TP_ARGS(q, bio)); |
| 30 | 30 | ||
| 31 | DECLARE_TRACE(block_bio_complete, | 31 | DECLARE_TRACE(block_bio_complete, |
| 32 | TPPROTO(struct request_queue *q, struct bio *bio), | 32 | TP_PROTO(struct request_queue *q, struct bio *bio), |
| 33 | TPARGS(q, bio)); | 33 | TP_ARGS(q, bio)); |
| 34 | 34 | ||
| 35 | DECLARE_TRACE(block_bio_backmerge, | 35 | DECLARE_TRACE(block_bio_backmerge, |
| 36 | TPPROTO(struct request_queue *q, struct bio *bio), | 36 | TP_PROTO(struct request_queue *q, struct bio *bio), |
| 37 | TPARGS(q, bio)); | 37 | TP_ARGS(q, bio)); |
| 38 | 38 | ||
| 39 | DECLARE_TRACE(block_bio_frontmerge, | 39 | DECLARE_TRACE(block_bio_frontmerge, |
| 40 | TPPROTO(struct request_queue *q, struct bio *bio), | 40 | TP_PROTO(struct request_queue *q, struct bio *bio), |
| 41 | TPARGS(q, bio)); | 41 | TP_ARGS(q, bio)); |
| 42 | 42 | ||
| 43 | DECLARE_TRACE(block_bio_queue, | 43 | DECLARE_TRACE(block_bio_queue, |
| 44 | TPPROTO(struct request_queue *q, struct bio *bio), | 44 | TP_PROTO(struct request_queue *q, struct bio *bio), |
| 45 | TPARGS(q, bio)); | 45 | TP_ARGS(q, bio)); |
| 46 | 46 | ||
| 47 | DECLARE_TRACE(block_getrq, | 47 | DECLARE_TRACE(block_getrq, |
| 48 | TPPROTO(struct request_queue *q, struct bio *bio, int rw), | 48 | TP_PROTO(struct request_queue *q, struct bio *bio, int rw), |
| 49 | TPARGS(q, bio, rw)); | 49 | TP_ARGS(q, bio, rw)); |
| 50 | 50 | ||
| 51 | DECLARE_TRACE(block_sleeprq, | 51 | DECLARE_TRACE(block_sleeprq, |
| 52 | TPPROTO(struct request_queue *q, struct bio *bio, int rw), | 52 | TP_PROTO(struct request_queue *q, struct bio *bio, int rw), |
| 53 | TPARGS(q, bio, rw)); | 53 | TP_ARGS(q, bio, rw)); |
| 54 | 54 | ||
| 55 | DECLARE_TRACE(block_plug, | 55 | DECLARE_TRACE(block_plug, |
| 56 | TPPROTO(struct request_queue *q), | 56 | TP_PROTO(struct request_queue *q), |
| 57 | TPARGS(q)); | 57 | TP_ARGS(q)); |
| 58 | 58 | ||
| 59 | DECLARE_TRACE(block_unplug_timer, | 59 | DECLARE_TRACE(block_unplug_timer, |
| 60 | TPPROTO(struct request_queue *q), | 60 | TP_PROTO(struct request_queue *q), |
| 61 | TPARGS(q)); | 61 | TP_ARGS(q)); |
| 62 | 62 | ||
| 63 | DECLARE_TRACE(block_unplug_io, | 63 | DECLARE_TRACE(block_unplug_io, |
| 64 | TPPROTO(struct request_queue *q), | 64 | TP_PROTO(struct request_queue *q), |
| 65 | TPARGS(q)); | 65 | TP_ARGS(q)); |
| 66 | 66 | ||
| 67 | DECLARE_TRACE(block_split, | 67 | DECLARE_TRACE(block_split, |
| 68 | TPPROTO(struct request_queue *q, struct bio *bio, unsigned int pdu), | 68 | TP_PROTO(struct request_queue *q, struct bio *bio, unsigned int pdu), |
| 69 | TPARGS(q, bio, pdu)); | 69 | TP_ARGS(q, bio, pdu)); |
| 70 | 70 | ||
| 71 | DECLARE_TRACE(block_remap, | 71 | DECLARE_TRACE(block_remap, |
| 72 | TPPROTO(struct request_queue *q, struct bio *bio, dev_t dev, | 72 | TP_PROTO(struct request_queue *q, struct bio *bio, dev_t dev, |
| 73 | sector_t from, sector_t to), | 73 | sector_t from, sector_t to), |
| 74 | TPARGS(q, bio, dev, from, to)); | 74 | TP_ARGS(q, bio, dev, from, to)); |
| 75 | 75 | ||
| 76 | #endif | 76 | #endif |
diff --git a/include/trace/irq.h b/include/trace/irq.h new file mode 100644 index 000000000000..ff5d4495dc37 --- /dev/null +++ b/include/trace/irq.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef _TRACE_IRQ_H | ||
| 2 | #define _TRACE_IRQ_H | ||
| 3 | |||
| 4 | #include <linux/interrupt.h> | ||
| 5 | #include <linux/tracepoint.h> | ||
| 6 | |||
| 7 | #include <trace/irq_event_types.h> | ||
| 8 | |||
| 9 | #endif | ||
diff --git a/include/trace/irq_event_types.h b/include/trace/irq_event_types.h new file mode 100644 index 000000000000..85964ebd47ec --- /dev/null +++ b/include/trace/irq_event_types.h | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | |||
| 2 | /* use <trace/irq.h> instead */ | ||
| 3 | #ifndef TRACE_FORMAT | ||
| 4 | # error Do not include this file directly. | ||
| 5 | # error Unless you know what you are doing. | ||
| 6 | #endif | ||
| 7 | |||
| 8 | #undef TRACE_SYSTEM | ||
| 9 | #define TRACE_SYSTEM irq | ||
| 10 | |||
| 11 | /* | ||
| 12 | * Tracepoint for entry of interrupt handler: | ||
| 13 | */ | ||
| 14 | TRACE_FORMAT(irq_handler_entry, | ||
| 15 | TP_PROTO(int irq, struct irqaction *action), | ||
| 16 | TP_ARGS(irq, action), | ||
| 17 | TP_FMT("irq=%d handler=%s", irq, action->name) | ||
| 18 | ); | ||
| 19 | |||
| 20 | /* | ||
| 21 | * Tracepoint for return of an interrupt handler: | ||
| 22 | */ | ||
| 23 | TRACE_EVENT(irq_handler_exit, | ||
| 24 | |||
| 25 | TP_PROTO(int irq, struct irqaction *action, int ret), | ||
| 26 | |||
| 27 | TP_ARGS(irq, action, ret), | ||
| 28 | |||
| 29 | TP_STRUCT__entry( | ||
| 30 | __field( int, irq ) | ||
| 31 | __field( int, ret ) | ||
| 32 | ), | ||
| 33 | |||
| 34 | TP_fast_assign( | ||
| 35 | __entry->irq = irq; | ||
| 36 | __entry->ret = ret; | ||
| 37 | ), | ||
| 38 | |||
| 39 | TP_printk("irq=%d return=%s", | ||
| 40 | __entry->irq, __entry->ret ? "handled" : "unhandled") | ||
| 41 | ); | ||
| 42 | |||
| 43 | TRACE_FORMAT(softirq_entry, | ||
| 44 | TP_PROTO(struct softirq_action *h, struct softirq_action *vec), | ||
| 45 | TP_ARGS(h, vec), | ||
| 46 | TP_FMT("softirq=%d action=%s", (int)(h - vec), softirq_to_name[h-vec]) | ||
| 47 | ); | ||
| 48 | |||
| 49 | TRACE_FORMAT(softirq_exit, | ||
| 50 | TP_PROTO(struct softirq_action *h, struct softirq_action *vec), | ||
| 51 | TP_ARGS(h, vec), | ||
| 52 | TP_FMT("softirq=%d action=%s", (int)(h - vec), softirq_to_name[h-vec]) | ||
| 53 | ); | ||
| 54 | |||
| 55 | #undef TRACE_SYSTEM | ||
diff --git a/include/trace/kmemtrace.h b/include/trace/kmemtrace.h new file mode 100644 index 000000000000..28ee69f9cd46 --- /dev/null +++ b/include/trace/kmemtrace.h | |||
| @@ -0,0 +1,63 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2008 Eduard - Gabriel Munteanu | ||
| 3 | * | ||
| 4 | * This file is released under GPL version 2. | ||
| 5 | */ | ||
| 6 | |||
| 7 | #ifndef _LINUX_KMEMTRACE_H | ||
| 8 | #define _LINUX_KMEMTRACE_H | ||
| 9 | |||
| 10 | #ifdef __KERNEL__ | ||
| 11 | |||
| 12 | #include <linux/tracepoint.h> | ||
| 13 | #include <linux/types.h> | ||
| 14 | |||
| 15 | #ifdef CONFIG_KMEMTRACE | ||
| 16 | extern void kmemtrace_init(void); | ||
| 17 | #else | ||
| 18 | static inline void kmemtrace_init(void) | ||
| 19 | { | ||
| 20 | } | ||
| 21 | #endif | ||
| 22 | |||
| 23 | DECLARE_TRACE(kmalloc, | ||
| 24 | TP_PROTO(unsigned long call_site, | ||
| 25 | const void *ptr, | ||
| 26 | size_t bytes_req, | ||
| 27 | size_t bytes_alloc, | ||
| 28 | gfp_t gfp_flags), | ||
| 29 | TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)); | ||
| 30 | DECLARE_TRACE(kmem_cache_alloc, | ||
| 31 | TP_PROTO(unsigned long call_site, | ||
| 32 | const void *ptr, | ||
| 33 | size_t bytes_req, | ||
| 34 | size_t bytes_alloc, | ||
| 35 | gfp_t gfp_flags), | ||
| 36 | TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags)); | ||
| 37 | DECLARE_TRACE(kmalloc_node, | ||
| 38 | TP_PROTO(unsigned long call_site, | ||
| 39 | const void *ptr, | ||
| 40 | size_t bytes_req, | ||
| 41 | size_t bytes_alloc, | ||
| 42 | gfp_t gfp_flags, | ||
| 43 | int node), | ||
| 44 | TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)); | ||
| 45 | DECLARE_TRACE(kmem_cache_alloc_node, | ||
| 46 | TP_PROTO(unsigned long call_site, | ||
| 47 | const void *ptr, | ||
| 48 | size_t bytes_req, | ||
| 49 | size_t bytes_alloc, | ||
| 50 | gfp_t gfp_flags, | ||
| 51 | int node), | ||
| 52 | TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node)); | ||
| 53 | DECLARE_TRACE(kfree, | ||
| 54 | TP_PROTO(unsigned long call_site, const void *ptr), | ||
| 55 | TP_ARGS(call_site, ptr)); | ||
| 56 | DECLARE_TRACE(kmem_cache_free, | ||
| 57 | TP_PROTO(unsigned long call_site, const void *ptr), | ||
| 58 | TP_ARGS(call_site, ptr)); | ||
| 59 | |||
| 60 | #endif /* __KERNEL__ */ | ||
| 61 | |||
| 62 | #endif /* _LINUX_KMEMTRACE_H */ | ||
| 63 | |||
diff --git a/include/trace/lockdep.h b/include/trace/lockdep.h new file mode 100644 index 000000000000..5ca67df87f2a --- /dev/null +++ b/include/trace/lockdep.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef _TRACE_LOCKDEP_H | ||
| 2 | #define _TRACE_LOCKDEP_H | ||
| 3 | |||
| 4 | #include <linux/lockdep.h> | ||
| 5 | #include <linux/tracepoint.h> | ||
| 6 | |||
| 7 | #include <trace/lockdep_event_types.h> | ||
| 8 | |||
| 9 | #endif | ||
diff --git a/include/trace/lockdep_event_types.h b/include/trace/lockdep_event_types.h new file mode 100644 index 000000000000..adccfcd2ec8f --- /dev/null +++ b/include/trace/lockdep_event_types.h | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | |||
| 2 | #ifndef TRACE_FORMAT | ||
| 3 | # error Do not include this file directly. | ||
| 4 | # error Unless you know what you are doing. | ||
| 5 | #endif | ||
| 6 | |||
| 7 | #undef TRACE_SYSTEM | ||
| 8 | #define TRACE_SYSTEM lock | ||
| 9 | |||
| 10 | #ifdef CONFIG_LOCKDEP | ||
| 11 | |||
| 12 | TRACE_FORMAT(lock_acquire, | ||
| 13 | TP_PROTO(struct lockdep_map *lock, unsigned int subclass, | ||
| 14 | int trylock, int read, int check, | ||
| 15 | struct lockdep_map *next_lock, unsigned long ip), | ||
| 16 | TP_ARGS(lock, subclass, trylock, read, check, next_lock, ip), | ||
| 17 | TP_FMT("%s%s%s", trylock ? "try " : "", | ||
| 18 | read ? "read " : "", lock->name) | ||
| 19 | ); | ||
| 20 | |||
| 21 | TRACE_FORMAT(lock_release, | ||
| 22 | TP_PROTO(struct lockdep_map *lock, int nested, unsigned long ip), | ||
| 23 | TP_ARGS(lock, nested, ip), | ||
| 24 | TP_FMT("%s", lock->name) | ||
| 25 | ); | ||
| 26 | |||
| 27 | #ifdef CONFIG_LOCK_STAT | ||
| 28 | |||
| 29 | TRACE_FORMAT(lock_contended, | ||
| 30 | TP_PROTO(struct lockdep_map *lock, unsigned long ip), | ||
| 31 | TP_ARGS(lock, ip), | ||
| 32 | TP_FMT("%s", lock->name) | ||
| 33 | ); | ||
| 34 | |||
| 35 | TRACE_FORMAT(lock_acquired, | ||
| 36 | TP_PROTO(struct lockdep_map *lock, unsigned long ip), | ||
| 37 | TP_ARGS(lock, ip), | ||
| 38 | TP_FMT("%s", lock->name) | ||
| 39 | ); | ||
| 40 | |||
| 41 | #endif | ||
| 42 | #endif | ||
| 43 | |||
| 44 | #undef TRACE_SYSTEM | ||
diff --git a/include/trace/power.h b/include/trace/power.h new file mode 100644 index 000000000000..ef204666e983 --- /dev/null +++ b/include/trace/power.h | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | #ifndef _TRACE_POWER_H | ||
| 2 | #define _TRACE_POWER_H | ||
| 3 | |||
| 4 | #include <linux/ktime.h> | ||
| 5 | #include <linux/tracepoint.h> | ||
| 6 | |||
| 7 | enum { | ||
| 8 | POWER_NONE = 0, | ||
| 9 | POWER_CSTATE = 1, | ||
| 10 | POWER_PSTATE = 2, | ||
| 11 | }; | ||
| 12 | |||
| 13 | struct power_trace { | ||
| 14 | ktime_t stamp; | ||
| 15 | ktime_t end; | ||
| 16 | int type; | ||
| 17 | int state; | ||
| 18 | }; | ||
| 19 | |||
| 20 | DECLARE_TRACE(power_start, | ||
| 21 | TP_PROTO(struct power_trace *it, unsigned int type, unsigned int state), | ||
| 22 | TP_ARGS(it, type, state)); | ||
| 23 | |||
| 24 | DECLARE_TRACE(power_mark, | ||
| 25 | TP_PROTO(struct power_trace *it, unsigned int type, unsigned int state), | ||
| 26 | TP_ARGS(it, type, state)); | ||
| 27 | |||
| 28 | DECLARE_TRACE(power_end, | ||
| 29 | TP_PROTO(struct power_trace *it), | ||
| 30 | TP_ARGS(it)); | ||
| 31 | |||
| 32 | #endif /* _TRACE_POWER_H */ | ||
diff --git a/include/trace/sched.h b/include/trace/sched.h index 0d81098ee9fc..4e372a1a29bf 100644 --- a/include/trace/sched.h +++ b/include/trace/sched.h | |||
| @@ -4,53 +4,6 @@ | |||
| 4 | #include <linux/sched.h> | 4 | #include <linux/sched.h> |
| 5 | #include <linux/tracepoint.h> | 5 | #include <linux/tracepoint.h> |
| 6 | 6 | ||
| 7 | DECLARE_TRACE(sched_kthread_stop, | 7 | #include <trace/sched_event_types.h> |
| 8 | TPPROTO(struct task_struct *t), | ||
| 9 | TPARGS(t)); | ||
| 10 | |||
| 11 | DECLARE_TRACE(sched_kthread_stop_ret, | ||
| 12 | TPPROTO(int ret), | ||
| 13 | TPARGS(ret)); | ||
| 14 | |||
| 15 | DECLARE_TRACE(sched_wait_task, | ||
| 16 | TPPROTO(struct rq *rq, struct task_struct *p), | ||
| 17 | TPARGS(rq, p)); | ||
| 18 | |||
| 19 | DECLARE_TRACE(sched_wakeup, | ||
| 20 | TPPROTO(struct rq *rq, struct task_struct *p, int success), | ||
| 21 | TPARGS(rq, p, success)); | ||
| 22 | |||
| 23 | DECLARE_TRACE(sched_wakeup_new, | ||
| 24 | TPPROTO(struct rq *rq, struct task_struct *p, int success), | ||
| 25 | TPARGS(rq, p, success)); | ||
| 26 | |||
| 27 | DECLARE_TRACE(sched_switch, | ||
| 28 | TPPROTO(struct rq *rq, struct task_struct *prev, | ||
| 29 | struct task_struct *next), | ||
| 30 | TPARGS(rq, prev, next)); | ||
| 31 | |||
| 32 | DECLARE_TRACE(sched_migrate_task, | ||
| 33 | TPPROTO(struct task_struct *p, int orig_cpu, int dest_cpu), | ||
| 34 | TPARGS(p, orig_cpu, dest_cpu)); | ||
| 35 | |||
| 36 | DECLARE_TRACE(sched_process_free, | ||
| 37 | TPPROTO(struct task_struct *p), | ||
| 38 | TPARGS(p)); | ||
| 39 | |||
| 40 | DECLARE_TRACE(sched_process_exit, | ||
| 41 | TPPROTO(struct task_struct *p), | ||
| 42 | TPARGS(p)); | ||
| 43 | |||
| 44 | DECLARE_TRACE(sched_process_wait, | ||
| 45 | TPPROTO(struct pid *pid), | ||
| 46 | TPARGS(pid)); | ||
| 47 | |||
| 48 | DECLARE_TRACE(sched_process_fork, | ||
| 49 | TPPROTO(struct task_struct *parent, struct task_struct *child), | ||
| 50 | TPARGS(parent, child)); | ||
| 51 | |||
| 52 | DECLARE_TRACE(sched_signal_send, | ||
| 53 | TPPROTO(int sig, struct task_struct *p), | ||
| 54 | TPARGS(sig, p)); | ||
| 55 | 8 | ||
| 56 | #endif | 9 | #endif |
diff --git a/include/trace/sched_event_types.h b/include/trace/sched_event_types.h new file mode 100644 index 000000000000..63547dc1125f --- /dev/null +++ b/include/trace/sched_event_types.h | |||
| @@ -0,0 +1,337 @@ | |||
| 1 | |||
| 2 | /* use <trace/sched.h> instead */ | ||
| 3 | #ifndef TRACE_EVENT | ||
| 4 | # error Do not include this file directly. | ||
| 5 | # error Unless you know what you are doing. | ||
| 6 | #endif | ||
| 7 | |||
| 8 | #undef TRACE_SYSTEM | ||
| 9 | #define TRACE_SYSTEM sched | ||
| 10 | |||
| 11 | /* | ||
| 12 | * Tracepoint for calling kthread_stop, performed to end a kthread: | ||
| 13 | */ | ||
| 14 | TRACE_EVENT(sched_kthread_stop, | ||
| 15 | |||
| 16 | TP_PROTO(struct task_struct *t), | ||
| 17 | |||
| 18 | TP_ARGS(t), | ||
| 19 | |||
| 20 | TP_STRUCT__entry( | ||
| 21 | __array( char, comm, TASK_COMM_LEN ) | ||
| 22 | __field( pid_t, pid ) | ||
| 23 | ), | ||
| 24 | |||
| 25 | TP_fast_assign( | ||
| 26 | memcpy(__entry->comm, t->comm, TASK_COMM_LEN); | ||
| 27 | __entry->pid = t->pid; | ||
| 28 | ), | ||
| 29 | |||
| 30 | TP_printk("task %s:%d", __entry->comm, __entry->pid) | ||
| 31 | ); | ||
| 32 | |||
| 33 | /* | ||
| 34 | * Tracepoint for the return value of the kthread stopping: | ||
| 35 | */ | ||
| 36 | TRACE_EVENT(sched_kthread_stop_ret, | ||
| 37 | |||
| 38 | TP_PROTO(int ret), | ||
| 39 | |||
| 40 | TP_ARGS(ret), | ||
| 41 | |||
| 42 | TP_STRUCT__entry( | ||
| 43 | __field( int, ret ) | ||
| 44 | ), | ||
| 45 | |||
| 46 | TP_fast_assign( | ||
| 47 | __entry->ret = ret; | ||
| 48 | ), | ||
| 49 | |||
| 50 | TP_printk("ret %d", __entry->ret) | ||
| 51 | ); | ||
| 52 | |||
| 53 | /* | ||
| 54 | * Tracepoint for waiting on task to unschedule: | ||
| 55 | * | ||
| 56 | * (NOTE: the 'rq' argument is not used by generic trace events, | ||
| 57 | * but used by the latency tracer plugin. ) | ||
| 58 | */ | ||
| 59 | TRACE_EVENT(sched_wait_task, | ||
| 60 | |||
| 61 | TP_PROTO(struct rq *rq, struct task_struct *p), | ||
| 62 | |||
| 63 | TP_ARGS(rq, p), | ||
| 64 | |||
| 65 | TP_STRUCT__entry( | ||
| 66 | __array( char, comm, TASK_COMM_LEN ) | ||
| 67 | __field( pid_t, pid ) | ||
| 68 | __field( int, prio ) | ||
| 69 | ), | ||
| 70 | |||
| 71 | TP_fast_assign( | ||
| 72 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | ||
| 73 | __entry->pid = p->pid; | ||
| 74 | __entry->prio = p->prio; | ||
| 75 | ), | ||
| 76 | |||
| 77 | TP_printk("task %s:%d [%d]", | ||
| 78 | __entry->comm, __entry->pid, __entry->prio) | ||
| 79 | ); | ||
| 80 | |||
| 81 | /* | ||
| 82 | * Tracepoint for waking up a task: | ||
| 83 | * | ||
| 84 | * (NOTE: the 'rq' argument is not used by generic trace events, | ||
| 85 | * but used by the latency tracer plugin. ) | ||
| 86 | */ | ||
| 87 | TRACE_EVENT(sched_wakeup, | ||
| 88 | |||
| 89 | TP_PROTO(struct rq *rq, struct task_struct *p, int success), | ||
| 90 | |||
| 91 | TP_ARGS(rq, p, success), | ||
| 92 | |||
| 93 | TP_STRUCT__entry( | ||
| 94 | __array( char, comm, TASK_COMM_LEN ) | ||
| 95 | __field( pid_t, pid ) | ||
| 96 | __field( int, prio ) | ||
| 97 | __field( int, success ) | ||
| 98 | ), | ||
| 99 | |||
| 100 | TP_fast_assign( | ||
| 101 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | ||
| 102 | __entry->pid = p->pid; | ||
| 103 | __entry->prio = p->prio; | ||
| 104 | __entry->success = success; | ||
| 105 | ), | ||
| 106 | |||
| 107 | TP_printk("task %s:%d [%d] success=%d", | ||
| 108 | __entry->comm, __entry->pid, __entry->prio, | ||
| 109 | __entry->success) | ||
| 110 | ); | ||
| 111 | |||
| 112 | /* | ||
| 113 | * Tracepoint for waking up a new task: | ||
| 114 | * | ||
| 115 | * (NOTE: the 'rq' argument is not used by generic trace events, | ||
| 116 | * but used by the latency tracer plugin. ) | ||
| 117 | */ | ||
| 118 | TRACE_EVENT(sched_wakeup_new, | ||
| 119 | |||
| 120 | TP_PROTO(struct rq *rq, struct task_struct *p, int success), | ||
| 121 | |||
| 122 | TP_ARGS(rq, p, success), | ||
| 123 | |||
| 124 | TP_STRUCT__entry( | ||
| 125 | __array( char, comm, TASK_COMM_LEN ) | ||
| 126 | __field( pid_t, pid ) | ||
| 127 | __field( int, prio ) | ||
| 128 | __field( int, success ) | ||
| 129 | ), | ||
| 130 | |||
| 131 | TP_fast_assign( | ||
| 132 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | ||
| 133 | __entry->pid = p->pid; | ||
| 134 | __entry->prio = p->prio; | ||
| 135 | __entry->success = success; | ||
| 136 | ), | ||
| 137 | |||
| 138 | TP_printk("task %s:%d [%d] success=%d", | ||
| 139 | __entry->comm, __entry->pid, __entry->prio, | ||
| 140 | __entry->success) | ||
| 141 | ); | ||
| 142 | |||
| 143 | /* | ||
| 144 | * Tracepoint for task switches, performed by the scheduler: | ||
| 145 | * | ||
| 146 | * (NOTE: the 'rq' argument is not used by generic trace events, | ||
| 147 | * but used by the latency tracer plugin. ) | ||
| 148 | */ | ||
| 149 | TRACE_EVENT(sched_switch, | ||
| 150 | |||
| 151 | TP_PROTO(struct rq *rq, struct task_struct *prev, | ||
| 152 | struct task_struct *next), | ||
| 153 | |||
| 154 | TP_ARGS(rq, prev, next), | ||
| 155 | |||
| 156 | TP_STRUCT__entry( | ||
| 157 | __array( char, prev_comm, TASK_COMM_LEN ) | ||
| 158 | __field( pid_t, prev_pid ) | ||
| 159 | __field( int, prev_prio ) | ||
| 160 | __array( char, next_comm, TASK_COMM_LEN ) | ||
| 161 | __field( pid_t, next_pid ) | ||
| 162 | __field( int, next_prio ) | ||
| 163 | ), | ||
| 164 | |||
| 165 | TP_fast_assign( | ||
| 166 | memcpy(__entry->next_comm, next->comm, TASK_COMM_LEN); | ||
| 167 | __entry->prev_pid = prev->pid; | ||
| 168 | __entry->prev_prio = prev->prio; | ||
| 169 | memcpy(__entry->prev_comm, prev->comm, TASK_COMM_LEN); | ||
| 170 | __entry->next_pid = next->pid; | ||
| 171 | __entry->next_prio = next->prio; | ||
| 172 | ), | ||
| 173 | |||
| 174 | TP_printk("task %s:%d [%d] ==> %s:%d [%d]", | ||
| 175 | __entry->prev_comm, __entry->prev_pid, __entry->prev_prio, | ||
| 176 | __entry->next_comm, __entry->next_pid, __entry->next_prio) | ||
| 177 | ); | ||
| 178 | |||
| 179 | /* | ||
| 180 | * Tracepoint for a task being migrated: | ||
| 181 | */ | ||
| 182 | TRACE_EVENT(sched_migrate_task, | ||
| 183 | |||
| 184 | TP_PROTO(struct task_struct *p, int orig_cpu, int dest_cpu), | ||
| 185 | |||
| 186 | TP_ARGS(p, orig_cpu, dest_cpu), | ||
| 187 | |||
| 188 | TP_STRUCT__entry( | ||
| 189 | __array( char, comm, TASK_COMM_LEN ) | ||
| 190 | __field( pid_t, pid ) | ||
| 191 | __field( int, prio ) | ||
| 192 | __field( int, orig_cpu ) | ||
| 193 | __field( int, dest_cpu ) | ||
| 194 | ), | ||
| 195 | |||
| 196 | TP_fast_assign( | ||
| 197 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | ||
| 198 | __entry->pid = p->pid; | ||
| 199 | __entry->prio = p->prio; | ||
| 200 | __entry->orig_cpu = orig_cpu; | ||
| 201 | __entry->dest_cpu = dest_cpu; | ||
| 202 | ), | ||
| 203 | |||
| 204 | TP_printk("task %s:%d [%d] from: %d to: %d", | ||
| 205 | __entry->comm, __entry->pid, __entry->prio, | ||
| 206 | __entry->orig_cpu, __entry->dest_cpu) | ||
| 207 | ); | ||
| 208 | |||
| 209 | /* | ||
| 210 | * Tracepoint for freeing a task: | ||
| 211 | */ | ||
| 212 | TRACE_EVENT(sched_process_free, | ||
| 213 | |||
| 214 | TP_PROTO(struct task_struct *p), | ||
| 215 | |||
| 216 | TP_ARGS(p), | ||
| 217 | |||
| 218 | TP_STRUCT__entry( | ||
| 219 | __array( char, comm, TASK_COMM_LEN ) | ||
| 220 | __field( pid_t, pid ) | ||
| 221 | __field( int, prio ) | ||
| 222 | ), | ||
| 223 | |||
| 224 | TP_fast_assign( | ||
| 225 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | ||
| 226 | __entry->pid = p->pid; | ||
| 227 | __entry->prio = p->prio; | ||
| 228 | ), | ||
| 229 | |||
| 230 | TP_printk("task %s:%d [%d]", | ||
| 231 | __entry->comm, __entry->pid, __entry->prio) | ||
| 232 | ); | ||
| 233 | |||
| 234 | /* | ||
| 235 | * Tracepoint for a task exiting: | ||
| 236 | */ | ||
| 237 | TRACE_EVENT(sched_process_exit, | ||
| 238 | |||
| 239 | TP_PROTO(struct task_struct *p), | ||
| 240 | |||
| 241 | TP_ARGS(p), | ||
| 242 | |||
| 243 | TP_STRUCT__entry( | ||
| 244 | __array( char, comm, TASK_COMM_LEN ) | ||
| 245 | __field( pid_t, pid ) | ||
| 246 | __field( int, prio ) | ||
| 247 | ), | ||
| 248 | |||
| 249 | TP_fast_assign( | ||
| 250 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | ||
| 251 | __entry->pid = p->pid; | ||
| 252 | __entry->prio = p->prio; | ||
| 253 | ), | ||
| 254 | |||
| 255 | TP_printk("task %s:%d [%d]", | ||
| 256 | __entry->comm, __entry->pid, __entry->prio) | ||
| 257 | ); | ||
| 258 | |||
| 259 | /* | ||
| 260 | * Tracepoint for a waiting task: | ||
| 261 | */ | ||
| 262 | TRACE_EVENT(sched_process_wait, | ||
| 263 | |||
| 264 | TP_PROTO(struct pid *pid), | ||
| 265 | |||
| 266 | TP_ARGS(pid), | ||
| 267 | |||
| 268 | TP_STRUCT__entry( | ||
| 269 | __array( char, comm, TASK_COMM_LEN ) | ||
| 270 | __field( pid_t, pid ) | ||
| 271 | __field( int, prio ) | ||
| 272 | ), | ||
| 273 | |||
| 274 | TP_fast_assign( | ||
| 275 | memcpy(__entry->comm, current->comm, TASK_COMM_LEN); | ||
| 276 | __entry->pid = pid_nr(pid); | ||
| 277 | __entry->prio = current->prio; | ||
| 278 | ), | ||
| 279 | |||
| 280 | TP_printk("task %s:%d [%d]", | ||
| 281 | __entry->comm, __entry->pid, __entry->prio) | ||
| 282 | ); | ||
| 283 | |||
| 284 | /* | ||
| 285 | * Tracepoint for do_fork: | ||
| 286 | */ | ||
| 287 | TRACE_EVENT(sched_process_fork, | ||
| 288 | |||
| 289 | TP_PROTO(struct task_struct *parent, struct task_struct *child), | ||
| 290 | |||
| 291 | TP_ARGS(parent, child), | ||
| 292 | |||
| 293 | TP_STRUCT__entry( | ||
| 294 | __array( char, parent_comm, TASK_COMM_LEN ) | ||
| 295 | __field( pid_t, parent_pid ) | ||
| 296 | __array( char, child_comm, TASK_COMM_LEN ) | ||
| 297 | __field( pid_t, child_pid ) | ||
| 298 | ), | ||
| 299 | |||
| 300 | TP_fast_assign( | ||
| 301 | memcpy(__entry->parent_comm, parent->comm, TASK_COMM_LEN); | ||
| 302 | __entry->parent_pid = parent->pid; | ||
| 303 | memcpy(__entry->child_comm, child->comm, TASK_COMM_LEN); | ||
| 304 | __entry->child_pid = child->pid; | ||
| 305 | ), | ||
| 306 | |||
| 307 | TP_printk("parent %s:%d child %s:%d", | ||
| 308 | __entry->parent_comm, __entry->parent_pid, | ||
| 309 | __entry->child_comm, __entry->child_pid) | ||
| 310 | ); | ||
| 311 | |||
| 312 | /* | ||
| 313 | * Tracepoint for sending a signal: | ||
| 314 | */ | ||
| 315 | TRACE_EVENT(sched_signal_send, | ||
| 316 | |||
| 317 | TP_PROTO(int sig, struct task_struct *p), | ||
| 318 | |||
| 319 | TP_ARGS(sig, p), | ||
| 320 | |||
| 321 | TP_STRUCT__entry( | ||
| 322 | __field( int, sig ) | ||
| 323 | __array( char, comm, TASK_COMM_LEN ) | ||
| 324 | __field( pid_t, pid ) | ||
| 325 | ), | ||
| 326 | |||
| 327 | TP_fast_assign( | ||
| 328 | memcpy(__entry->comm, p->comm, TASK_COMM_LEN); | ||
| 329 | __entry->pid = p->pid; | ||
| 330 | __entry->sig = sig; | ||
| 331 | ), | ||
| 332 | |||
| 333 | TP_printk("sig: %d task %s:%d", | ||
| 334 | __entry->sig, __entry->comm, __entry->pid) | ||
| 335 | ); | ||
| 336 | |||
| 337 | #undef TRACE_SYSTEM | ||
diff --git a/include/trace/skb.h b/include/trace/skb.h index a96610f92f69..b66206d9be72 100644 --- a/include/trace/skb.h +++ b/include/trace/skb.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | #include <linux/tracepoint.h> | 5 | #include <linux/tracepoint.h> |
| 6 | 6 | ||
| 7 | DECLARE_TRACE(kfree_skb, | 7 | DECLARE_TRACE(kfree_skb, |
| 8 | TPPROTO(struct sk_buff *skb, void *location), | 8 | TP_PROTO(struct sk_buff *skb, void *location), |
| 9 | TPARGS(skb, location)); | 9 | TP_ARGS(skb, location)); |
| 10 | 10 | ||
| 11 | #endif | 11 | #endif |
diff --git a/include/trace/syscall.h b/include/trace/syscall.h new file mode 100644 index 000000000000..8cfe515cbc47 --- /dev/null +++ b/include/trace/syscall.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | #ifndef _TRACE_SYSCALL_H | ||
| 2 | #define _TRACE_SYSCALL_H | ||
| 3 | |||
| 4 | #include <asm/ptrace.h> | ||
| 5 | |||
| 6 | /* | ||
| 7 | * A syscall entry in the ftrace syscalls array. | ||
| 8 | * | ||
| 9 | * @name: name of the syscall | ||
| 10 | * @nb_args: number of parameters it takes | ||
| 11 | * @types: list of types as strings | ||
| 12 | * @args: list of args as strings (args[i] matches types[i]) | ||
| 13 | */ | ||
| 14 | struct syscall_metadata { | ||
| 15 | const char *name; | ||
| 16 | int nb_args; | ||
| 17 | const char **types; | ||
| 18 | const char **args; | ||
| 19 | }; | ||
| 20 | |||
| 21 | #ifdef CONFIG_FTRACE_SYSCALLS | ||
| 22 | extern void arch_init_ftrace_syscalls(void); | ||
| 23 | extern struct syscall_metadata *syscall_nr_to_meta(int nr); | ||
| 24 | extern void start_ftrace_syscalls(void); | ||
| 25 | extern void stop_ftrace_syscalls(void); | ||
| 26 | extern void ftrace_syscall_enter(struct pt_regs *regs); | ||
| 27 | extern void ftrace_syscall_exit(struct pt_regs *regs); | ||
| 28 | #else | ||
| 29 | static inline void start_ftrace_syscalls(void) { } | ||
| 30 | static inline void stop_ftrace_syscalls(void) { } | ||
| 31 | static inline void ftrace_syscall_enter(struct pt_regs *regs) { } | ||
| 32 | static inline void ftrace_syscall_exit(struct pt_regs *regs) { } | ||
| 33 | #endif | ||
| 34 | |||
| 35 | #endif /* _TRACE_SYSCALL_H */ | ||
diff --git a/include/trace/trace_event_types.h b/include/trace/trace_event_types.h new file mode 100644 index 000000000000..df56f5694be6 --- /dev/null +++ b/include/trace/trace_event_types.h | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | /* trace/<type>_event_types.h here */ | ||
| 2 | |||
| 3 | #include <trace/sched_event_types.h> | ||
| 4 | #include <trace/irq_event_types.h> | ||
| 5 | #include <trace/lockdep_event_types.h> | ||
diff --git a/include/trace/trace_events.h b/include/trace/trace_events.h new file mode 100644 index 000000000000..fd13750ca4ba --- /dev/null +++ b/include/trace/trace_events.h | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | /* trace/<type>.h here */ | ||
| 2 | |||
| 3 | #include <trace/sched.h> | ||
| 4 | #include <trace/irq.h> | ||
| 5 | #include <trace/lockdep.h> | ||
diff --git a/include/trace/workqueue.h b/include/trace/workqueue.h new file mode 100644 index 000000000000..7626523deeba --- /dev/null +++ b/include/trace/workqueue.h | |||
| @@ -0,0 +1,25 @@ | |||
| 1 | #ifndef __TRACE_WORKQUEUE_H | ||
| 2 | #define __TRACE_WORKQUEUE_H | ||
| 3 | |||
| 4 | #include <linux/tracepoint.h> | ||
| 5 | #include <linux/workqueue.h> | ||
| 6 | #include <linux/sched.h> | ||
| 7 | |||
| 8 | DECLARE_TRACE(workqueue_insertion, | ||
| 9 | TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), | ||
| 10 | TP_ARGS(wq_thread, work)); | ||
| 11 | |||
| 12 | DECLARE_TRACE(workqueue_execution, | ||
| 13 | TP_PROTO(struct task_struct *wq_thread, struct work_struct *work), | ||
| 14 | TP_ARGS(wq_thread, work)); | ||
| 15 | |||
| 16 | /* Trace the creation of one workqueue thread on a cpu */ | ||
| 17 | DECLARE_TRACE(workqueue_creation, | ||
| 18 | TP_PROTO(struct task_struct *wq_thread, int cpu), | ||
| 19 | TP_ARGS(wq_thread, cpu)); | ||
| 20 | |||
| 21 | DECLARE_TRACE(workqueue_destruction, | ||
| 22 | TP_PROTO(struct task_struct *wq_thread), | ||
| 23 | TP_ARGS(wq_thread)); | ||
| 24 | |||
| 25 | #endif /* __TRACE_WORKQUEUE_H */ | ||
