Blame view
include/linux/ftrace_event.h
7.51 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 17 18 19 20 |
struct trace_print_flags { unsigned long mask; const char *name; }; 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... |
21 22 |
const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val, const struct trace_print_flags *symbol_array); |
5a2e39959 [SCSI] ftrace: ad... |
23 24 |
const char *ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int len); |
97f202515 tracing/events: m... |
25 26 27 28 29 30 31 |
/* * 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... |
32 |
unsigned short type; |
97f202515 tracing/events: m... |
33 34 35 |
unsigned char flags; unsigned char preempt_count; int pid; |
637e7e864 tracing: add lock... |
36 |
int lock_depth; |
97f202515 tracing/events: m... |
37 |
}; |
89ec0dee9 tracing: increase... |
38 39 |
#define FTRACE_MAX_EVENT \ ((1 << (sizeof(((struct trace_entry *)0)->type) * 8)) - 1) |
97f202515 tracing/events: m... |
40 41 42 43 44 45 46 47 48 49 50 |
/* * 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... |
51 |
unsigned long iter_flags; |
97f202515 tracing/events: m... |
52 |
|
bc289ae98 tracing: Reduce l... |
53 54 |
/* trace_seq for __print_flags() and __print_symbolic() etc. */ struct trace_seq tmp_seq; |
97f202515 tracing/events: m... |
55 56 57 |
/* The below is zeroed out in pipe_read */ struct trace_seq seq; struct trace_entry *ent; |
bc21b4784 tracing: Show the... |
58 |
unsigned long lost_events; |
a63ce5b30 tracing: Buffer t... |
59 |
int leftover; |
97f202515 tracing/events: m... |
60 61 |
int cpu; u64 ts; |
97f202515 tracing/events: m... |
62 63 64 65 66 |
loff_t pos; long idx; cpumask_var_t started; }; |
a9a577638 tracing: Allow ev... |
67 |
struct trace_event; |
97f202515 tracing/events: m... |
68 |
typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter, |
a9a577638 tracing: Allow ev... |
69 70 71 |
int flags, struct trace_event *event); struct trace_event_functions { |
97f202515 tracing/events: m... |
72 73 74 75 76 |
trace_print_func trace; trace_print_func raw; trace_print_func hex; trace_print_func binary; }; |
a9a577638 tracing: Allow ev... |
77 78 79 80 81 82 |
struct trace_event { struct hlist_node node; struct list_head list; int type; struct trace_event_functions *funcs; }; |
97f202515 tracing/events: m... |
83 84 85 86 87 88 89 90 91 92 |
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... |
93 94 95 |
void tracing_generic_entry_update(struct trace_entry *entry, unsigned long flags, int pc); |
97f202515 tracing/events: m... |
96 |
struct ring_buffer_event * |
e77405ad8 tracing: pass aro... |
97 98 |
trace_current_buffer_lock_reserve(struct ring_buffer **current_buffer, int type, unsigned long len, |
97f202515 tracing/events: m... |
99 |
unsigned long flags, int pc); |
e77405ad8 tracing: pass aro... |
100 101 |
void trace_current_buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event, |
97f202515 tracing/events: m... |
102 |
unsigned long flags, int pc); |
e77405ad8 tracing: pass aro... |
103 104 |
void trace_nowake_buffer_unlock_commit(struct ring_buffer *buffer, struct ring_buffer_event *event, |
97f202515 tracing/events: m... |
105 |
unsigned long flags, int pc); |
e77405ad8 tracing: pass aro... |
106 107 |
void trace_current_buffer_discard_commit(struct ring_buffer *buffer, struct ring_buffer_event *event); |
97f202515 tracing/events: m... |
108 109 |
void tracing_record_cmdline(struct task_struct *tsk); |
1f9963cbb tracing/filters: ... |
110 |
struct event_filter; |
2239291ae tracing: Remove p... |
111 112 113 114 115 116 117 118 |
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... |
119 120 |
struct ftrace_event_class { char *system; |
2239291ae tracing: Remove p... |
121 122 123 124 125 126 |
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... |
127 128 129 |
int (*define_fields)(struct ftrace_event_call *); struct list_head *(*get_fields)(struct ftrace_event_call *); struct list_head fields; |
0405ab80a tracing: Move raw... |
130 |
int (*raw_init)(struct ftrace_event_call *); |
8f0820183 tracing: Create c... |
131 |
}; |
a1d0ce821 tracing: Use clas... |
132 133 |
extern int ftrace_event_reg(struct ftrace_event_call *event, enum trace_reg type); |
553552ce1 tracing: Combine ... |
134 135 136 |
enum { TRACE_EVENT_FL_ENABLED_BIT, TRACE_EVENT_FL_FILTERED_BIT, |
e870e9a12 tracing: Allow to... |
137 |
TRACE_EVENT_FL_RECORDED_CMD_BIT, |
553552ce1 tracing: Combine ... |
138 139 140 |
}; enum { |
e870e9a12 tracing: Allow to... |
141 142 143 |
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), |
553552ce1 tracing: Combine ... |
144 |
}; |
97f202515 tracing/events: m... |
145 |
struct ftrace_event_call { |
a59fd6027 tracing/events: c... |
146 |
struct list_head list; |
8f0820183 tracing: Create c... |
147 |
struct ftrace_event_class *class; |
97f202515 tracing/events: m... |
148 |
char *name; |
97f202515 tracing/events: m... |
149 |
struct dentry *dir; |
80decc70a tracing: Move pri... |
150 |
struct trace_event event; |
509e760cd tracing: Add prin... |
151 |
const char *print_fmt; |
1f9963cbb tracing/filters: ... |
152 |
struct event_filter *filter; |
6d723736e tracing/events: a... |
153 |
void *mod; |
69fd4f0eb tracing: Add ftra... |
154 |
void *data; |
97f202515 tracing/events: m... |
155 |
|
553552ce1 tracing: Combine ... |
156 157 158 159 |
/* * 32 bit flags: * bit 1: enabled * bit 2: filter_active |
e870e9a12 tracing: Allow to... |
160 |
* bit 3: enabled cmd record |
553552ce1 tracing: Combine ... |
161 |
* |
1eaa4787a tracing: Comment ... |
162 163 164 165 166 167 168 169 |
* 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 ... |
170 171 |
*/ unsigned int flags; |
ff5f149b6 Merge branch 'per... |
172 |
#ifdef CONFIG_PERF_EVENTS |
6016ee13d perf, tracing: ad... |
173 174 |
int perf_refcount; struct hlist_head __percpu *perf_events; |
ff5f149b6 Merge branch 'per... |
175 |
#endif |
97f202515 tracing/events: m... |
176 |
}; |
97d5a2200 perf: Drop the ob... |
177 |
#define PERF_MAX_TRACE_SIZE 2048 |
20ab4425a tracing: Allocate... |
178 |
|
8b3725621 tracing/filters: ... |
179 |
#define MAX_FILTER_PRED 32 |
16bb8eb1b tracing: allow fi... |
180 |
#define MAX_FILTER_STR_VAL 256 /* Should handle KSYM_SYMBOL_LEN */ |
97f202515 tracing/events: m... |
181 |
|
2df75e415 tracing/events: f... |
182 |
extern void destroy_preds(struct ftrace_event_call *call); |
6fb2915df tracing/profile: ... |
183 |
extern int filter_match_preds(struct event_filter *filter, void *rec); |
e77405ad8 tracing: pass aro... |
184 185 |
extern int filter_current_check_discard(struct ring_buffer *buffer, struct ftrace_event_call *call, |
97f202515 tracing/events: m... |
186 187 |
void *rec, struct ring_buffer_event *event); |
43b51ead3 tracing/filters: ... |
188 189 190 191 |
enum { FILTER_OTHER = 0, FILTER_STATIC_STRING, FILTER_DYN_STRING, |
87a342f5d tracing/filters: ... |
192 |
FILTER_PTR_STRING, |
43b51ead3 tracing/filters: ... |
193 |
}; |
87d9b4e1c tracing: Extract ... |
194 |
extern int trace_event_raw_init(struct ftrace_event_call *call); |
aeaeae118 tracing: Restore ... |
195 196 197 |
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... |
198 199 |
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... |
200 |
|
a118e4d14 tracing/filters: ... |
201 |
#define is_signed_type(type) (((type)(-1)) < 0) |
97f202515 tracing/events: m... |
202 |
|
4671c7940 tracing: add trac... |
203 |
int trace_set_clr_event(const char *system, const char *event, int set); |
97f202515 tracing/events: m... |
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
/* * 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... |
222 |
#ifdef CONFIG_PERF_EVENTS |
6fb2915df tracing/profile: ... |
223 |
struct perf_event; |
c530665c3 perf: Take a hot ... |
224 225 |
DECLARE_PER_CPU(struct pt_regs, perf_trace_regs); |
1c024eca5 perf, trace: Opti... |
226 227 |
extern int perf_trace_init(struct perf_event *event); extern void perf_trace_destroy(struct perf_event *event); |
a4eaf7f14 perf: Rework the ... |
228 229 |
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... |
230 |
extern int ftrace_profile_set_filter(struct perf_event *event, int event_id, |
6fb2915df tracing/profile: ... |
231 232 |
char *filter_str); extern void ftrace_profile_free_filter(struct perf_event *event); |
b7e2ecef9 perf, trace: Opti... |
233 234 |
extern void *perf_trace_buf_prepare(int size, unsigned short type, struct pt_regs *regs, int *rctxp); |
430ad5a60 perf: Factorize t... |
235 236 |
static inline void |
97d5a2200 perf: Drop the ob... |
237 |
perf_trace_buf_submit(void *raw_data, int size, int rctx, u64 addr, |
1c024eca5 perf, trace: Opti... |
238 |
u64 count, struct pt_regs *regs, void *head) |
430ad5a60 perf: Factorize t... |
239 |
{ |
ecc55f84b perf, trace: Inli... |
240 |
perf_tp_event(addr, count, raw_data, size, regs, head, rctx); |
430ad5a60 perf: Factorize t... |
241 |
} |
6fb2915df tracing/profile: ... |
242 |
#endif |
97f202515 tracing/events: m... |
243 |
#endif /* _LINUX_FTRACE_EVENT_H */ |