On Mon, 23 Dec 2024 15:13:50 -0500 Steven Rostedt <rostedt@xxxxxxxxxxx> wrote: > From: Steven Rostedt <rostedt@xxxxxxxxxxx> > > Currently, when function_graph is started, it looks at the option > funcgraph-args, and if it is set, it will enable tracing of the arguments. > > But if tracing is already running, and the user enables funcgraph-args, it > will have no effect. Instead, it should enable argument tracing when it is > enabled, even if it means disabling the function graph tracing for a short > time in order to do the transition. > Looks good to me. Acked-by: Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx> > Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> > --- > kernel/trace/trace_functions_graph.c | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) > > diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c > index c8eda9bebdf4..d1ee001f5a8e 100644 > --- a/kernel/trace/trace_functions_graph.c > +++ b/kernel/trace/trace_functions_graph.c > @@ -469,7 +469,7 @@ static int graph_trace_init(struct trace_array *tr) > else > tr->gops->retfunc = trace_graph_return; > > - /* Make gops functions are visible before we start tracing */ > + /* Make gops functions visible before we start tracing */ > smp_mb(); > > ret = register_ftrace_graph(tr->gops); > @@ -480,6 +480,28 @@ static int graph_trace_init(struct trace_array *tr) > return 0; > } > > +static int ftrace_graph_trace_args(struct trace_array *tr, int set) > +{ > + trace_func_graph_ent_t entry; > + > + if (set) > + entry = trace_graph_entry_args; > + else > + entry = trace_graph_entry; > + > + /* See if there's any changes */ > + if (tr->gops->entryfunc == entry) > + return 0; > + > + unregister_ftrace_graph(tr->gops); > + > + tr->gops->entryfunc = entry; > + > + /* Make gops functions visible before we start tracing */ > + smp_mb(); > + return register_ftrace_graph(tr->gops); > +} > + > static void graph_trace_reset(struct trace_array *tr) > { > tracing_stop_cmdline_record(); > @@ -1609,6 +1631,9 @@ func_graph_set_flag(struct trace_array *tr, u32 old_flags, u32 bit, int set) > if (bit == TRACE_GRAPH_GRAPH_TIME) > ftrace_graph_graph_time_control(set); > > + if (bit == TRACE_GRAPH_ARGS) > + return ftrace_graph_trace_args(tr, set); > + > return 0; > } > > -- > 2.45.2 > > -- Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>