diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-04-05 19:41:22 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-04-05 19:41:22 -0400 |
| commit | 9efe21cb82b5dbe3b0b2ae4de4eccc64ecb94e95 (patch) | |
| tree | 7ff8833745d2f268f897f6fa4a27263b4a572245 /include/trace | |
| parent | de18836e447c2dc30120c0919b8db8ddc0401cc4 (diff) | |
| parent | 0221c81b1b8eb0cbb6b30a0ced52ead32d2b4e4c (diff) | |
Merge branch 'linus' into irq/threaded
Conflicts:
include/linux/irq.h
kernel/irq/handle.c
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 | 75 | ||||
| -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 | 11 | ||||
| -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 |
13 files changed, 643 insertions, 83 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..ad8b7857855a --- /dev/null +++ b/include/trace/kmemtrace.h | |||
| @@ -0,0 +1,75 @@ | |||
| 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/types.h> | ||
| 13 | #include <linux/marker.h> | ||
| 14 | |||
| 15 | enum kmemtrace_type_id { | ||
| 16 | KMEMTRACE_TYPE_KMALLOC = 0, /* kmalloc() or kfree(). */ | ||
| 17 | KMEMTRACE_TYPE_CACHE, /* kmem_cache_*(). */ | ||
| 18 | KMEMTRACE_TYPE_PAGES, /* __get_free_pages() and friends. */ | ||
| 19 | }; | ||
| 20 | |||
| 21 | #ifdef CONFIG_KMEMTRACE | ||
| 22 | |||
| 23 | extern void kmemtrace_init(void); | ||
| 24 | |||
| 25 | extern void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id, | ||
| 26 | unsigned long call_site, | ||
| 27 | const void *ptr, | ||
| 28 | size_t bytes_req, | ||
| 29 | size_t bytes_alloc, | ||
| 30 | gfp_t gfp_flags, | ||
| 31 | int node); | ||
| 32 | |||
| 33 | extern void kmemtrace_mark_free(enum kmemtrace_type_id type_id, | ||
| 34 | unsigned long call_site, | ||
| 35 | const void *ptr); | ||
| 36 | |||
| 37 | #else /* CONFIG_KMEMTRACE */ | ||
| 38 | |||
| 39 | static inline void kmemtrace_init(void) | ||
| 40 | { | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline void kmemtrace_mark_alloc_node(enum kmemtrace_type_id type_id, | ||
| 44 | unsigned long call_site, | ||
| 45 | const void *ptr, | ||
| 46 | size_t bytes_req, | ||
| 47 | size_t bytes_alloc, | ||
| 48 | gfp_t gfp_flags, | ||
| 49 | int node) | ||
| 50 | { | ||
| 51 | } | ||
| 52 | |||
| 53 | static inline void kmemtrace_mark_free(enum kmemtrace_type_id type_id, | ||
| 54 | unsigned long call_site, | ||
| 55 | const void *ptr) | ||
| 56 | { | ||
| 57 | } | ||
| 58 | |||
| 59 | #endif /* CONFIG_KMEMTRACE */ | ||
| 60 | |||
| 61 | static inline void kmemtrace_mark_alloc(enum kmemtrace_type_id type_id, | ||
| 62 | unsigned long call_site, | ||
| 63 | const void *ptr, | ||
| 64 | size_t bytes_req, | ||
| 65 | size_t bytes_alloc, | ||
| 66 | gfp_t gfp_flags) | ||
| 67 | { | ||
| 68 | kmemtrace_mark_alloc_node(type_id, call_site, ptr, | ||
| 69 | bytes_req, bytes_alloc, gfp_flags, -1); | ||
| 70 | } | ||
| 71 | |||
| 72 | #endif /* __KERNEL__ */ | ||
| 73 | |||
| 74 | #endif /* _LINUX_KMEMTRACE_H */ | ||
| 75 | |||
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 new file mode 100644 index 000000000000..b66206d9be72 --- /dev/null +++ b/include/trace/skb.h | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | #ifndef _TRACE_SKB_H_ | ||
| 2 | #define _TRACE_SKB_H_ | ||
| 3 | |||
| 4 | #include <linux/skbuff.h> | ||
| 5 | #include <linux/tracepoint.h> | ||
| 6 | |||
| 7 | DECLARE_TRACE(kfree_skb, | ||
| 8 | TP_PROTO(struct sk_buff *skb, void *location), | ||
| 9 | TP_ARGS(skb, location)); | ||
| 10 | |||
| 11 | #endif | ||
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 */ | ||
