Commit 2bacfd9f authored by Tom Zanussi's avatar Tom Zanussi Committed by Steven Rostedt (Google)

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.orgSigned-off-by: default avatarTom Zanussi <zanussi@kernel.org>
Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
parent 8261ef2e
...@@ -1356,9 +1356,12 @@ static const char *hist_field_name(struct hist_field *field, ...@@ -1356,9 +1356,12 @@ static const char *hist_field_name(struct hist_field *field,
field_name = field->name; field_name = field->name;
} else if (field->flags & HIST_FIELD_FL_TIMESTAMP) } else if (field->flags & HIST_FIELD_FL_TIMESTAMP)
field_name = "common_timestamp"; field_name = "common_timestamp";
else if (field->flags & HIST_FIELD_FL_STACKTRACE) else if (field->flags & HIST_FIELD_FL_STACKTRACE) {
field_name = "stacktrace"; if (field->field)
else if (field->flags & HIST_FIELD_FL_HITCOUNT) field_name = field->field->name;
else
field_name = "stacktrace";
} else if (field->flags & HIST_FIELD_FL_HITCOUNT)
field_name = "hitcount"; field_name = "hitcount";
if (field_name == NULL) if (field_name == NULL)
...@@ -5339,7 +5342,10 @@ static void hist_trigger_print_key(struct seq_file *m, ...@@ -5339,7 +5342,10 @@ static void hist_trigger_print_key(struct seq_file *m,
seq_printf(m, "%s: %-30s[%3llu]", field_name, seq_printf(m, "%s: %-30s[%3llu]", field_name,
syscall_name, uval); syscall_name, uval);
} else if (key_field->flags & HIST_FIELD_FL_STACKTRACE) { } else if (key_field->flags & HIST_FIELD_FL_STACKTRACE) {
seq_puts(m, "stacktrace:\n"); if (key_field->field)
seq_printf(m, "%s.stacktrace", key_field->field->name);
else
seq_puts(m, "stacktrace:\n");
hist_trigger_stacktrace_print(m, hist_trigger_stacktrace_print(m,
key + key_field->offset, key + key_field->offset,
HIST_STACKTRACE_DEPTH); HIST_STACKTRACE_DEPTH);
...@@ -5884,7 +5890,8 @@ static void hist_field_print(struct seq_file *m, struct hist_field *hist_field) ...@@ -5884,7 +5890,8 @@ static void hist_field_print(struct seq_file *m, struct hist_field *hist_field)
if (hist_field->flags) { if (hist_field->flags) {
if (!(hist_field->flags & HIST_FIELD_FL_VAR_REF) && if (!(hist_field->flags & HIST_FIELD_FL_VAR_REF) &&
!(hist_field->flags & HIST_FIELD_FL_EXPR)) { !(hist_field->flags & HIST_FIELD_FL_EXPR) &&
!(hist_field->flags & HIST_FIELD_FL_STACKTRACE)) {
const char *flags = get_hist_field_flags(hist_field); const char *flags = get_hist_field_flags(hist_field);
if (flags) if (flags)
...@@ -5917,9 +5924,12 @@ static int event_hist_trigger_print(struct seq_file *m, ...@@ -5917,9 +5924,12 @@ static int event_hist_trigger_print(struct seq_file *m,
if (i > hist_data->n_vals) if (i > hist_data->n_vals)
seq_puts(m, ","); seq_puts(m, ",");
if (field->flags & HIST_FIELD_FL_STACKTRACE) if (field->flags & HIST_FIELD_FL_STACKTRACE) {
seq_puts(m, "stacktrace"); if (field->field)
else seq_printf(m, "%s.stacktrace", field->field->name);
else
seq_puts(m, "stacktrace");
} else
hist_field_print(m, field); hist_field_print(m, field);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment