Blame view
include/linux/ftrace.h
17.4 KB
9849ed4d7 tracing/documenta... |
1 2 3 4 |
/* * Ftrace header. For implementation details beyond the random comments * scattered below, see: Documentation/trace/ftrace-design.txt */ |
16444a8a4 ftrace: add basic... |
5 6 |
#ifndef _LINUX_FTRACE_H #define _LINUX_FTRACE_H |
0012693ad tracing/function-... |
7 |
#include <linux/trace_clock.h> |
5601020fe tracing/fastboot:... |
8 |
#include <linux/kallsyms.h> |
0012693ad tracing/function-... |
9 |
#include <linux/linkage.h> |
ea4e2bc4d ftrace: graph of ... |
10 |
#include <linux/bitops.h> |
0012693ad tracing/function-... |
11 |
#include <linux/ktime.h> |
21a8c466f tracing/ftrace: p... |
12 |
#include <linux/sched.h> |
0012693ad tracing/function-... |
13 14 15 |
#include <linux/types.h> #include <linux/init.h> #include <linux/fs.h> |
16444a8a4 ftrace: add basic... |
16 |
|
c79a61f55 tracing: make CAL... |
17 |
#include <asm/ftrace.h> |
de4772542 include: replace ... |
18 |
struct module; |
04da85b86 ftrace: Fix warni... |
19 |
struct ftrace_hash; |
606576ce8 ftrace: rename FT... |
20 |
#ifdef CONFIG_FUNCTION_TRACER |
3e1932ad5 tracing/fastboot:... |
21 |
|
b0fc494fa ftrace: add ftrac... |
22 23 24 |
extern int ftrace_enabled; extern int ftrace_enable_sysctl(struct ctl_table *table, int write, |
8d65af789 sysctl: remove "s... |
25 |
void __user *buffer, size_t *lenp, |
b0fc494fa ftrace: add ftrac... |
26 |
loff_t *ppos); |
16444a8a4 ftrace: add basic... |
27 |
typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip); |
b848914ce ftrace: Implement... |
28 29 30 |
enum { FTRACE_OPS_FL_ENABLED = 1 << 0, FTRACE_OPS_FL_GLOBAL = 1 << 1, |
cdbe61bfe ftrace: Allow dyn... |
31 |
FTRACE_OPS_FL_DYNAMIC = 1 << 2, |
b848914ce ftrace: Implement... |
32 |
}; |
16444a8a4 ftrace: add basic... |
33 |
struct ftrace_ops { |
f45948e89 ftrace: Create a ... |
34 35 |
ftrace_func_t func; struct ftrace_ops *next; |
b848914ce ftrace: Implement... |
36 |
unsigned long flags; |
f45948e89 ftrace: Create a ... |
37 38 39 40 |
#ifdef CONFIG_DYNAMIC_FTRACE struct ftrace_hash *notrace_hash; struct ftrace_hash *filter_hash; #endif |
16444a8a4 ftrace: add basic... |
41 |
}; |
60a7ecf42 ftrace: add quick... |
42 |
extern int function_trace_stop; |
e7d3737ea tracing/function-... |
43 44 45 46 47 48 49 50 51 52 |
/* * Type of the current tracing. */ enum ftrace_tracing_type_t { FTRACE_TYPE_ENTER = 0, /* Hook the call of the function */ FTRACE_TYPE_RETURN, /* Hook the return of the function */ }; /* Current tracing type, default is FTRACE_TYPE_ENTER */ extern enum ftrace_tracing_type_t ftrace_tracing_type; |
60a7ecf42 ftrace: add quick... |
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
/** * ftrace_stop - stop function tracer. * * A quick way to stop the function tracer. Note this an on off switch, * it is not something that is recursive like preempt_disable. * This does not disable the calling of mcount, it only stops the * calling of functions from mcount. */ static inline void ftrace_stop(void) { function_trace_stop = 1; } /** * ftrace_start - start the function tracer. * * This function is the inverse of ftrace_stop. This does not enable * the function tracing if the function tracer is disabled. This only * sets the function tracer flag to continue calling the functions * from mcount. */ static inline void ftrace_start(void) { function_trace_stop = 0; } |
16444a8a4 ftrace: add basic... |
78 79 80 81 82 83 84 85 86 87 88 89 |
/* * The ftrace_ops must be a static and should also * be read_mostly. These functions do modify read_mostly variables * so use them sparely. Never free an ftrace_op or modify the * next pointer after it has been registered. Even after unregistering * it, the next pointer may still be used internally. */ int register_ftrace_function(struct ftrace_ops *ops); int unregister_ftrace_function(struct ftrace_ops *ops); void clear_ftrace_function(void); extern void ftrace_stub(unsigned long a0, unsigned long a1); |
16444a8a4 ftrace: add basic... |
90 |
|
606576ce8 ftrace: rename FT... |
91 |
#else /* !CONFIG_FUNCTION_TRACER */ |
4dbf6bc23 tracing: Convert ... |
92 93 94 95 96 97 98 |
/* * (un)register_ftrace_function must be a macro since the ops parameter * must not be evaluated. */ #define register_ftrace_function(ops) ({ 0; }) #define unregister_ftrace_function(ops) ({ 0; }) static inline void clear_ftrace_function(void) { } |
81adbdc02 ftrace: only have... |
99 |
static inline void ftrace_kill(void) { } |
60a7ecf42 ftrace: add quick... |
100 101 |
static inline void ftrace_stop(void) { } static inline void ftrace_start(void) { } |
606576ce8 ftrace: rename FT... |
102 |
#endif /* CONFIG_FUNCTION_TRACER */ |
352ad25aa ftrace: tracer fo... |
103 |
|
f38f1d2aa trace: add a way ... |
104 105 106 107 |
#ifdef CONFIG_STACK_TRACER extern int stack_tracer_enabled; int stack_trace_sysctl(struct ctl_table *table, int write, |
8d65af789 sysctl: remove "s... |
108 |
void __user *buffer, size_t *lenp, |
f38f1d2aa trace: add a way ... |
109 110 |
loff_t *ppos); #endif |
f6180773d ftrace: add comma... |
111 112 113 |
struct ftrace_func_command { struct list_head list; char *name; |
43dd61c9a ftrace: Fix regre... |
114 115 |
int (*func)(struct ftrace_hash *hash, char *func, char *cmd, |
f6180773d ftrace: add comma... |
116 117 |
char *params, int enable); }; |
3d0833953 ftrace: dynamic e... |
118 |
#ifdef CONFIG_DYNAMIC_FTRACE |
31e889098 ftrace: pass modu... |
119 |
|
000ab6911 ftrace: allow arc... |
120 121 |
int ftrace_arch_code_modify_prepare(void); int ftrace_arch_code_modify_post_process(void); |
c88fd8634 ftrace: Allow arc... |
122 |
void ftrace_bug(int err, unsigned long ip); |
809dcf29c ftrace: add prett... |
123 |
struct seq_file; |
b6887d791 ftrace: rename _h... |
124 |
struct ftrace_probe_ops { |
59df055f1 ftrace: trace dif... |
125 126 127 128 129 |
void (*func)(unsigned long ip, unsigned long parent_ip, void **data); int (*callback)(unsigned long ip, void **data); void (*free)(void **data); |
809dcf29c ftrace: add prett... |
130 131 |
int (*print)(struct seq_file *m, unsigned long ip, |
b6887d791 ftrace: rename _h... |
132 |
struct ftrace_probe_ops *ops, |
809dcf29c ftrace: add prett... |
133 |
void *data); |
59df055f1 ftrace: trace dif... |
134 135 136 |
}; extern int |
b6887d791 ftrace: rename _h... |
137 |
register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, |
59df055f1 ftrace: trace dif... |
138 139 |
void *data); extern void |
b6887d791 ftrace: rename _h... |
140 |
unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops, |
59df055f1 ftrace: trace dif... |
141 142 |
void *data); extern void |
b6887d791 ftrace: rename _h... |
143 144 |
unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops); extern void unregister_ftrace_function_probe_all(char *glob); |
59df055f1 ftrace: trace dif... |
145 |
|
2cfa19780 ftrace/alternativ... |
146 |
extern int ftrace_text_reserved(void *start, void *end); |
3c1720f00 ftrace: move memo... |
147 |
enum { |
ed926f9b3 ftrace: Use count... |
148 |
FTRACE_FL_ENABLED = (1 << 30), |
3c1720f00 ftrace: move memo... |
149 |
}; |
ed926f9b3 ftrace: Use count... |
150 151 |
#define FTRACE_FL_MASK (0x3UL << 30) #define FTRACE_REF_MAX ((1 << 30) - 1) |
3d0833953 ftrace: dynamic e... |
152 |
struct dyn_ftrace { |
ee000b7f9 tracing: use unio... |
153 154 155 156 |
union { unsigned long ip; /* address of mcount call-site */ struct dyn_ftrace *freelist; }; |
85ae32ae0 ftrace: Replace r... |
157 |
unsigned long flags; |
ee000b7f9 tracing: use unio... |
158 |
struct dyn_arch_ftrace arch; |
3d0833953 ftrace: dynamic e... |
159 |
}; |
e1c08bdd9 ftrace: force rec... |
160 |
int ftrace_force_update(void); |
936e074b2 ftrace: Modify ft... |
161 162 163 164 165 166 |
void ftrace_set_filter(struct ftrace_ops *ops, unsigned char *buf, int len, int reset); void ftrace_set_notrace(struct ftrace_ops *ops, unsigned char *buf, int len, int reset); void ftrace_set_global_filter(unsigned char *buf, int len, int reset); void ftrace_set_global_notrace(unsigned char *buf, int len, int reset); |
e1c08bdd9 ftrace: force rec... |
167 |
|
f6180773d ftrace: add comma... |
168 169 |
int register_ftrace_command(struct ftrace_func_command *cmd); int unregister_ftrace_command(struct ftrace_func_command *cmd); |
c88fd8634 ftrace: Allow arc... |
170 171 172 173 174 175 176 177 178 179 180 181 182 |
enum { FTRACE_UPDATE_CALLS = (1 << 0), FTRACE_DISABLE_CALLS = (1 << 1), FTRACE_UPDATE_TRACE_FUNC = (1 << 2), FTRACE_START_FUNC_RET = (1 << 3), FTRACE_STOP_FUNC_RET = (1 << 4), }; enum { FTRACE_UPDATE_IGNORE, FTRACE_UPDATE_MAKE_CALL, FTRACE_UPDATE_MAKE_NOP, }; |
fc13cb0ce ftrace: Allow oth... |
183 184 185 186 |
enum { FTRACE_ITER_FILTER = (1 << 0), FTRACE_ITER_NOTRACE = (1 << 1), FTRACE_ITER_PRINTALL = (1 << 2), |
69a3083c4 ftrace: Decouple ... |
187 188 189 |
FTRACE_ITER_DO_HASH = (1 << 3), FTRACE_ITER_HASH = (1 << 4), FTRACE_ITER_ENABLED = (1 << 5), |
fc13cb0ce ftrace: Allow oth... |
190 |
}; |
c88fd8634 ftrace: Allow arc... |
191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
void arch_ftrace_update_code(int command); struct ftrace_rec_iter; struct ftrace_rec_iter *ftrace_rec_iter_start(void); struct ftrace_rec_iter *ftrace_rec_iter_next(struct ftrace_rec_iter *iter); struct dyn_ftrace *ftrace_rec_iter_record(struct ftrace_rec_iter *iter); int ftrace_update_record(struct dyn_ftrace *rec, int enable); int ftrace_test_record(struct dyn_ftrace *rec, int enable); void ftrace_run_stop_machine(int command); int ftrace_location(unsigned long ip); extern ftrace_func_t ftrace_trace_function; |
fc13cb0ce ftrace: Allow oth... |
205 206 207 208 209 210 211 212 |
int ftrace_regex_open(struct ftrace_ops *ops, int flag, struct inode *inode, struct file *file); ssize_t ftrace_filter_write(struct file *file, const char __user *ubuf, size_t cnt, loff_t *ppos); ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf, size_t cnt, loff_t *ppos); loff_t ftrace_regex_lseek(struct file *file, loff_t offset, int origin); int ftrace_regex_release(struct inode *inode, struct file *file); |
2a85a37f1 ftrace: Allow acc... |
213 214 |
void __init ftrace_set_early_filter(struct ftrace_ops *ops, char *buf, int enable); |
3d0833953 ftrace: dynamic e... |
215 |
/* defined in arch */ |
3c1720f00 ftrace: move memo... |
216 |
extern int ftrace_ip_converted(unsigned long ip); |
d61f82d06 ftrace: use dynam... |
217 |
extern int ftrace_dyn_arch_init(void *data); |
d61f82d06 ftrace: use dynam... |
218 219 220 221 |
extern int ftrace_update_ftrace_func(ftrace_func_t func); extern void ftrace_caller(void); extern void ftrace_call(void); extern void mcount_call(void); |
f00012074 ftrace, ia64: Add... |
222 223 224 225 |
#ifndef FTRACE_ADDR #define FTRACE_ADDR ((unsigned long)ftrace_caller) #endif |
fb52607af tracing/function-... |
226 227 |
#ifdef CONFIG_FUNCTION_GRAPH_TRACER extern void ftrace_graph_caller(void); |
5a45cfe1c ftrace: use code ... |
228 229 230 231 232 |
extern int ftrace_enable_ftrace_graph_caller(void); extern int ftrace_disable_ftrace_graph_caller(void); #else static inline int ftrace_enable_ftrace_graph_caller(void) { return 0; } static inline int ftrace_disable_ftrace_graph_caller(void) { return 0; } |
e7d3737ea tracing/function-... |
233 |
#endif |
ad90c0e3c ftrace: user upda... |
234 |
|
31e889098 ftrace: pass modu... |
235 |
/** |
57794a9d4 trace: trivial fi... |
236 |
* ftrace_make_nop - convert code into nop |
31e889098 ftrace: pass modu... |
237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
* @mod: module structure if called by module load initialization * @rec: the mcount call site record * @addr: the address that the call site should be calling * * This is a very sensitive operation and great care needs * to be taken by the arch. The operation should carefully * read the location, check to see if what is read is indeed * what we expect it to be, and then on success of the compare, * it should write to the location. * * The code segment at @rec->ip should be a caller to @addr * * Return must be: * 0 on success * -EFAULT on error reading the location * -EINVAL on a failed compare of the contents * -EPERM on error writing to the location * Any other value will be considered a failure. */ extern int ftrace_make_nop(struct module *mod, struct dyn_ftrace *rec, unsigned long addr); |
a26a2a273 ftrace: nmi safe ... |
258 |
|
593eb8a2d ftrace: return er... |
259 |
/** |
31e889098 ftrace: pass modu... |
260 261 262 |
* ftrace_make_call - convert a nop call site into a call to addr * @rec: the mcount call site record * @addr: the address that the call site should call |
593eb8a2d ftrace: return er... |
263 264 265 266 267 268 269 |
* * This is a very sensitive operation and great care needs * to be taken by the arch. The operation should carefully * read the location, check to see if what is read is indeed * what we expect it to be, and then on success of the compare, * it should write to the location. * |
31e889098 ftrace: pass modu... |
270 271 |
* The code segment at @rec->ip should be a nop * |
593eb8a2d ftrace: return er... |
272 273 274 275 276 277 278 |
* Return must be: * 0 on success * -EFAULT on error reading the location * -EINVAL on a failed compare of the contents * -EPERM on error writing to the location * Any other value will be considered a failure. */ |
31e889098 ftrace: pass modu... |
279 |
extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr); |
31e889098 ftrace: pass modu... |
280 281 |
/* May be defined in arch */ extern int ftrace_arch_read_dyn_info(char *buf, int size); |
593eb8a2d ftrace: return er... |
282 |
|
ecea656d1 ftrace: freeze kp... |
283 |
extern int skip_trace(unsigned long ip); |
c0719e5a4 ftrace: use ftrac... |
284 285 |
extern void ftrace_disable_daemon(void); extern void ftrace_enable_daemon(void); |
e1c08bdd9 ftrace: force rec... |
286 |
#else |
4dbf6bc23 tracing: Convert ... |
287 288 289 290 291 292 293 |
static inline int skip_trace(unsigned long ip) { return 0; } static inline int ftrace_force_update(void) { return 0; } static inline void ftrace_set_filter(unsigned char *buf, int len, int reset) { } static inline void ftrace_disable_daemon(void) { } static inline void ftrace_enable_daemon(void) { } |
e7247a15f tracing: correct ... |
294 |
static inline void ftrace_release_mod(struct module *mod) {} |
f6180773d ftrace: add comma... |
295 296 |
static inline int register_ftrace_command(struct ftrace_func_command *cmd) { |
97d0bb8dc ftrace: fix !CONF... |
297 |
return -EINVAL; |
f6180773d ftrace: add comma... |
298 299 300 |
} static inline int unregister_ftrace_command(char *cmd_name) { |
97d0bb8dc ftrace: fix !CONF... |
301 |
return -EINVAL; |
f6180773d ftrace: add comma... |
302 |
} |
2cfa19780 ftrace/alternativ... |
303 304 305 306 |
static inline int ftrace_text_reserved(void *start, void *end) { return 0; } |
fc13cb0ce ftrace: Allow oth... |
307 308 309 310 311 312 313 |
/* * Again users of functions that have ftrace_ops may not * have them defined when ftrace is not enabled, but these * functions may still be called. Use a macro instead of inline. */ #define ftrace_regex_open(ops, flag, inod, file) ({ -ENODEV; }) |
96de37b62 tracing: Fix comp... |
314 |
#define ftrace_set_early_filter(ops, buf, enable) do { } while (0) |
fc13cb0ce ftrace: Allow oth... |
315 316 317 318 319 320 321 322 323 324 325 |
static inline ssize_t ftrace_filter_write(struct file *file, const char __user *ubuf, size_t cnt, loff_t *ppos) { return -ENODEV; } static inline ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf, size_t cnt, loff_t *ppos) { return -ENODEV; } static inline loff_t ftrace_regex_lseek(struct file *file, loff_t offset, int origin) { return -ENODEV; } static inline int ftrace_regex_release(struct inode *inode, struct file *file) { return -ENODEV; } |
ecea656d1 ftrace: freeze kp... |
326 |
#endif /* CONFIG_DYNAMIC_FTRACE */ |
352ad25aa ftrace: tracer fo... |
327 |
|
aeaee8a2c ftrace: build fix |
328 329 |
/* totally disable ftrace - can not re-enable after this */ void ftrace_kill(void); |
f43fdad86 ftrace: fix kexec |
330 331 |
static inline void tracer_disable(void) { |
606576ce8 ftrace: rename FT... |
332 |
#ifdef CONFIG_FUNCTION_TRACER |
f43fdad86 ftrace: fix kexec |
333 334 335 |
ftrace_enabled = 0; #endif } |
370027358 ftrace: fix incor... |
336 337 |
/* * Ftrace disable/restore without lock. Some synchronization mechanism |
9bdeb7b5d kexec jump: __ftr... |
338 |
* must be used to prevent ftrace_enabled to be changed between |
370027358 ftrace: fix incor... |
339 340 |
* disable/restore. */ |
9bdeb7b5d kexec jump: __ftr... |
341 342 |
static inline int __ftrace_enabled_save(void) { |
606576ce8 ftrace: rename FT... |
343 |
#ifdef CONFIG_FUNCTION_TRACER |
9bdeb7b5d kexec jump: __ftr... |
344 345 346 347 348 349 350 351 352 353 |
int saved_ftrace_enabled = ftrace_enabled; ftrace_enabled = 0; return saved_ftrace_enabled; #else return 0; #endif } static inline void __ftrace_enabled_restore(int enabled) { |
606576ce8 ftrace: rename FT... |
354 |
#ifdef CONFIG_FUNCTION_TRACER |
9bdeb7b5d kexec jump: __ftr... |
355 356 357 |
ftrace_enabled = enabled; #endif } |
c79a61f55 tracing: make CAL... |
358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 |
#ifndef HAVE_ARCH_CALLER_ADDR # ifdef CONFIG_FRAME_POINTER # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) # define CALLER_ADDR1 ((unsigned long)__builtin_return_address(1)) # define CALLER_ADDR2 ((unsigned long)__builtin_return_address(2)) # define CALLER_ADDR3 ((unsigned long)__builtin_return_address(3)) # define CALLER_ADDR4 ((unsigned long)__builtin_return_address(4)) # define CALLER_ADDR5 ((unsigned long)__builtin_return_address(5)) # define CALLER_ADDR6 ((unsigned long)__builtin_return_address(6)) # else # define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) # define CALLER_ADDR1 0UL # define CALLER_ADDR2 0UL # define CALLER_ADDR3 0UL # define CALLER_ADDR4 0UL # define CALLER_ADDR5 0UL # define CALLER_ADDR6 0UL # endif #endif /* ifndef HAVE_ARCH_CALLER_ADDR */ |
352ad25aa ftrace: tracer fo... |
377 |
|
81d68a96a ftrace: trace irq... |
378 |
#ifdef CONFIG_IRQSOFF_TRACER |
489f13961 ftrace: fix build... |
379 380 |
extern void time_hardirqs_on(unsigned long a0, unsigned long a1); extern void time_hardirqs_off(unsigned long a0, unsigned long a1); |
81d68a96a ftrace: trace irq... |
381 |
#else |
4dbf6bc23 tracing: Convert ... |
382 383 |
static inline void time_hardirqs_on(unsigned long a0, unsigned long a1) { } static inline void time_hardirqs_off(unsigned long a0, unsigned long a1) { } |
81d68a96a ftrace: trace irq... |
384 |
#endif |
6cd8a4bb2 ftrace: trace pre... |
385 |
#ifdef CONFIG_PREEMPT_TRACER |
489f13961 ftrace: fix build... |
386 387 |
extern void trace_preempt_on(unsigned long a0, unsigned long a1); extern void trace_preempt_off(unsigned long a0, unsigned long a1); |
6cd8a4bb2 ftrace: trace pre... |
388 |
#else |
4dbf6bc23 tracing: Convert ... |
389 390 |
static inline void trace_preempt_on(unsigned long a0, unsigned long a1) { } static inline void trace_preempt_off(unsigned long a0, unsigned long a1) { } |
6cd8a4bb2 ftrace: trace pre... |
391 |
#endif |
68bf21aa1 ftrace: mcount ca... |
392 393 394 395 396 |
#ifdef CONFIG_FTRACE_MCOUNT_RECORD extern void ftrace_init(void); #else static inline void ftrace_init(void) { } #endif |
71566a0d1 tracing/fastboot:... |
397 |
/* |
287b6e68c tracing/function-... |
398 399 400 401 402 403 |
* Structure that defines an entry function trace. */ struct ftrace_graph_ent { unsigned long func; /* Current function */ int depth; }; |
dd0e545f0 ftrace: printk fo... |
404 |
|
71566a0d1 tracing/fastboot:... |
405 |
/* |
caf4b323b tracing, x86: add... |
406 407 |
* Structure that defines a return function trace. */ |
fb52607af tracing/function-... |
408 |
struct ftrace_graph_ret { |
caf4b323b tracing, x86: add... |
409 410 411 |
unsigned long func; /* Current function */ unsigned long long calltime; unsigned long long rettime; |
0231022cc tracing/function-... |
412 413 |
/* Number of functions that overran the depth limit for current task */ unsigned long overrun; |
287b6e68c tracing/function-... |
414 |
int depth; |
caf4b323b tracing, x86: add... |
415 |
}; |
62b915f10 tracing: Add grap... |
416 417 418 |
/* Type of the callback handlers for tracing function graph*/ typedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *); /* return */ typedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *); /* entry */ |
fb52607af tracing/function-... |
419 |
#ifdef CONFIG_FUNCTION_GRAPH_TRACER |
8b96f0119 tracing/function-... |
420 |
|
5ac9f6226 function-graph: a... |
421 |
/* for init task */ |
f876d346e tracing: append a... |
422 |
#define INIT_FTRACE_GRAPH .ret_stack = NULL, |
5ac9f6226 function-graph: a... |
423 |
|
8b96f0119 tracing/function-... |
424 |
/* |
712406a6b tracing/function-... |
425 426 427 428 429 430 431 432 |
* Stack of return addresses for functions * of a thread. * Used in struct thread_info */ struct ftrace_ret_stack { unsigned long ret; unsigned long func; unsigned long long calltime; |
a2a16d6a3 function-graph: a... |
433 |
unsigned long long subtime; |
71e308a23 function-graph: a... |
434 |
unsigned long fp; |
712406a6b tracing/function-... |
435 436 437 438 439 440 441 442 443 444 |
}; /* * Primary handler of a function return. * It relays on ftrace_return_to_handler. * Defined in entry_32/64.S */ extern void return_to_handler(void); extern int |
71e308a23 function-graph: a... |
445 446 |
ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth, unsigned long frame_pointer); |
712406a6b tracing/function-... |
447 448 |
/* |
8b96f0119 tracing/function-... |
449 450 451 452 453 |
* Sometimes we don't want to trace a function with the function * graph tracer but we want them to keep traced by the usual function * tracer if the function graph tracer is not configured. */ #define __notrace_funcgraph notrace |
bcbc4f20b tracing/function-... |
454 455 456 457 458 459 460 461 462 |
/* * We want to which function is an entrypoint of a hardirq. * That will help us to put a signal on output. */ #define __irq_entry __attribute__((__section__(".irqentry.text"))) /* Limits of hardirq entrypoints */ extern char __irqentry_text_start[]; extern char __irqentry_text_end[]; |
f201ae235 tracing/function-... |
463 464 |
#define FTRACE_RETFUNC_DEPTH 50 #define FTRACE_RETSTACK_ALLOC_SIZE 32 |
287b6e68c tracing/function-... |
465 466 |
extern int register_ftrace_graph(trace_func_graph_ret_t retfunc, trace_func_graph_ent_t entryfunc); |
14a866c56 ftrace: add ftrac... |
467 |
extern void ftrace_graph_stop(void); |
287b6e68c tracing/function-... |
468 469 470 |
/* The current handlers in use */ extern trace_func_graph_ret_t ftrace_graph_return; extern trace_func_graph_ent_t ftrace_graph_entry; |
caf4b323b tracing, x86: add... |
471 |
|
fb52607af tracing/function-... |
472 |
extern void unregister_ftrace_graph(void); |
f201ae235 tracing/function-... |
473 |
|
fb52607af tracing/function-... |
474 475 |
extern void ftrace_graph_init_task(struct task_struct *t); extern void ftrace_graph_exit_task(struct task_struct *t); |
868baf07b ftrace: Fix memor... |
476 |
extern void ftrace_graph_init_idle_task(struct task_struct *t, int cpu); |
21a8c466f tracing/ftrace: p... |
477 478 479 480 481 |
static inline int task_curr_ret_stack(struct task_struct *t) { return t->curr_ret_stack; } |
380c4b141 tracing/function-... |
482 483 484 485 486 487 488 489 490 491 |
static inline void pause_graph_tracing(void) { atomic_inc(¤t->tracing_graph_pause); } static inline void unpause_graph_tracing(void) { atomic_dec(¤t->tracing_graph_pause); } |
5ac9f6226 function-graph: a... |
492 |
#else /* !CONFIG_FUNCTION_GRAPH_TRACER */ |
8b96f0119 tracing/function-... |
493 494 |
#define __notrace_funcgraph |
bcbc4f20b tracing/function-... |
495 |
#define __irq_entry |
5ac9f6226 function-graph: a... |
496 |
#define INIT_FTRACE_GRAPH |
8b96f0119 tracing/function-... |
497 |
|
fb52607af tracing/function-... |
498 499 |
static inline void ftrace_graph_init_task(struct task_struct *t) { } static inline void ftrace_graph_exit_task(struct task_struct *t) { } |
868baf07b ftrace: Fix memor... |
500 |
static inline void ftrace_graph_init_idle_task(struct task_struct *t, int cpu) { } |
21a8c466f tracing/ftrace: p... |
501 |
|
62b915f10 tracing: Add grap... |
502 503 504 505 506 507 |
static inline int register_ftrace_graph(trace_func_graph_ret_t retfunc, trace_func_graph_ent_t entryfunc) { return -1; } static inline void unregister_ftrace_graph(void) { } |
21a8c466f tracing/ftrace: p... |
508 509 510 511 |
static inline int task_curr_ret_stack(struct task_struct *tsk) { return -1; } |
380c4b141 tracing/function-... |
512 513 514 |
static inline void pause_graph_tracing(void) { } static inline void unpause_graph_tracing(void) { } |
5ac9f6226 function-graph: a... |
515 |
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ |
caf4b323b tracing, x86: add... |
516 |
|
ea4e2bc4d ftrace: graph of ... |
517 |
#ifdef CONFIG_TRACING |
ea4e2bc4d ftrace: graph of ... |
518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 |
/* flags for current->trace */ enum { TSK_TRACE_FL_TRACE_BIT = 0, TSK_TRACE_FL_GRAPH_BIT = 1, }; enum { TSK_TRACE_FL_TRACE = 1 << TSK_TRACE_FL_TRACE_BIT, TSK_TRACE_FL_GRAPH = 1 << TSK_TRACE_FL_GRAPH_BIT, }; static inline void set_tsk_trace_trace(struct task_struct *tsk) { set_bit(TSK_TRACE_FL_TRACE_BIT, &tsk->trace); } static inline void clear_tsk_trace_trace(struct task_struct *tsk) { clear_bit(TSK_TRACE_FL_TRACE_BIT, &tsk->trace); } static inline int test_tsk_trace_trace(struct task_struct *tsk) { return tsk->trace & TSK_TRACE_FL_TRACE; } static inline void set_tsk_trace_graph(struct task_struct *tsk) { set_bit(TSK_TRACE_FL_GRAPH_BIT, &tsk->trace); } static inline void clear_tsk_trace_graph(struct task_struct *tsk) { clear_bit(TSK_TRACE_FL_GRAPH_BIT, &tsk->trace); } static inline int test_tsk_trace_graph(struct task_struct *tsk) { return tsk->trace & TSK_TRACE_FL_GRAPH; } |
cecbca96d tracing: Dump eit... |
558 559 560 |
enum ftrace_dump_mode; extern enum ftrace_dump_mode ftrace_dump_on_oops; |
526211bc5 tracing: move uti... |
561 |
|
261842b7c tracing: add same... |
562 563 564 |
#ifdef CONFIG_PREEMPT #define INIT_TRACE_RECURSION .trace_recursion = 0, #endif |
ea4e2bc4d ftrace: graph of ... |
565 |
#endif /* CONFIG_TRACING */ |
261842b7c tracing: add same... |
566 567 568 |
#ifndef INIT_TRACE_RECURSION #define INIT_TRACE_RECURSION #endif |
b1818748b x86, ftrace, hw-b... |
569 |
|
e7b8e675d tracing: Unify ar... |
570 571 572 573 574 |
#ifdef CONFIG_FTRACE_SYSCALLS unsigned long arch_syscall_addr(int nr); #endif /* CONFIG_FTRACE_SYSCALLS */ |
16444a8a4 ftrace: add basic... |
575 |
#endif /* _LINUX_FTRACE_H */ |