Skip to content

Commit e29aa91

Browse files
committed
tracing: Have function graph tracer define options per instance
Currently the function graph tracer's options are saved via a global mask when it should be per instance. Use the new infrastructure to define a "default_flags" field in the tracer structure that is used for the top level instance as well as new ones. Currently the global mask causes confusion: # cd /sys/kernel/tracing # mkdir instances/foo # echo function_graph > instances/foo/current_tracer # echo 1 > options/funcgraph-args # echo function_graph > current_tracer # cat trace [..] 2) | _raw_spin_lock_irq(lock=0xffff96b97dea16c0) { 2) 0.422 us | do_raw_spin_lock(lock=0xffff96b97dea16c0); 7) | rcu_sched_clock_irq(user=0) { 2) 1.478 us | } 7) 0.758 us | rcu_is_cpu_rrupt_from_idle(); 2) 0.647 us | enqueue_hrtimer(timer=0xffff96b97dea2058, base=0xffff96b97dea1740, mode=0); # cat instances/foo/options/funcgraph-args 1 # cat instances/foo/trace [..] 4) | __x64_sys_read() { 4) | ksys_read() { 4) 0.755 us | fdget_pos(); 4) | vfs_read() { 4) | rw_verify_area() { 4) | security_file_permission() { 4) | apparmor_file_permission() { 4) | common_file_perm() { 4) | aa_file_perm() { 4) | rcu_read_lock_held() { [..] The above shows that updating the "funcgraph-args" option at the top level instance also updates the "funcgraph-args" option in the instance but because the update is only done by the instance that gets changed (as it should), it's confusing to see that the option is already set in the other instance. Cc: Masami Hiramatsu <[email protected]> Cc: Mark Rutland <[email protected]> Cc: Mathieu Desnoyers <[email protected]> Cc: Andrew Morton <[email protected]> Link: https://patch.msgid.link/[email protected] Fixes: c132be2 ("function_graph: Have the instances use their own ftrace_ops for filtering") Signed-off-by: Steven Rostedt (Google) <[email protected]>
1 parent 76680d0 commit e29aa91

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

kernel/trace/trace_functions_graph.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ static struct tracer_flags tracer_flags = {
101101
.opts = trace_opts
102102
};
103103

104-
static bool tracer_flags_is_set(u32 flags)
104+
static bool tracer_flags_is_set(struct trace_array *tr, u32 flags)
105105
{
106-
return (tracer_flags.val & flags) == flags;
106+
return (tr->current_trace_flags->val & flags) == flags;
107107
}
108108

109109
/*
@@ -263,7 +263,7 @@ static int graph_entry(struct ftrace_graph_ent *trace,
263263

264264
trace_ctx = tracing_gen_ctx();
265265
if (IS_ENABLED(CONFIG_FUNCTION_GRAPH_RETADDR) &&
266-
tracer_flags_is_set(TRACE_GRAPH_PRINT_RETADDR)) {
266+
tracer_flags_is_set(tr, TRACE_GRAPH_PRINT_RETADDR)) {
267267
unsigned long retaddr = ftrace_graph_top_ret_addr(current);
268268
ret = __trace_graph_retaddr_entry(tr, trace, trace_ctx, retaddr);
269269
} else {
@@ -441,7 +441,7 @@ static int graph_trace_init(struct trace_array *tr)
441441
{
442442
int ret;
443443

444-
if (tracer_flags_is_set(TRACE_GRAPH_ARGS))
444+
if (tracer_flags_is_set(tr, TRACE_GRAPH_ARGS))
445445
tr->gops->entryfunc = trace_graph_entry_args;
446446
else
447447
tr->gops->entryfunc = trace_graph_entry;
@@ -1459,7 +1459,8 @@ print_graph_function_flags(struct trace_iterator *iter, u32 flags)
14591459
static enum print_line_t
14601460
print_graph_function(struct trace_iterator *iter)
14611461
{
1462-
return print_graph_function_flags(iter, tracer_flags.val);
1462+
struct trace_array *tr = iter->tr;
1463+
return print_graph_function_flags(iter, tr->current_trace_flags->val);
14631464
}
14641465

14651466
static enum print_line_t
@@ -1535,7 +1536,10 @@ static void __print_graph_headers_flags(struct trace_array *tr,
15351536

15361537
static void print_graph_headers(struct seq_file *s)
15371538
{
1538-
print_graph_headers_flags(s, tracer_flags.val);
1539+
struct trace_iterator *iter = s->private;
1540+
struct trace_array *tr = iter->tr;
1541+
1542+
print_graph_headers_flags(s, tr->current_trace_flags->val);
15391543
}
15401544

15411545
void print_graph_headers_flags(struct seq_file *s, u32 flags)
@@ -1660,7 +1664,7 @@ static struct tracer graph_trace __tracer_data = {
16601664
.reset = graph_trace_reset,
16611665
.print_line = print_graph_function,
16621666
.print_header = print_graph_headers,
1663-
.flags = &tracer_flags,
1667+
.default_flags = &tracer_flags,
16641668
.set_flag = func_graph_set_flag,
16651669
.allow_instances = true,
16661670
#ifdef CONFIG_FTRACE_SELFTEST

0 commit comments

Comments
 (0)