1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _LINUX_KERNEL_FTRACE_INTERNAL_H 3#define _LINUX_KERNEL_FTRACE_INTERNAL_H 4 5int __register_ftrace_function(struct ftrace_ops *ops); 6int __unregister_ftrace_function(struct ftrace_ops *ops); 7 8#ifdef CONFIG_FUNCTION_TRACER 9 10extern struct mutex ftrace_lock; 11extern struct ftrace_ops global_ops; 12 13#ifdef CONFIG_DYNAMIC_FTRACE 14 15int ftrace_startup(struct ftrace_ops *ops, int command); 16int ftrace_shutdown(struct ftrace_ops *ops, int command); 17int 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 }) 36static inline int 37ftrace_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 44extern int ftrace_graph_active; 45void update_function_graph_func(void); 46#else /* !CONFIG_FUNCTION_GRAPH_TRACER */ 47# define ftrace_graph_active 0 48static 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