Skip to content

Commit 2bacfd9

Browse files
Tom Zanussirostedt
authored andcommitted
tracing/histogram: Fix a few problems with stacktrace variable printing
Currently, there are a few problems when printing hist triggers and trace output when using stacktrace variables. This fixes the problems seen below: # echo 'hist:keys=delta.buckets=100,stack.stacktrace:sort=delta' > /sys/kernel/debug/tracing/events/synthetic/block_lat/trigger # cat /sys/kernel/debug/tracing/events/synthetic/block_lat/trigger hist:keys=delta.buckets=100,stacktrace:vals=hitcount:sort=delta.buckets=100:size=2048 [active] # echo 'hist:keys=next_pid:ts=common_timestamp.usecs,st=stacktrace if prev_state == 2' >> /sys/kernel/debug/tracing/events/sched/sched_switch/trigger # cat /sys/kernel/debug/tracing/events/sched/sched_switch/trigger hist:keys=next_pid:vals=hitcount:ts=common_timestamp.usecs,st=stacktrace.stacktrace:sort=hitcount:size=2048:clock=global if prev_state == 2 [active] and also in the trace output (should be stack.stacktrace): { delta: ~ 100-199, stacktrace __schedule+0xa19/0x1520 Link: https://lkml.kernel.org/r/60bebd4e546728e012a7a2bcbf58716d48ba6edb.1676063532.git.zanussi@kernel.org Signed-off-by: Tom Zanussi <[email protected]> Signed-off-by: Steven Rostedt (Google) <[email protected]>
1 parent 8261ef2 commit 2bacfd9

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

kernel/trace/trace_events_hist.c

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,9 +1356,12 @@ static const char *hist_field_name(struct hist_field *field,
13561356
field_name = field->name;
13571357
} else if (field->flags & HIST_FIELD_FL_TIMESTAMP)
13581358
field_name = "common_timestamp";
1359-
else if (field->flags & HIST_FIELD_FL_STACKTRACE)
1360-
field_name = "stacktrace";
1361-
else if (field->flags & HIST_FIELD_FL_HITCOUNT)
1359+
else if (field->flags & HIST_FIELD_FL_STACKTRACE) {
1360+
if (field->field)
1361+
field_name = field->field->name;
1362+
else
1363+
field_name = "stacktrace";
1364+
} else if (field->flags & HIST_FIELD_FL_HITCOUNT)
13621365
field_name = "hitcount";
13631366

13641367
if (field_name == NULL)
@@ -5339,7 +5342,10 @@ static void hist_trigger_print_key(struct seq_file *m,
53395342
seq_printf(m, "%s: %-30s[%3llu]", field_name,
53405343
syscall_name, uval);
53415344
} else if (key_field->flags & HIST_FIELD_FL_STACKTRACE) {
5342-
seq_puts(m, "stacktrace:\n");
5345+
if (key_field->field)
5346+
seq_printf(m, "%s.stacktrace", key_field->field->name);
5347+
else
5348+
seq_puts(m, "stacktrace:\n");
53435349
hist_trigger_stacktrace_print(m,
53445350
key + key_field->offset,
53455351
HIST_STACKTRACE_DEPTH);
@@ -5884,7 +5890,8 @@ static void hist_field_print(struct seq_file *m, struct hist_field *hist_field)
58845890

58855891
if (hist_field->flags) {
58865892
if (!(hist_field->flags & HIST_FIELD_FL_VAR_REF) &&
5887-
!(hist_field->flags & HIST_FIELD_FL_EXPR)) {
5893+
!(hist_field->flags & HIST_FIELD_FL_EXPR) &&
5894+
!(hist_field->flags & HIST_FIELD_FL_STACKTRACE)) {
58885895
const char *flags = get_hist_field_flags(hist_field);
58895896

58905897
if (flags)
@@ -5917,9 +5924,12 @@ static int event_hist_trigger_print(struct seq_file *m,
59175924
if (i > hist_data->n_vals)
59185925
seq_puts(m, ",");
59195926

5920-
if (field->flags & HIST_FIELD_FL_STACKTRACE)
5921-
seq_puts(m, "stacktrace");
5922-
else
5927+
if (field->flags & HIST_FIELD_FL_STACKTRACE) {
5928+
if (field->field)
5929+
seq_printf(m, "%s.stacktrace", field->field->name);
5930+
else
5931+
seq_puts(m, "stacktrace");
5932+
} else
59235933
hist_field_print(m, field);
59245934
}
59255935

0 commit comments

Comments
 (0)