Blame view

include/linux/ftrace.h 14.6 KB
9849ed4d7   Mike Frysinger   tracing/documenta...
1
2
3
4
  /*
   * Ftrace header.  For implementation details beyond the random comments
   * scattered below, see: Documentation/trace/ftrace-design.txt
   */
16444a8a4   Arnaldo Carvalho de Melo   ftrace: add basic...
5
6
  #ifndef _LINUX_FTRACE_H
  #define _LINUX_FTRACE_H
0012693ad   Frederic Weisbecker   tracing/function-...
7
  #include <linux/trace_clock.h>
5601020fe   Frederic Weisbecker   tracing/fastboot:...
8
  #include <linux/kallsyms.h>
0012693ad   Frederic Weisbecker   tracing/function-...
9
  #include <linux/linkage.h>
ea4e2bc4d   Steven Rostedt   ftrace: graph of ...
10
  #include <linux/bitops.h>
0012693ad   Frederic Weisbecker   tracing/function-...
11
12
  #include <linux/module.h>
  #include <linux/ktime.h>
21a8c466f   Frederic Weisbecker   tracing/ftrace: p...
13
  #include <linux/sched.h>
0012693ad   Frederic Weisbecker   tracing/function-...
14
15
16
  #include <linux/types.h>
  #include <linux/init.h>
  #include <linux/fs.h>
16444a8a4   Arnaldo Carvalho de Melo   ftrace: add basic...
17

c79a61f55   Uwe Kleine-Koenig   tracing: make CAL...
18
  #include <asm/ftrace.h>
606576ce8   Steven Rostedt   ftrace: rename FT...
19
  #ifdef CONFIG_FUNCTION_TRACER
3e1932ad5   Ingo Molnar   tracing/fastboot:...
20

b0fc494fa   Steven Rostedt   ftrace: add ftrac...
21
22
23
  extern int ftrace_enabled;
  extern int
  ftrace_enable_sysctl(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
24
  		     void __user *buffer, size_t *lenp,
b0fc494fa   Steven Rostedt   ftrace: add ftrac...
25
  		     loff_t *ppos);
16444a8a4   Arnaldo Carvalho de Melo   ftrace: add basic...
26
27
28
29
30
31
  typedef void (*ftrace_func_t)(unsigned long ip, unsigned long parent_ip);
  
  struct ftrace_ops {
  	ftrace_func_t	  func;
  	struct ftrace_ops *next;
  };
60a7ecf42   Steven Rostedt   ftrace: add quick...
32
  extern int function_trace_stop;
e7d3737ea   Frederic Weisbecker   tracing/function-...
33
34
35
36
37
38
39
40
41
42
  /*
   * 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   Steven Rostedt   ftrace: add quick...
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
  /**
   * 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   Arnaldo Carvalho de Melo   ftrace: add basic...
68
69
70
71
72
73
74
75
76
77
78
79
  /*
   * 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   Arnaldo Carvalho de Melo   ftrace: add basic...
80

606576ce8   Steven Rostedt   ftrace: rename FT...
81
  #else /* !CONFIG_FUNCTION_TRACER */
4dbf6bc23   Steven Rostedt   tracing: Convert ...
82
83
84
85
86
87
88
  /*
   * (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   Steven Rostedt   ftrace: only have...
89
  static inline void ftrace_kill(void) { }
60a7ecf42   Steven Rostedt   ftrace: add quick...
90
91
  static inline void ftrace_stop(void) { }
  static inline void ftrace_start(void) { }
606576ce8   Steven Rostedt   ftrace: rename FT...
92
  #endif /* CONFIG_FUNCTION_TRACER */
352ad25aa   Steven Rostedt   ftrace: tracer fo...
93

