diff options
Diffstat (limited to 'include/linux/ftrace.h')
| -rw-r--r-- | include/linux/ftrace.h | 38 | 
1 files changed, 36 insertions, 2 deletions
| diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 832e65f06754..9999e29187de 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h @@ -30,16 +30,26 @@  #define ARCH_SUPPORTS_FTRACE_OPS 0  #endif +#ifdef CONFIG_FUNCTION_TRACER +struct ftrace_ops; +struct ftrace_regs;  /*   * If the arch's mcount caller does not support all of ftrace's   * features, then it must call an indirect function that   * does. Or at least does enough to prevent any unwelcome side effects. + * + * Also define the function prototype that these architectures use + * to call the ftrace_ops_list_func().   */  #if !ARCH_SUPPORTS_FTRACE_OPS  # define FTRACE_FORCE_LIST_FUNC 1 +void arch_ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip);  #else  # define FTRACE_FORCE_LIST_FUNC 0 +void arch_ftrace_ops_list_func(unsigned long ip, unsigned long parent_ip, +			       struct ftrace_ops *op, struct ftrace_regs *fregs);  #endif +#endif /* CONFIG_FUNCTION_TRACER */  /* Main tracing buffer and events set up */  #ifdef CONFIG_TRACING @@ -88,8 +98,6 @@ extern int  ftrace_enable_sysctl(struct ctl_table *table, int write,  		     void *buffer, size_t *lenp, loff_t *ppos); -struct ftrace_ops; -  #ifndef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS  struct ftrace_regs { @@ -316,7 +324,12 @@ int ftrace_modify_direct_caller(struct ftrace_func_entry *entry,  				unsigned long old_addr,  				unsigned long new_addr);  unsigned long ftrace_find_rec_direct(unsigned long ip); +int register_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr); +int unregister_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr); +int modify_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr); +  #else +struct ftrace_ops;  # define ftrace_direct_func_count 0  static inline int register_ftrace_direct(unsigned long ip, unsigned long addr)  { @@ -346,6 +359,18 @@ static inline unsigned long ftrace_find_rec_direct(unsigned long ip)  {  	return 0;  } +static inline int register_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr) +{ +	return -ENODEV; +} +static inline int unregister_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr) +{ +	return -ENODEV; +} +static inline int modify_ftrace_direct_multi(struct ftrace_ops *ops, unsigned long addr) +{ +	return -ENODEV; +}  #endif /* CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS */  #ifndef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS @@ -795,6 +820,15 @@ static inline bool is_ftrace_trampoline(unsigned long addr)  }  #endif /* CONFIG_DYNAMIC_FTRACE */ +#ifdef CONFIG_FUNCTION_GRAPH_TRACER +#ifndef ftrace_graph_func +#define ftrace_graph_func ftrace_stub +#define FTRACE_OPS_GRAPH_STUB FTRACE_OPS_FL_STUB +#else +#define FTRACE_OPS_GRAPH_STUB 0 +#endif +#endif /* CONFIG_FUNCTION_GRAPH_TRACER */ +  /* totally disable ftrace - can not re-enable after this */  void ftrace_kill(void); |