1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _LINUX_KERNEL_FTRACE_INTERNAL_H 3 #define _LINUX_KERNEL_FTRACE_INTERNAL_H 4 5 int __register_ftrace_function(struct ftrace_ops *ops); 6 int __unregister_ftrace_function(struct ftrace_ops *ops); 7 8 #ifdef CONFIG_FUNCTION_TRACER 9 10 extern struct mutex ftrace_lock; 11 extern struct ftrace_ops global_ops; 12 13 #ifdef CONFIG_DYNAMIC_FTRACE 14 15 int ftrace_startup(struct ftrace_ops *ops, int command); 16 int ftrace_shutdown(struct ftrace_ops *ops, int command); 17 int ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs); 18 19 #else /* !CONFIG_DYNAMIC_FTRACE */ 20 21 /* Keep as macros so we do not need to define the commands */ 22 # define ftrace_startup(ops, command) \ 23 ({ \ 24 int ___ret = __register_ftrace_function(ops); \ 25 if (!___ret) \ 26 (ops)->flags |= FTRACE_OPS_FL_ENABLED; \ 27 ___ret; \ 28 }) 29 # define ftrace_shutdown(ops, command) \ 30 ({ \ 31 int ___ret = __unregister_ftrace_function(ops); \ 32 if (!___ret) \ 33 (ops)->flags &= ~FTRACE_OPS_FL_ENABLED; \ 34 ___ret; \ 35 }) 36 static inline int 37 ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs) 38 { 39 return 1; 40 } 41 #endif /* CONFIG_DYNAMIC_FTRACE */ 42 43 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 44 extern int ftrace_graph_active; 45 void update_function_graph_func(void); 46 #else /* !CONFIG_FUNCTION_GRAPH_TRACER */ 47 # define ftrace_graph_active 0 48 static inline void update_function_graph_func(void) { } 49 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 50 51 #else /* !CONFIG_FUNCTION_TRACER */ 52 #endif /* CONFIG_FUNCTION_TRACER */ 53 54 #endif 55