f38f1d2aa   Steven Rostedt   trace: add a way ...
94
95
96
97
  #ifdef CONFIG_STACK_TRACER
  extern int stack_tracer_enabled;
  int
  stack_trace_sysctl(struct ctl_table *table, int write,
8d65af789   Alexey Dobriyan   sysctl: remove "s...
98
  		   void __user *buffer, size_t *lenp,
f38f1d2aa   Steven Rostedt   trace: add a way ...
99
100
  		   loff_t *ppos);
  #endif
f6180773d   Steven Rostedt   ftrace: add comma...
101
102
103
104
105
106
  struct ftrace_func_command {
  	struct list_head	list;
  	char			*name;
  	int			(*func)(char *func, char *cmd,
  					char *params, int enable);
  };
3d0833953   Steven Rostedt   ftrace: dynamic e...
107
  #ifdef CONFIG_DYNAMIC_FTRACE
31e889098   Steven Rostedt   ftrace: pass modu...
108

000ab6911   Steven Rostedt   ftrace: allow arc...
109
110
  int ftrace_arch_code_modify_prepare(void);
  int ftrace_arch_code_modify_post_process(void);
809dcf29c   Steven Rostedt   ftrace: add prett...
111
  struct seq_file;
b6887d791   Steven Rostedt   ftrace: rename _h...
112
  struct ftrace_probe_ops {
59df055f1   Steven Rostedt   ftrace: trace dif...
113
114
115
116
117
  	void			(*func)(unsigned long ip,
  					unsigned long parent_ip,
  					void **data);
  	int			(*callback)(unsigned long ip, void **data);
  	void			(*free)(void **data);
809dcf29c   Steven Rostedt   ftrace: add prett...
118
119
  	int			(*print)(struct seq_file *m,
  					 unsigned long ip,
b6887d791   Steven Rostedt   ftrace: rename _h...
120
  					 struct ftrace_probe_ops *ops,
809dcf29c   Steven Rostedt   ftrace: add prett...
121
  					 void *data);
59df055f1   Steven Rostedt   ftrace: trace dif...
122
123
124
  };
  
  extern int
b6887d791   Steven Rostedt   ftrace: rename _h...
125
  register_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops,
59df055f1   Steven Rostedt   ftrace: trace dif...
126
127
  			      void *data);
  extern void
b6887d791   Steven Rostedt   ftrace: rename _h...
128
  unregister_ftrace_function_probe(char *glob, struct ftrace_probe_ops *ops,
59df055f1   Steven Rostedt   ftrace: trace dif...
129
130
  				void *data);
  extern void
b6887d791   Steven Rostedt   ftrace: rename _h...
131
132
  unregister_ftrace_function_probe_func(char *glob, struct ftrace_probe_ops *ops);
  extern void unregister_ftrace_function_probe_all(char *glob);
59df055f1   Steven Rostedt   ftrace: trace dif...
133

2cfa19780   Masami Hiramatsu   ftrace/alternativ...
134
  extern int ftrace_text_reserved(void *start, void *end);
3c1720f00   Steven Rostedt   ftrace: move memo...
135
  enum {
37ad50841   Steven Rostedt   ftrace - fix dyna...
136
137
138
139
  	FTRACE_FL_FREE		= (1 << 0),
  	FTRACE_FL_FAILED	= (1 << 1),
  	FTRACE_FL_FILTER	= (1 << 2),
  	FTRACE_FL_ENABLED	= (1 << 3),
41c52c0db   Steven Rostedt   ftrace: set_ftrac...
140
  	FTRACE_FL_NOTRACE	= (1 << 4),
0eb967012   Abhishek Sagar   ftrace: prevent f...
141
  	FTRACE_FL_CONVERTED	= (1 << 5),
3c1720f00   Steven Rostedt   ftrace: move memo...
142
  };
3d0833953   Steven Rostedt   ftrace: dynamic e...
143
  struct dyn_ftrace {
ee000b7f9   Lai Jiangshan   tracing: use unio...
144
145
146
147
148
149
150
151
152
  	union {
  		unsigned long		ip; /* address of mcount call-site */
  		struct dyn_ftrace	*freelist;
  	};
  	union {
  		unsigned long		flags;
  		struct dyn_ftrace	*newlist;
  	};
  	struct dyn_arch_ftrace		arch;
3d0833953   Steven Rostedt   ftrace: dynamic e...
153
  };
