Message ID | 20241211153634.69c75afa@batman.local.home (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | ftrace/microblaze: Do not find "true_parent" for return address | expand |
[ Added Jeff ] -- Steve On Wed, 11 Dec 2024 15:36:34 -0500 Steven Rostedt <rostedt@goodmis.org> wrote: > From: Steven Rostedt <rostedt@goodmis.org> > > When function tracing and function graph tracing are both enabled (in > different instances) the "parent" of some of the function tracing events > is "return_to_handler" which is the trampoline used by function graph > tracing. To fix this, ftrace_get_true_parent_ip() was introduced that > returns the "true" parent ip instead of the trampoline. > > To do this, the ftrace_regs_get_stack_pointer() is used, which uses > kernel_stack_pointer(). The problem is that microblaze does not implement > kerenl_stack_pointer() so when function graph tracing is enabled, the > build fails. > > Modify the #ifdef check to the code around ftrace_get_true_parent_ip() to > include !defined(CONFIG_MICROBLAZE) which will default it to just return > the parent ip passed in, which may still be the ip of the function garph > trampoline. > > Fixes: 60b1f578b578 ("ftrace: Get the true parent ip for function tracer") > Reported-by: Al Viro <viro@zeniv.linux.org.uk> > Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> > --- > kernel/trace/trace_functions.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c > index 74c353164ca1..a75d107a45f8 100644 > --- a/kernel/trace/trace_functions.c > +++ b/kernel/trace/trace_functions.c > @@ -176,7 +176,8 @@ static void function_trace_start(struct trace_array *tr) > tracing_reset_online_cpus(&tr->array_buffer); > } > > -#ifdef CONFIG_FUNCTION_GRAPH_TRACER > +/* Microblaze currently doesn't implement kernel_stack_pointer() */ > +#if defined(CONFIG_FUNCTION_GRAPH_TRACER) && !defined(CONFIG_MICROBLAZE) > static __always_inline unsigned long > function_get_true_parent_ip(unsigned long parent_ip, struct ftrace_regs *fregs) > {
diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c index 74c353164ca1..a75d107a45f8 100644 --- a/kernel/trace/trace_functions.c +++ b/kernel/trace/trace_functions.c @@ -176,7 +176,8 @@ static void function_trace_start(struct trace_array *tr) tracing_reset_online_cpus(&tr->array_buffer); } -#ifdef CONFIG_FUNCTION_GRAPH_TRACER +/* Microblaze currently doesn't implement kernel_stack_pointer() */ +#if defined(CONFIG_FUNCTION_GRAPH_TRACER) && !defined(CONFIG_MICROBLAZE) static __always_inline unsigned long function_get_true_parent_ip(unsigned long parent_ip, struct ftrace_regs *fregs) {