Blame view
include/linux/ftrace_event.h
8.47 KB
97f202515 tracing/events: m... |
1 2 |
#ifndef _LINUX_FTRACE_EVENT_H #define _LINUX_FTRACE_EVENT_H |
97f202515 tracing/events: m... |
3 |
#include <linux/ring_buffer.h> |
16bb8eb1b tracing: allow fi... |
4 |
#include <linux/trace_seq.h> |
be74b73a5 tracing: add __pr... |
5 |
#include <linux/percpu.h> |
20ab4425a tracing: Allocate... |
6 |
#include <linux/hardirq.h> |
430ad5a60 perf: Factorize t... |
7 |
#include <linux/perf_event.h> |
97f202515 tracing/events: m... |
8 9 10 |
struct trace_array; struct tracer; |
6d723736e tracing/events: a... |
11 |
struct dentry; |
97f202515 tracing/events: m... |
12 |
|
be74b73a5 tracing: add __pr... |
13 14 15 16 |
struct trace_print_flags { unsigned long mask; const char *name; }; |
2fc1b6f0d tracing: Add __pr... |
17 18 19 20 |
struct trace_print_flags_u64 { unsigned long long mask; const char *name; }; |
be74b73a5 tracing: add __pr... |
21 22 23 |
const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim, unsigned long flags, const struct trace_print_flags *flag_array); |
0f4fc29dd tracing: add __pr... |
24 25 |
const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val, const struct trace_print_flags *symbol_array); |
2fc1b6f0d tracing: Add __pr... |
26 27 28 29 30 31 |
#if BITS_PER_LONG == 32 const char *ftrace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val, const struct trace_print_flags_u64 *symbol_array); #endif |
5a2e39959 [SCSI] ftrace: ad... |
32 33 |
const char *ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int len); |
97f202515 tracing/events: m... |
34 35 36 37 38 39 40 |
/* * The trace entry - the most basic unit of tracing. This is what * is printed in the end as a single line in the trace output, such as: * * bash-15816 [01] 235.197585: idle_cpu <- irq_enter */ struct trace_entry { |
89ec0dee9 tracing: increase... |
41 |
unsigned short type; |
97f202515 tracing/events: m... |
42 43 44 |
unsigned char flags; unsigned char preempt_count; int pid; |
a3a4a5acd Regression: parti... |
45 |
int padding; |
97f202515 tracing/events: m... |
46 |
}; |
89ec0dee9 tracing: increase... |
47 48 |
#define FTRACE_MAX_EVENT \ ((1 << (sizeof(((struct trace_entry *)0)->type) * 8)) - 1) |
97f202515 tracing/events: m... |
49 50 51 52 53 54 55 56 57 58 59 |
/* * Trace iterator - used by printout routines who present trace * results to users and which routines might sleep, etc: */ struct trace_iterator { struct trace_array *tr; struct tracer *trace; void *private; int cpu_file; struct mutex mutex; struct ring_buffer_iter *buffer_iter[NR_CPUS]; |
112f38a7e tracing: make tra... |
60 |
unsigned long iter_flags; |
97f202515 tracing/events: m... |
61 |
|
bc289ae98 tracing: Reduce l... |
62 63 |
/* trace_seq for __print_flags() and __print_symbolic() etc. */ struct trace_seq tmp_seq; |
97f202515 tracing/events: m... |
64 65 66 |
/* The below is zeroed out in pipe_read */ struct trace_seq seq; struct trace_entry *ent; |
bc21b4784 tracing: Show the... |
67 |
unsigned long lost_events; |
a63ce5b30 tracing: Buffer t... |
68 |
int leftover; |
4a9bd3f13 tracing: Have dyn... |
69 |
int ent_size; |
97f202515 tracing/events: m... |
70 71 |
int cpu; u64 ts; |
97f202515 tracing/events: m... |
72 73 74 75 76 |
loff_t pos; long idx; cpumask_var_t started; }; |
a9a577638 tracing: Allow ev... |
77 |
struct trace_event; |
97f202515 tracing/events: m... |
78 |
typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter, |
a9a577638 tracing: Allow ev... |
79 80 81 |
int flags, struct trace_event *event); struct trace_event_functions { |
97f202515 tracing/events: m... |
82 83 84 85 86 |
trace_print_func trace; trace_print_func raw; trace_print_func hex; trace_print_func binary; }; |
a9a577638 tracing: Allow ev... |
87 88 89 90 91 92 |
struct trace_event { struct hlist_node node; struct list_head list; int type; struct trace_event_functions *funcs; }; |
97f202515 tracing/events: m... |
93 94 95 96 97 98 99 100 101 102 |
extern int register_ftrace_event(struct trace_event *event); extern int unregister_ftrace_event(struct trace_event *event); /* Return values for print_line callback */ enum print_line_t { TRACE_TYPE_PARTIAL_LINE = 0, /* Retry after flushing the seq */ TRACE_TYPE_HANDLED = 1, TRACE_TYPE_UNHANDLED = 2, /* Relay to other output functions */ TRACE_TYPE_NO_CONSUME = 3 /* Handled but ask to not consume */ }; |
f413cdb80 perf_counter: Fix... |
103 104 105 |
void tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags, int pc); |
97f202515 tracing/events: m... |
106 |
struct ring_buffer_event * |
e77405ad8 tracing: pass aro... |
107 108 |
trace_current_buffer_lock_reserve(struct ring_buffer **current_buffer, int type, unsigned long len, |
97f202515 tracing/events: m... |
109 |
unsigned long flags, int pc); |
e77405ad8 tracing: pass aro... |
110 111 |
void trace_current_buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event, |
97f202515 tracing/events: m... |
112 |
unsigned long flags, int pc); |
e77405ad8 tracing: pass aro... |
113 114 |
void trace_nowake_buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event, |
97f202515 tracing/events: m... |
115 |
unsigned long flags, int pc); |
1fd8df2c3 tracing/kprobes: ... |
116 117 118 119 |
void trace_nowake_buffer_unlock_commit_regs(struct ring_buffer *buffer, struct ring_buffer_event *event, unsigned long flags, int pc, struct pt_regs *regs); |
e77405ad8 tracing: pass aro... |
120 121 |
void trace_current_buffer_discard_commit(struct ring_buffer *buffer, struct ring_buffer_event *event); |
97f202515 tracing/events: m... |
122 123 |
void tracing_record_cmdline(struct task_struct *tsk); |
1f9963cbb tracing/filters: ... |
124 |
struct event_filter; |
2239291ae tracing: Remove p... |
125 126 127 128 129 130 131 132 |
enum trace_reg { TRACE_REG_REGISTER, TRACE_REG_UNREGISTER, TRACE_REG_PERF_REGISTER, TRACE_REG_PERF_UNREGISTER, }; struct ftrace_event_call; |
8f0820183 tracing: Create c... |
133 134 |
struct ftrace_event_class { char *system; |
2239291ae tracing: Remove p... |
135 136 137 138 139 140 |
void *probe; #ifdef CONFIG_PERF_EVENTS void *perf_probe; #endif int (*reg)(struct ftrace_event_call *event, enum trace_reg type); |
2e33af029 tracing: Move fie... |
141 142 143 |
int (*define_fields)(struct ftrace_event_call *); struct list_head *(*get_fields)(struct ftrace_event_call *); struct list_head fields; |
0405ab80a tracing: Move raw... |
144 |
int (*raw_init)(struct ftrace_event_call *); |
8f0820183 tracing: Create c... |
145 |
}; |
a1d0ce821 tracing: Use clas... |
146 147 |
extern int ftrace_event_reg(struct ftrace_event_call *event, enum trace_reg type); |
553552ce1 tracing: Combine ... |
148 149 150 |
enum { TRACE_EVENT_FL_ENABLED_BIT, TRACE_EVENT_FL_FILTERED_BIT, |
e870e9a12 tracing: Allow to... |
151 |
TRACE_EVENT_FL_RECORDED_CMD_BIT, |
61c32659b tracing: New flag... |
152 |
TRACE_EVENT_FL_CAP_ANY_BIT, |
27b14b56a tracing: Restore ... |
153 |
TRACE_EVENT_FL_NO_SET_FILTER_BIT, |
553552ce1 tracing: Combine ... |
154 155 156 |
}; enum { |
e870e9a12 tracing: Allow to... |
157 158 159 |
TRACE_EVENT_FL_ENABLED = (1 << TRACE_EVENT_FL_ENABLED_BIT), TRACE_EVENT_FL_FILTERED = (1 << TRACE_EVENT_FL_FILTERED_BIT), TRACE_EVENT_FL_RECORDED_CMD = (1 << TRACE_EVENT_FL_RECORDED_CMD_BIT), |
61c32659b tracing: New flag... |
160 |
TRACE_EVENT_FL_CAP_ANY = (1 << TRACE_EVENT_FL_CAP_ANY_BIT), |
27b14b56a tracing: Restore ... |
161 |
TRACE_EVENT_FL_NO_SET_FILTER = (1 << TRACE_EVENT_FL_NO_SET_FILTER_BIT), |
553552ce1 tracing: Combine ... |
162 |
}; |
97f202515 tracing/events: m... |
163 |
struct ftrace_event_call { |
a59fd6027 tracing/events: c... |
164 |
struct list_head list; |
8f0820183 tracing: Create c... |
165 |
struct ftrace_event_class *class; |
97f202515 tracing/events: m... |
166 |
char *name; |
97f202515 tracing/events: m... |
167 |
struct dentry *dir; |
80decc70a tracing: Move pri... |
168 |
struct trace_event event; |
509e760cd tracing: Add prin... |
169 |
const char *print_fmt; |
1f9963cbb tracing/filters: ... |
170 |
struct event_filter *filter; |
6d723736e tracing/events: a... |
171 |
void *mod; |
69fd4f0eb tracing: Add ftra... |
172 |
void *data; |
97f202515 tracing/events: m... |
173 |
|
553552ce1 tracing: Combine ... |
174 175 176 177 |
/* * 32 bit flags: * bit 1: enabled * bit 2: filter_active |
e870e9a12 tracing: Allow to... |
178 |
* bit 3: enabled cmd record |
553552ce1 tracing: Combine ... |
179 |
* |
1eaa4787a tracing: Comment ... |
180 181 182 183 184 185 186 187 |
* Changes to flags must hold the event_mutex. * * Note: Reads of flags do not hold the event_mutex since * they occur in critical sections. But the way flags * is currently used, these changes do no affect the code * except that when a change is made, it may have a slight * delay in propagating the changes to other CPUs due to * caching and such. |
553552ce1 tracing: Combine ... |
188 189 |
*/ unsigned int flags; |
ff5f149b6 Merge branch 'per... |
190 |
#ifdef CONFIG_PERF_EVENTS |
6016ee13d perf, tracing: ad... |
191 192 |
int perf_refcount; struct hlist_head __percpu *perf_events; |
ff5f149b6 Merge branch 'per... |
193 |
#endif |
97f202515 tracing/events: m... |
194 |
}; |
53cf810b1 tracing: Allow sy... |
195 196 197 198 199 200 201 |
#define __TRACE_EVENT_FLAGS(name, value) \ static int __init trace_init_flags_##name(void) \ { \ event_##name.flags = value; \ return 0; \ } \ early_initcall(trace_init_flags_##name); |
97d5a2200 perf: Drop the ob... |
202 |
#define PERF_MAX_TRACE_SIZE 2048 |
20ab4425a tracing: Allocate... |
203 |
|
16bb8eb1b tracing: allow fi... |
204 |
#define MAX_FILTER_STR_VAL 256 /* Should handle KSYM_SYMBOL_LEN */ |
97f202515 tracing/events: m... |
205 |
|
2df75e415 tracing/events: f... |
206 |
extern void destroy_preds(struct ftrace_event_call *call); |
6fb2915df tracing/profile: ... |
207 |
extern int filter_match_preds(struct event_filter *filter, void *rec); |
e77405ad8 tracing: pass aro... |
208 209 |
extern int filter_current_check_discard(struct ring_buffer *buffer, struct ftrace_event_call *call, |
97f202515 tracing/events: m... |
210 211 |
void *rec, struct ring_buffer_event *event); |
43b51ead3 tracing/filters: ... |
212 213 214 215 |
enum { FILTER_OTHER = 0, FILTER_STATIC_STRING, FILTER_DYN_STRING, |
87a342f5d tracing/filters: ... |
216 |
FILTER_PTR_STRING, |
43b51ead3 tracing/filters: ... |
217 |
}; |
042957801 tracing/events: S... |
218 219 220 |
#define EVENT_STORAGE_SIZE 128 extern struct mutex event_storage_mutex; extern char event_storage[EVENT_STORAGE_SIZE]; |
87d9b4e1c tracing: Extract ... |
221 |
extern int trace_event_raw_init(struct ftrace_event_call *call); |
aeaeae118 tracing: Restore ... |
222 223 224 |
extern int trace_define_field(struct ftrace_event_call *call, const char *type, const char *name, int offset, int size, int is_signed, int filter_type); |
bd1a5c849 tracing: Ftrace d... |
225 226 |
extern int trace_add_event_call(struct ftrace_event_call *call); extern void trace_remove_event_call(struct ftrace_event_call *call); |
97f202515 tracing/events: m... |
227 |
|
a118e4d14 tracing/filters: ... |
228 |
#define is_signed_type(type) (((type)(-1)) < 0) |
97f202515 tracing/events: m... |
229 |
|
4671c7940 tracing: add trac... |
230 |
int trace_set_clr_event(const char *system, const char *event, int set); |
97f202515 tracing/events: m... |
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
/* * The double __builtin_constant_p is because gcc will give us an error * if we try to allocate the static variable to fmt if it is not a * constant. Even with the outer if statement optimizing out. */ #define event_trace_printk(ip, fmt, args...) \ do { \ __trace_printk_check_format(fmt, ##args); \ tracing_record_cmdline(current); \ if (__builtin_constant_p(fmt)) { \ static const char *trace_printk_fmt \ __attribute__((section("__trace_printk_fmt"))) = \ __builtin_constant_p(fmt) ? fmt : NULL; \ \ __trace_bprintk(ip, trace_printk_fmt, ##args); \ } else \ __trace_printk(ip, fmt, ##args); \ } while (0) |
07b139c8c perf events: Remo... |
249 |
#ifdef CONFIG_PERF_EVENTS |
6fb2915df tracing/profile: ... |
250 |
struct perf_event; |
c530665c3 perf: Take a hot ... |
251 252 |
DECLARE_PER_CPU(struct pt_regs, perf_trace_regs); |
1c024eca5 perf, trace: Opti... |
253 254 |
extern int perf_trace_init(struct perf_event *event); extern void perf_trace_destroy(struct perf_event *event); |
a4eaf7f14 perf: Rework the ... |
255 256 |
extern int perf_trace_add(struct perf_event *event, int flags); extern void perf_trace_del(struct perf_event *event, int flags); |
1c024eca5 perf, trace: Opti... |
257 |
extern int ftrace_profile_set_filter(struct perf_event *event, int event_id, |
6fb2915df tracing/profile: ... |
258 259 |
char *filter_str); extern void ftrace_profile_free_filter(struct perf_event *event); |
b7e2ecef9 perf, trace: Opti... |
260 261 |
extern void *perf_trace_buf_prepare(int size, unsigned short type, struct pt_regs *regs, int *rctxp); |
430ad5a60 perf: Factorize t... |
262 263 |
static inline void |
97d5a2200 perf: Drop the ob... |
264 |
perf_trace_buf_submit(void *raw_data, int size, int rctx, u64 addr, |
1c024eca5 perf, trace: Opti... |
265 |
u64 count, struct pt_regs *regs, void *head) |
430ad5a60 perf: Factorize t... |
266 |
{ |
ecc55f84b perf, trace: Inli... |
267 |
perf_tp_event(addr, count, raw_data, size, regs, head, rctx); |
430ad5a60 perf: Factorize t... |
268 |
} |
6fb2915df tracing/profile: ... |
269 |
#endif |
97f202515 tracing/events: m... |
270 |
#endif /* _LINUX_FTRACE_EVENT_H */ |