e1c08bdd9   Steven Rostedt   ftrace: force rec...
154
  int ftrace_force_update(void);
77a2b37d2   Steven Rostedt   ftrace: startup t...
155
  void ftrace_set_filter(unsigned char *buf, int len, int reset);
e1c08bdd9   Steven Rostedt   ftrace: force rec...
156

f6180773d   Steven Rostedt   ftrace: add comma...
157
158
  int register_ftrace_command(struct ftrace_func_command *cmd);
  int unregister_ftrace_command(struct ftrace_func_command *cmd);
3d0833953   Steven Rostedt   ftrace: dynamic e...
159
  /* defined in arch */
3c1720f00   Steven Rostedt   ftrace: move memo...
160
  extern int ftrace_ip_converted(unsigned long ip);
d61f82d06   Steven Rostedt   ftrace: use dynam...
161
  extern int ftrace_dyn_arch_init(void *data);
d61f82d06   Steven Rostedt   ftrace: use dynam...
162
163
164
165
  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   Shaohua Li   ftrace, ia64: Add...
166
167
168
169
  
  #ifndef FTRACE_ADDR
  #define FTRACE_ADDR ((unsigned long)ftrace_caller)
  #endif
fb52607af   Frederic Weisbecker   tracing/function-...
170
171
  #ifdef CONFIG_FUNCTION_GRAPH_TRACER
  extern void ftrace_graph_caller(void);
5a45cfe1c   Steven Rostedt   ftrace: use code ...
172
173
174
175
176
  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   Frederic Weisbecker   tracing/function-...
177
  #endif
ad90c0e3c   Steven Rostedt   ftrace: user upda...
178

31e889098   Steven Rostedt   ftrace: pass modu...
179
  /**
57794a9d4   Wenji Huang   trace: trivial fi...
180
   * ftrace_make_nop - convert code into nop
31e889098   Steven Rostedt   ftrace: pass modu...
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
   * @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   Steven Rostedt   ftrace: nmi safe ...
202

593eb8a2d   Steven Rostedt   ftrace: return er...
203
  /**
31e889098   Steven Rostedt   ftrace: pass modu...
204
205
206
   * 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   Steven Rostedt   ftrace: return er...
207
208
209
210
211
212
213
   *
   * 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   Steven Rostedt   ftrace: pass modu...
214
215
   * The code segment at @rec->ip should be a nop
   *
593eb8a2d   Steven Rostedt   ftrace: return er...
216
217
218
219
220
221
222
   * 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   Steven Rostedt   ftrace: pass modu...
223
  extern int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr);
31e889098   Steven Rostedt   ftrace: pass modu...
224
225
  /* May be defined in arch */
  extern int ftrace_arch_read_dyn_info(char *buf, int size);
593eb8a2d   Steven Rostedt   ftrace: return er...
226

ecea656d1   Abhishek Sagar   ftrace: freeze kp...
227
  extern int skip_trace(unsigned long ip);
c0719e5a4   Steven Rostedt   ftrace: use ftrac...
228
229
  extern void ftrace_disable_daemon(void);
  extern void ftrace_enable_daemon(void);
e1c08bdd9   Steven Rostedt   ftrace: force rec...
230
  #else
4dbf6bc23   Steven Rostedt   tracing: Convert ...
231
232
233
234
235
236
237
  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   jolsa@redhat.com   tracing: correct ...
238
  static inline void ftrace_release_mod(struct module *mod) {}
