Message ID | 20220409085500.4549-1-zhouchengming@bytedance.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [RESEND,v3,1/2] ftrace: cleanup ftrace_graph_caller enable and disable | expand |
On Sat, 9 Apr 2022 16:54:59 +0800 Chengming Zhou <zhouchengming@bytedance.com> wrote: > --- a/kernel/trace/ftrace.c > +++ b/kernel/trace/ftrace.c > @@ -2721,6 +2721,26 @@ int __weak ftrace_arch_code_modify_post_process(void) > return 0; > } > > +#ifdef CONFIG_FUNCTION_GRAPH_TRACER Actually, can you put this into fgraph.c instead. That only gets compiled if the above config is enabled. Thus, you do not even need to add the #ifdef around it. I intend to move even more code into fgraph.c that is only for function graph. I don't want to add any new code to ftrace.c for it. -- Steve > +/* > + * archs can override this function if they must do something > + * to enable hook for graph tracer. > + */ > +int __weak ftrace_enable_ftrace_graph_caller(void) > +{ > + return 0; > +} > + > +/* > + * archs can override this function if they must do something > + * to disable hook for graph tracer. > + */ > +int __weak ftrace_disable_ftrace_graph_caller(void) > +{ > + return 0; > +} > +#endif > + > void ftrace_modify_all_code(int command) > { > int update = command & FTRACE_UPDATE_TRACE_FUNC;
On 2022/4/9 22:23, Steven Rostedt wrote: > On Sat, 9 Apr 2022 16:54:59 +0800 > Chengming Zhou <zhouchengming@bytedance.com> wrote: > >> --- a/kernel/trace/ftrace.c >> +++ b/kernel/trace/ftrace.c >> @@ -2721,6 +2721,26 @@ int __weak ftrace_arch_code_modify_post_process(void) >> return 0; >> } >> >> +#ifdef CONFIG_FUNCTION_GRAPH_TRACER > > Actually, can you put this into fgraph.c instead. That only gets compiled > if the above config is enabled. Thus, you do not even need to add the > #ifdef around it. > > I intend to move even more code into fgraph.c that is only for function > graph. I don't want to add any new code to ftrace.c for it. Ok, make sense. I will do it. Thanks. > > -- Steve > > >> +/* >> + * archs can override this function if they must do something >> + * to enable hook for graph tracer. >> + */ >> +int __weak ftrace_enable_ftrace_graph_caller(void) >> +{ >> + return 0; >> +} >> + >> +/* >> + * archs can override this function if they must do something >> + * to disable hook for graph tracer. >> + */ >> +int __weak ftrace_disable_ftrace_graph_caller(void) >> +{ >> + return 0; >> +} >> +#endif >> + >> void ftrace_modify_all_code(int command) >> { >> int update = command & FTRACE_UPDATE_TRACE_FUNC; >
diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c index 1e31c7d21597..b09d73c2ba89 100644 --- a/arch/x86/kernel/ftrace.c +++ b/arch/x86/kernel/ftrace.c @@ -579,9 +579,7 @@ void arch_ftrace_trampoline_free(struct ftrace_ops *ops) #ifdef CONFIG_FUNCTION_GRAPH_TRACER -#ifdef CONFIG_DYNAMIC_FTRACE - -#ifndef CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS +#if defined(CONFIG_DYNAMIC_FTRACE) && !defined(CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS) extern void ftrace_graph_call(void); static const char *ftrace_jmp_replace(unsigned long ip, unsigned long addr) { @@ -610,18 +608,7 @@ int ftrace_disable_ftrace_graph_caller(void) return ftrace_mod_jmp(ip, &ftrace_stub); } -#else /* !CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS */ -int ftrace_enable_ftrace_graph_caller(void) -{ - return 0; -} - -int ftrace_disable_ftrace_graph_caller(void) -{ - return 0; -} -#endif /* CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS */ -#endif /* !CONFIG_DYNAMIC_FTRACE */ +#endif /* CONFIG_DYNAMIC_FTRACE && !CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS */ /* * Hook the return address and push it in the stack of return addrs diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 4f1d2f5e7263..30622c755c77 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -2721,6 +2721,26 @@ int __weak ftrace_arch_code_modify_post_process(void) return 0; } +#ifdef CONFIG_FUNCTION_GRAPH_TRACER +/* + * archs can override this function if they must do something + * to enable hook for graph tracer. + */ +int __weak ftrace_enable_ftrace_graph_caller(void) +{ + return 0; +} + +/* + * archs can override this function if they must do something + * to disable hook for graph tracer. + */ +int __weak ftrace_disable_ftrace_graph_caller(void) +{ + return 0; +} +#endif + void ftrace_modify_all_code(int command) { int update = command & FTRACE_UPDATE_TRACE_FUNC;
The ftrace_[enable,disable]_ftrace_graph_caller() are used to do special hooks for graph tracer, which are not needed on some ARCHs that use graph_ops:func function to install return_hooker. So introduce the weak version in ftrace core code to cleanup in x86. Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com> --- v3: - consolidate two #if into a single #if, suggested by Steve. Thanks. --- arch/x86/kernel/ftrace.c | 17 ++--------------- kernel/trace/ftrace.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 15 deletions(-)