aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/asm-generic/vmlinux.lds.h2
-rw-r--r--include/linux/ftrace.h3
-rw-r--r--include/linux/kmemtrace.h25
-rw-r--r--include/linux/ring_buffer.h29
-rw-r--r--include/linux/slab_def.h2
-rw-r--r--include/linux/slub_def.h2
-rw-r--r--include/trace/kmem.h9
-rw-r--r--include/trace/kmem_event_types.h193
-rw-r--r--include/trace/kmemtrace.h63
-rw-r--r--include/trace/lockdep_event_types.h23
-rw-r--r--include/trace/skb.h4
-rw-r--r--include/trace/skb_event_types.h38
-rw-r--r--include/trace/trace_event_types.h2
-rw-r--r--include/trace/trace_events.h2
14 files changed, 321 insertions, 76 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 7fa660fd449c..7e9b1e9f711c 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -61,7 +61,7 @@
61#define BRANCH_PROFILE() 61#define BRANCH_PROFILE()
62#endif 62#endif
63 63
64#ifdef CONFIG_EVENT_TRACER 64#ifdef CONFIG_EVENT_TRACING
65#define FTRACE_EVENTS() VMLINUX_SYMBOL(__start_ftrace_events) = .; \ 65#define FTRACE_EVENTS() VMLINUX_SYMBOL(__start_ftrace_events) = .; \
66 *(_ftrace_events) \ 66 *(_ftrace_events) \
67 VMLINUX_SYMBOL(__stop_ftrace_events) = .; 67 VMLINUX_SYMBOL(__stop_ftrace_events) = .;
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 8a0c2f221e6b..53869bef6102 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -368,6 +368,7 @@ struct ftrace_ret_stack {
368 unsigned long ret; 368 unsigned long ret;
369 unsigned long func; 369 unsigned long func;
370 unsigned long long calltime; 370 unsigned long long calltime;
371 unsigned long long subtime;
371}; 372};
372 373
373/* 374/*
@@ -379,8 +380,6 @@ extern void return_to_handler(void);
379 380
380extern int 381extern int
381ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth); 382ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth);
382extern void
383ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret);
384 383
385/* 384/*
386 * Sometimes we don't want to trace a function with the function 385 * Sometimes we don't want to trace a function with the function
diff --git a/include/linux/kmemtrace.h b/include/linux/kmemtrace.h
new file mode 100644
index 000000000000..15c45a27a925
--- /dev/null
+++ b/include/linux/kmemtrace.h
@@ -0,0 +1,25 @@
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 <trace/kmem.h>
13
14#ifdef CONFIG_KMEMTRACE
15extern void kmemtrace_init(void);
16#else
17static inline void kmemtrace_init(void)
18{
19}
20#endif
21
22#endif /* __KERNEL__ */
23
24#endif /* _LINUX_KMEMTRACE_H */
25
diff --git a/include/linux/ring_buffer.h b/include/linux/ring_buffer.h
index e1b7b2173885..f0aa486d131c 100644
--- a/include/linux/ring_buffer.h
+++ b/include/linux/ring_buffer.h
@@ -68,9 +68,38 @@ ring_buffer_event_time_delta(struct ring_buffer_event *event)
68 return event->time_delta; 68 return event->time_delta;
69} 69}
70 70
71/*
72 * ring_buffer_event_discard can discard any event in the ring buffer.
73 * it is up to the caller to protect against a reader from
74 * consuming it or a writer from wrapping and replacing it.
75 *
76 * No external protection is needed if this is called before
77 * the event is commited. But in that case it would be better to
78 * use ring_buffer_discard_commit.
79 *
80 * Note, if an event that has not been committed is discarded
81 * with ring_buffer_event_discard, it must still be committed.
82 */
71void ring_buffer_event_discard(struct ring_buffer_event *event); 83void ring_buffer_event_discard(struct ring_buffer_event *event);
72 84
73/* 85/*
86 * ring_buffer_discard_commit will remove an event that has not
87 * ben committed yet. If this is used, then ring_buffer_unlock_commit
88 * must not be called on the discarded event. This function
89 * will try to remove the event from the ring buffer completely
90 * if another event has not been written after it.
91 *
92 * Example use:
93 *
94 * if (some_condition)
95 * ring_buffer_discard_commit(buffer, event);
96 * else
97 * ring_buffer_unlock_commit(buffer, event);
98 */
99void ring_buffer_discard_commit(struct ring_buffer *buffer,
100 struct ring_buffer_event *event);
101
102/*
74 * size is in bytes for each per CPU buffer. 103 * size is in bytes for each per CPU buffer.
75 */ 104 */
76struct ring_buffer * 105struct ring_buffer *
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
index 5ac9b0bcaf9a..713f841ecaa9 100644
--- a/include/linux/slab_def.h
+++ b/include/linux/slab_def.h
@@ -14,7 +14,7 @@
14#include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */ 14#include <asm/page.h> /* kmalloc_sizes.h needs PAGE_SIZE */
15#include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */ 15#include <asm/cache.h> /* kmalloc_sizes.h needs L1_CACHE_BYTES */
16#include <linux/compiler.h> 16#include <linux/compiler.h>
17#include <trace/kmemtrace.h> 17#include <linux/kmemtrace.h>
18 18
19/* Size description struct for general caches. */ 19/* Size description struct for general caches. */
20struct cache_sizes { 20struct cache_sizes {
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h
index 5046f90c1171..be5d40c43bd2 100644
--- a/include/linux/slub_def.h
+++ b/include/linux/slub_def.h
@@ -10,7 +10,7 @@
10#include <linux/gfp.h> 10#include <linux/gfp.h>
11#include <linux/workqueue.h> 11#include <linux/workqueue.h>
12#include <linux/kobject.h> 12#include <linux/kobject.h>
13#include <trace/kmemtrace.h> 13#include <linux/kmemtrace.h>
14 14
15enum stat_item { 15enum stat_item {
16 ALLOC_FASTPATH, /* Allocation from cpu slab */ 16 ALLOC_FASTPATH, /* Allocation from cpu slab */
diff --git a/include/trace/kmem.h b/include/trace/kmem.h
new file mode 100644
index 000000000000..46efc2423f03
--- /dev/null
+++ b/include/trace/kmem.h
@@ -0,0 +1,9 @@
1#ifndef _TRACE_KMEM_H
2#define _TRACE_KMEM_H
3
4#include <linux/types.h>
5#include <linux/tracepoint.h>
6
7#include <trace/kmem_event_types.h>
8
9#endif /* _TRACE_KMEM_H */
diff --git a/include/trace/kmem_event_types.h b/include/trace/kmem_event_types.h
new file mode 100644
index 000000000000..4ff420fe4675
--- /dev/null
+++ b/include/trace/kmem_event_types.h
@@ -0,0 +1,193 @@
1
2/* use <trace/kmem.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 kmem
10
11TRACE_EVENT(kmalloc,
12
13 TP_PROTO(unsigned long call_site,
14 const void *ptr,
15 size_t bytes_req,
16 size_t bytes_alloc,
17 gfp_t gfp_flags),
18
19 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags),
20
21 TP_STRUCT__entry(
22 __field( unsigned long, call_site )
23 __field( const void *, ptr )
24 __field( size_t, bytes_req )
25 __field( size_t, bytes_alloc )
26 __field( gfp_t, gfp_flags )
27 ),
28
29 TP_fast_assign(
30 __entry->call_site = call_site;
31 __entry->ptr = ptr;
32 __entry->bytes_req = bytes_req;
33 __entry->bytes_alloc = bytes_alloc;
34 __entry->gfp_flags = gfp_flags;
35 ),
36
37 TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%08x",
38 __entry->call_site,
39 __entry->ptr,
40 __entry->bytes_req,
41 __entry->bytes_alloc,
42 __entry->gfp_flags)
43);
44
45TRACE_EVENT(kmem_cache_alloc,
46
47 TP_PROTO(unsigned long call_site,
48 const void *ptr,
49 size_t bytes_req,
50 size_t bytes_alloc,
51 gfp_t gfp_flags),
52
53 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags),
54
55 TP_STRUCT__entry(
56 __field( unsigned long, call_site )
57 __field( const void *, ptr )
58 __field( size_t, bytes_req )
59 __field( size_t, bytes_alloc )
60 __field( gfp_t, gfp_flags )
61 ),
62
63 TP_fast_assign(
64 __entry->call_site = call_site;
65 __entry->ptr = ptr;
66 __entry->bytes_req = bytes_req;
67 __entry->bytes_alloc = bytes_alloc;
68 __entry->gfp_flags = gfp_flags;
69 ),
70
71 TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%08x",
72 __entry->call_site,
73 __entry->ptr,
74 __entry->bytes_req,
75 __entry->bytes_alloc,
76 __entry->gfp_flags)
77);
78
79TRACE_EVENT(kmalloc_node,
80
81 TP_PROTO(unsigned long call_site,
82 const void *ptr,
83 size_t bytes_req,
84 size_t bytes_alloc,
85 gfp_t gfp_flags,
86 int node),
87
88 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node),
89
90 TP_STRUCT__entry(
91 __field( unsigned long, call_site )
92 __field( const void *, ptr )
93 __field( size_t, bytes_req )
94 __field( size_t, bytes_alloc )
95 __field( gfp_t, gfp_flags )
96 __field( int, node )
97 ),
98
99 TP_fast_assign(
100 __entry->call_site = call_site;
101 __entry->ptr = ptr;
102 __entry->bytes_req = bytes_req;
103 __entry->bytes_alloc = bytes_alloc;
104 __entry->gfp_flags = gfp_flags;
105 __entry->node = node;
106 ),
107
108 TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%08x node=%d",
109 __entry->call_site,
110 __entry->ptr,
111 __entry->bytes_req,
112 __entry->bytes_alloc,
113 __entry->gfp_flags,
114 __entry->node)
115);
116
117TRACE_EVENT(kmem_cache_alloc_node,
118
119 TP_PROTO(unsigned long call_site,
120 const void *ptr,
121 size_t bytes_req,
122 size_t bytes_alloc,
123 gfp_t gfp_flags,
124 int node),
125
126 TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node),
127
128 TP_STRUCT__entry(
129 __field( unsigned long, call_site )
130 __field( const void *, ptr )
131 __field( size_t, bytes_req )
132 __field( size_t, bytes_alloc )
133 __field( gfp_t, gfp_flags )
134 __field( int, node )
135 ),
136
137 TP_fast_assign(
138 __entry->call_site = call_site;
139 __entry->ptr = ptr;
140 __entry->bytes_req = bytes_req;
141 __entry->bytes_alloc = bytes_alloc;
142 __entry->gfp_flags = gfp_flags;
143 __entry->node = node;
144 ),
145
146 TP_printk("call_site=%lx ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%08x node=%d",
147 __entry->call_site,
148 __entry->ptr,
149 __entry->bytes_req,
150 __entry->bytes_alloc,
151 __entry->gfp_flags,
152 __entry->node)
153);
154
155TRACE_EVENT(kfree,
156
157 TP_PROTO(unsigned long call_site, const void *ptr),
158
159 TP_ARGS(call_site, ptr),
160
161 TP_STRUCT__entry(
162 __field( unsigned long, call_site )
163 __field( const void *, ptr )
164 ),
165
166 TP_fast_assign(
167 __entry->call_site = call_site;
168 __entry->ptr = ptr;
169 ),
170
171 TP_printk("call_site=%lx ptr=%p", __entry->call_site, __entry->ptr)
172);
173
174TRACE_EVENT(kmem_cache_free,
175
176 TP_PROTO(unsigned long call_site, const void *ptr),
177
178 TP_ARGS(call_site, ptr),
179
180 TP_STRUCT__entry(
181 __field( unsigned long, call_site )
182 __field( const void *, ptr )
183 ),
184
185 TP_fast_assign(
186 __entry->call_site = call_site;
187 __entry->ptr = ptr;
188 ),
189
190 TP_printk("call_site=%lx ptr=%p", __entry->call_site, __entry->ptr)
191);
192
193#undef TRACE_SYSTEM
diff --git a/include/trace/kmemtrace.h b/include/trace/kmemtrace.h
deleted file mode 100644
index 28ee69f9cd46..000000000000
--- a/include/trace/kmemtrace.h
+++ /dev/null
@@ -1,63 +0,0 @@
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
16extern void kmemtrace_init(void);
17#else
18static inline void kmemtrace_init(void)
19{
20}
21#endif
22
23DECLARE_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));
30DECLARE_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));
37DECLARE_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));
45DECLARE_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));
53DECLARE_TRACE(kfree,
54 TP_PROTO(unsigned long call_site, const void *ptr),
55 TP_ARGS(call_site, ptr));
56DECLARE_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_event_types.h b/include/trace/lockdep_event_types.h
index adccfcd2ec8f..863f1e4583a6 100644
--- a/include/trace/lockdep_event_types.h
+++ b/include/trace/lockdep_event_types.h
@@ -32,11 +32,24 @@ TRACE_FORMAT(lock_contended,
32 TP_FMT("%s", lock->name) 32 TP_FMT("%s", lock->name)
33 ); 33 );
34 34
35TRACE_FORMAT(lock_acquired, 35TRACE_EVENT(lock_acquired,
36 TP_PROTO(struct lockdep_map *lock, unsigned long ip), 36 TP_PROTO(struct lockdep_map *lock, unsigned long ip, s64 waittime),
37 TP_ARGS(lock, ip), 37
38 TP_FMT("%s", lock->name) 38 TP_ARGS(lock, ip, waittime),
39 ); 39
40 TP_STRUCT__entry(
41 __field(const char *, name)
42 __field(unsigned long, wait_usec)
43 __field(unsigned long, wait_nsec_rem)
44 ),
45 TP_fast_assign(
46 __entry->name = lock->name;
47 __entry->wait_nsec_rem = do_div(waittime, NSEC_PER_USEC);
48 __entry->wait_usec = (unsigned long) waittime;
49 ),
50 TP_printk("%s (%lu.%03lu us)", __entry->name, __entry->wait_usec,
51 __entry->wait_nsec_rem)
52);
40 53
41#endif 54#endif
42#endif 55#endif
diff --git a/include/trace/skb.h b/include/trace/skb.h
index b66206d9be72..d2de7174a6e8 100644
--- a/include/trace/skb.h
+++ b/include/trace/skb.h
@@ -4,8 +4,6 @@
4#include <linux/skbuff.h> 4#include <linux/skbuff.h>
5#include <linux/tracepoint.h> 5#include <linux/tracepoint.h>
6 6
7DECLARE_TRACE(kfree_skb, 7#include <trace/skb_event_types.h>
8 TP_PROTO(struct sk_buff *skb, void *location),
9 TP_ARGS(skb, location));
10 8
11#endif 9#endif
diff --git a/include/trace/skb_event_types.h b/include/trace/skb_event_types.h
new file mode 100644
index 000000000000..4a1c504c0e16
--- /dev/null
+++ b/include/trace/skb_event_types.h
@@ -0,0 +1,38 @@
1
2/* use <trace/skb.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 skb
10
11/*
12 * Tracepoint for free an sk_buff:
13 */
14TRACE_EVENT(kfree_skb,
15
16 TP_PROTO(struct sk_buff *skb, void *location),
17
18 TP_ARGS(skb, location),
19
20 TP_STRUCT__entry(
21 __field( void *, skbaddr )
22 __field( unsigned short, protocol )
23 __field( void *, location )
24 ),
25
26 TP_fast_assign(
27 __entry->skbaddr = skb;
28 if (skb) {
29 __entry->protocol = ntohs(skb->protocol);
30 }
31 __entry->location = location;
32 ),
33
34 TP_printk("skbaddr=%p protocol=%u location=%p",
35 __entry->skbaddr, __entry->protocol, __entry->location)
36);
37
38#undef TRACE_SYSTEM
diff --git a/include/trace/trace_event_types.h b/include/trace/trace_event_types.h
index df56f5694be6..552a50e169a6 100644
--- a/include/trace/trace_event_types.h
+++ b/include/trace/trace_event_types.h
@@ -3,3 +3,5 @@
3#include <trace/sched_event_types.h> 3#include <trace/sched_event_types.h>
4#include <trace/irq_event_types.h> 4#include <trace/irq_event_types.h>
5#include <trace/lockdep_event_types.h> 5#include <trace/lockdep_event_types.h>
6#include <trace/skb_event_types.h>
7#include <trace/kmem_event_types.h>
diff --git a/include/trace/trace_events.h b/include/trace/trace_events.h
index fd13750ca4ba..13d6b85668cf 100644
--- a/include/trace/trace_events.h
+++ b/include/trace/trace_events.h
@@ -3,3 +3,5 @@
3#include <trace/sched.h> 3#include <trace/sched.h>
4#include <trace/irq.h> 4#include <trace/irq.h>
5#include <trace/lockdep.h> 5#include <trace/lockdep.h>
6#include <trace/skb.h>
7#include <trace/kmem.h>