f6180773d   Steven Rostedt   ftrace: add comma...
239
240
  static inline int register_ftrace_command(struct ftrace_func_command *cmd)
  {
97d0bb8dc   Ingo Molnar   ftrace: fix !CONF...
241
  	return -EINVAL;
f6180773d   Steven Rostedt   ftrace: add comma...
242
243
244
  }
  static inline int unregister_ftrace_command(char *cmd_name)
  {
97d0bb8dc   Ingo Molnar   ftrace: fix !CONF...
245
  	return -EINVAL;
f6180773d   Steven Rostedt   ftrace: add comma...
246
  }
2cfa19780   Masami Hiramatsu   ftrace/alternativ...
247
248
249
250
  static inline int ftrace_text_reserved(void *start, void *end)
  {
  	return 0;
  }
ecea656d1   Abhishek Sagar   ftrace: freeze kp...
251
  #endif /* CONFIG_DYNAMIC_FTRACE */
352ad25aa   Steven Rostedt   ftrace: tracer fo...
252

aeaee8a2c   Ingo Molnar   ftrace: build fix
253
254
  /* totally disable ftrace - can not re-enable after this */
  void ftrace_kill(void);
f43fdad86   Ingo Molnar   ftrace: fix kexec
255
256
  static inline void tracer_disable(void)
  {
606576ce8   Steven Rostedt   ftrace: rename FT...
257
  #ifdef CONFIG_FUNCTION_TRACER
f43fdad86   Ingo Molnar   ftrace: fix kexec
258
259
260
  	ftrace_enabled = 0;
  #endif
  }
370027358   Huang Ying   ftrace: fix incor...
261
262
  /*
   * Ftrace disable/restore without lock. Some synchronization mechanism
9bdeb7b5d   Huang Ying   kexec jump: __ftr...
263
   * must be used to prevent ftrace_enabled to be changed between
370027358   Huang Ying   ftrace: fix incor...
264
265
   * disable/restore.
   */
9bdeb7b5d   Huang Ying   kexec jump: __ftr...
266
267
  static inline int __ftrace_enabled_save(void)
  {
606576ce8   Steven Rostedt   ftrace: rename FT...
268
  #ifdef CONFIG_FUNCTION_TRACER
9bdeb7b5d   Huang Ying   kexec jump: __ftr...
269
270
271
272
273
274
275
276
277
278
  	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   Steven Rostedt   ftrace: rename FT...
279
  #ifdef CONFIG_FUNCTION_TRACER
9bdeb7b5d   Huang Ying   kexec jump: __ftr...
280
281
282
  	ftrace_enabled = enabled;
  #endif
  }
c79a61f55   Uwe Kleine-Koenig   tracing: make CAL...
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
  #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   Steven Rostedt   ftrace: tracer fo...
302

81d68a96a   Steven Rostedt   ftrace: trace irq...
303
  #ifdef CONFIG_IRQSOFF_TRACER
489f13961   Ingo Molnar   ftrace: fix build...
304
305
    extern void time_hardirqs_on(unsigned long a0, unsigned long a1);
    extern void time_hardirqs_off(unsigned long a0, unsigned long a1);
81d68a96a   Steven Rostedt   ftrace: trace irq...
306
  #else
4dbf6bc23   Steven Rostedt   tracing: Convert ...
307
308
    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   Steven Rostedt   ftrace: trace irq...
309
  #endif
6cd8a4bb2   Steven Rostedt   ftrace: trace pre...
310
  #ifdef CONFIG_PREEMPT_TRACER
489f13961   Ingo Molnar   ftrace: fix build...
311
312
    extern void trace_preempt_on(unsigned long a0, unsigned long a1);
    extern void trace_preempt_off(unsigned long a0, unsigned long a1);
6cd8a4bb2   Steven Rostedt   ftrace: trace pre...
313
  #else
4dbf6bc23   Steven Rostedt   tracing: Convert ...
314
315
    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   Steven Rostedt   ftrace: trace pre...
316
  #endif
68bf21aa1   Steven Rostedt   ftrace: mcount ca...
317
318
319
320
321
  #ifdef CONFIG_FTRACE_MCOUNT_RECORD
  extern void ftrace_init(void);
  #else
  static inline void ftrace_init(void) { }
  #endif
