13306fc4aSSteven Rostedt (VMware) /* SPDX-License-Identifier: GPL-2.0 */
23306fc4aSSteven Rostedt (VMware) #ifndef _LINUX_KERNEL_FTRACE_INTERNAL_H
33306fc4aSSteven Rostedt (VMware) #define  _LINUX_KERNEL_FTRACE_INTERNAL_H
43306fc4aSSteven Rostedt (VMware) 
5*7d8b31b7SArnd Bergmann int __register_ftrace_function(struct ftrace_ops *ops);
6*7d8b31b7SArnd Bergmann int __unregister_ftrace_function(struct ftrace_ops *ops);
7*7d8b31b7SArnd Bergmann 
83306fc4aSSteven Rostedt (VMware) #ifdef CONFIG_FUNCTION_TRACER
93306fc4aSSteven Rostedt (VMware) 
103306fc4aSSteven Rostedt (VMware) extern struct mutex ftrace_lock;
113306fc4aSSteven Rostedt (VMware) extern struct ftrace_ops global_ops;
123306fc4aSSteven Rostedt (VMware) 
133306fc4aSSteven Rostedt (VMware) #ifdef CONFIG_DYNAMIC_FTRACE
143306fc4aSSteven Rostedt (VMware) 
153306fc4aSSteven Rostedt (VMware) int ftrace_startup(struct ftrace_ops *ops, int command);
163306fc4aSSteven Rostedt (VMware) int ftrace_shutdown(struct ftrace_ops *ops, int command);
173306fc4aSSteven Rostedt (VMware) int ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs);
183306fc4aSSteven Rostedt (VMware) 
193306fc4aSSteven Rostedt (VMware) #else /* !CONFIG_DYNAMIC_FTRACE */
203306fc4aSSteven Rostedt (VMware) 
213306fc4aSSteven Rostedt (VMware) /* Keep as macros so we do not need to define the commands */
223306fc4aSSteven Rostedt (VMware) # define ftrace_startup(ops, command)					\
233306fc4aSSteven Rostedt (VMware) 	({								\
243306fc4aSSteven Rostedt (VMware) 		int ___ret = __register_ftrace_function(ops);		\
253306fc4aSSteven Rostedt (VMware) 		if (!___ret)						\
263306fc4aSSteven Rostedt (VMware) 			(ops)->flags |= FTRACE_OPS_FL_ENABLED;		\
273306fc4aSSteven Rostedt (VMware) 		___ret;							\
283306fc4aSSteven Rostedt (VMware) 	})
293306fc4aSSteven Rostedt (VMware) # define ftrace_shutdown(ops, command)					\
303306fc4aSSteven Rostedt (VMware) 	({								\
313306fc4aSSteven Rostedt (VMware) 		int ___ret = __unregister_ftrace_function(ops);		\
323306fc4aSSteven Rostedt (VMware) 		if (!___ret)						\
333306fc4aSSteven Rostedt (VMware) 			(ops)->flags &= ~FTRACE_OPS_FL_ENABLED;		\
343306fc4aSSteven Rostedt (VMware) 		___ret;							\
353306fc4aSSteven Rostedt (VMware) 	})
363306fc4aSSteven Rostedt (VMware) static inline int
ftrace_ops_test(struct ftrace_ops * ops,unsigned long ip,void * regs)373306fc4aSSteven Rostedt (VMware) ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs)
383306fc4aSSteven Rostedt (VMware) {
393306fc4aSSteven Rostedt (VMware) 	return 1;
403306fc4aSSteven Rostedt (VMware) }
413306fc4aSSteven Rostedt (VMware) #endif /* CONFIG_DYNAMIC_FTRACE */
423306fc4aSSteven Rostedt (VMware) 
433306fc4aSSteven Rostedt (VMware) #ifdef CONFIG_FUNCTION_GRAPH_TRACER
443306fc4aSSteven Rostedt (VMware) extern int ftrace_graph_active;
453306fc4aSSteven Rostedt (VMware) void update_function_graph_func(void);
463306fc4aSSteven Rostedt (VMware) #else /* !CONFIG_FUNCTION_GRAPH_TRACER */
473306fc4aSSteven Rostedt (VMware) # define ftrace_graph_active 0
update_function_graph_func(void)483306fc4aSSteven Rostedt (VMware) static inline void update_function_graph_func(void) { }
493306fc4aSSteven Rostedt (VMware) #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
503306fc4aSSteven Rostedt (VMware) 
513306fc4aSSteven Rostedt (VMware) #else /* !CONFIG_FUNCTION_TRACER */
523306fc4aSSteven Rostedt (VMware) #endif /* CONFIG_FUNCTION_TRACER */
533306fc4aSSteven Rostedt (VMware) 
543306fc4aSSteven Rostedt (VMware) #endif
55