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 int ftrace_startup_subops(struct ftrace_ops *ops, struct ftrace_ops *subops, int command); 19 int ftrace_shutdown_subops(struct ftrace_ops *ops, struct ftrace_ops *subops, int command); 20 21 #else /* !CONFIG_DYNAMIC_FTRACE */ 22 23 /* Keep as macros so we do not need to define the commands */ 24 # define ftrace_startup(ops, command) \ 25 ({ \ 26 int ___ret = __register_ftrace_function(ops); \ 27 if (!___ret) \ 28 (ops)->flags |= FTRACE_OPS_FL_ENABLED; \ 29 ___ret; \ 30 }) 31 # define ftrace_shutdown(ops, command) \ 32 ({ \ 33 int ___ret = __unregister_ftrace_function(ops); \ 34 if (!___ret) \ 35 (ops)->flags &= ~FTRACE_OPS_FL_ENABLED; \ 36 ___ret; \ 37 }) 38 static inline int 39 ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs) 40 { 41 return 1; 42 } 43 static inline int ftrace_startup_subops(struct ftrace_ops *ops, struct ftrace_ops *subops, int command) 44 { 45 return -EINVAL; 46 } 47 static inline int ftrace_shutdown_subops(struct ftrace_ops *ops, struct ftrace_ops *subops, int command) 48 { 49 return -EINVAL; 50 } 51 #endif /* CONFIG_DYNAMIC_FTRACE */ 52 53 #ifdef CONFIG_FUNCTION_GRAPH_TRACER 54 extern int ftrace_graph_active; 55 # ifdef CONFIG_DYNAMIC_FTRACE 56 extern void fgraph_update_pid_func(void); 57 # else 58 static inline void fgraph_update_pid_func(void) {} 59 # endif 60 #else /* !CONFIG_FUNCTION_GRAPH_TRACER */ 61 # define ftrace_graph_active 0 62 static inline void fgraph_update_pid_func(void) {} 63 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ 64 65 #else /* !CONFIG_FUNCTION_TRACER */ 66 #endif /* CONFIG_FUNCTION_TRACER */ 67 68 #endif 69