71566a0d1   Frederic Weisbecker   tracing/fastboot:...
322
  /*
287b6e68c   Frederic Weisbecker   tracing/function-...
323
324
325
326
327
328
   * Structure that defines an entry function trace.
   */
  struct ftrace_graph_ent {
  	unsigned long func; /* Current function */
  	int depth;
  };
dd0e545f0   Steven Rostedt   ftrace: printk fo...
329

71566a0d1   Frederic Weisbecker   tracing/fastboot:...
330
  /*
caf4b323b   Frederic Weisbecker   tracing, x86: add...
331
332
   * Structure that defines a return function trace.
   */
fb52607af   Frederic Weisbecker   tracing/function-...
333
  struct ftrace_graph_ret {
caf4b323b   Frederic Weisbecker   tracing, x86: add...
334
335
336
  	unsigned long func; /* Current function */
  	unsigned long long calltime;
  	unsigned long long rettime;
0231022cc   Frederic Weisbecker   tracing/function-...
337
338
  	/* Number of functions that overran the depth limit for current task */
  	unsigned long overrun;
287b6e68c   Frederic Weisbecker   tracing/function-...
339
  	int depth;
caf4b323b   Frederic Weisbecker   tracing, x86: add...
340
  };
62b915f10   Jiri Olsa   tracing: Add grap...
341
342
343
  /* 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   Frederic Weisbecker   tracing/function-...
344
  #ifdef CONFIG_FUNCTION_GRAPH_TRACER
8b96f0119   Frederic Weisbecker   tracing/function-...
345

5ac9f6226   Steven Rostedt   function-graph: a...
346
  /* for init task */
f876d346e   Tetsuo Handa   tracing: append a...
347
  #define INIT_FTRACE_GRAPH		.ret_stack = NULL,
5ac9f6226   Steven Rostedt   function-graph: a...
348

8b96f0119   Frederic Weisbecker   tracing/function-...
349
  /*
712406a6b   Steven Rostedt   tracing/function-...
350
351
352
353
354
355
356
357
   * 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   Steven Rostedt   function-graph: a...
358
  	unsigned long long subtime;
71e308a23   Steven Rostedt   function-graph: a...
359
  	unsigned long fp;
712406a6b   Steven Rostedt   tracing/function-...
360
361
362
363
364
365
366
367
368
369
  };
  
  /*
   * 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   Steven Rostedt   function-graph: a...
370
371
  ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,
  			 unsigned long frame_pointer);
712406a6b   Steven Rostedt   tracing/function-...
372
373
  
  /*
8b96f0119   Frederic Weisbecker   tracing/function-...
374
375
376
377
378
   * 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   Frederic Weisbecker   tracing/function-...
379
380
381
382
383
384
385
386
387
  /*
   * 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   Frederic Weisbecker   tracing/function-...
388
389
  #define FTRACE_RETFUNC_DEPTH 50
  #define FTRACE_RETSTACK_ALLOC_SIZE 32
287b6e68c   Frederic Weisbecker   tracing/function-...
390
391
  extern int register_ftrace_graph(trace_func_graph_ret_t retfunc,
  				trace_func_graph_ent_t entryfunc);
14a866c56   Steven Rostedt   ftrace: add ftrac...
392
  extern void ftrace_graph_stop(void);
287b6e68c   Frederic Weisbecker   tracing/function-...
393
394
395
  /* The current handlers in use */
  extern trace_func_graph_ret_t ftrace_graph_return;
  extern trace_func_graph_ent_t ftrace_graph_entry;
caf4b323b   Frederic Weisbecker   tracing, x86: add...
396

fb52607af   Frederic Weisbecker   tracing/function-...
397
  extern void unregister_ftrace_graph(void);
f201ae235   Frederic Weisbecker   tracing/function-...
398

fb52607af   Frederic Weisbecker   tracing/function-...
399
400
  extern void ftrace_graph_init_task(struct task_struct *t);
  extern void ftrace_graph_exit_task(struct task_struct *t);
868baf07b   Steven Rostedt   ftrace: Fix memor...
401
  extern void ftrace_graph_init_idle_task(struct task_struct *t, int cpu);
21a8c466f   Frederic Weisbecker   tracing/ftrace: p...
402
403
404
405
406
  
  static inline int task_curr_ret_stack(struct task_struct *t)
  {
  	return t->curr_ret_stack;
  }
380c4b141   Frederic Weisbecker   tracing/function-...
407
408
409
410
411
412
413
414
415
416
  
  static inline void pause_graph_tracing(void)
  {
  	atomic_inc(&current->tracing_graph_pause);
  }
  
  static inline void unpause_graph_tracing(void)
  {
  	atomic_dec(&current->tracing_graph_pause);
  }
5ac9f6226   Steven Rostedt   function-graph: a...
417
  #else /* !CONFIG_FUNCTION_GRAPH_TRACER */
8b96f0119   Frederic Weisbecker   tracing/function-...
418
419
  
  #define __notrace_funcgraph
bcbc4f20b   Frederic Weisbecker   tracing/function-...
420
  #define __irq_entry
5ac9f6226   Steven Rostedt   function-graph: a...
421
  #define INIT_FTRACE_GRAPH
8b96f0119   Frederic Weisbecker   tracing/function-...
422

fb52607af   Frederic Weisbecker   tracing/function-...
423
424
  static inline void ftrace_graph_init_task(struct task_struct *t) { }
  static inline void ftrace_graph_exit_task(struct task_struct *t) { }
868baf07b   Steven Rostedt   ftrace: Fix memor...
425
  static inline void ftrace_graph_init_idle_task(struct task_struct *t, int cpu) { }
21a8c466f   Frederic Weisbecker   tracing/ftrace: p...
426

62b915f10   Jiri Olsa   tracing: Add grap...
427
428
429
430
431
432
  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   Frederic Weisbecker   tracing/ftrace: p...
433
434
435
436
  static inline int task_curr_ret_stack(struct task_struct *tsk)
  {
  	return -1;
  }
380c4b141   Frederic Weisbecker   tracing/function-...
437
438
439
  
  static inline void pause_graph_tracing(void) { }
  static inline void unpause_graph_tracing(void) { }
5ac9f6226   Steven Rostedt   function-graph: a...
440
  #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
caf4b323b   Frederic Weisbecker   tracing, x86: add...
441

ea4e2bc4d   Steven Rostedt   ftrace: graph of ...
442
  #ifdef CONFIG_TRACING
ea4e2bc4d   Steven Rostedt   ftrace: graph of ...
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
  
  /* 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   Frederic Weisbecker   tracing: Dump eit...
483
484
485
  enum ftrace_dump_mode;
  
  extern enum ftrace_dump_mode ftrace_dump_on_oops;
526211bc5   Ingo Molnar   tracing: move uti...
486

261842b7c   Steven Rostedt   tracing: add same...
487
488
489
  #ifdef CONFIG_PREEMPT
  #define INIT_TRACE_RECURSION		.trace_recursion = 0,
  #endif
ea4e2bc4d   Steven Rostedt   ftrace: graph of ...
490
  #endif /* CONFIG_TRACING */
261842b7c   Steven Rostedt   tracing: add same...
491
492
493
  #ifndef INIT_TRACE_RECURSION
  #define INIT_TRACE_RECURSION
  #endif
b1818748b   Markus Metzger   x86, ftrace, hw-b...
494

e7b8e675d   Mike Frysinger   tracing: Unify ar...
495
496
497
498
499
  #ifdef CONFIG_FTRACE_SYSCALLS
  
  unsigned long arch_syscall_addr(int nr);
  
  #endif /* CONFIG_FTRACE_SYSCALLS */
16444a8a4   Arnaldo Carvalho de Melo   ftrace: add basic...
500
  #endif /* _LINUX_FTRACE_H */