tracing: Fix display of hist trigger expressions containing timestamps
authorTom Zanussi <tom.zanussi@linux.intel.com>
Wed, 28 Mar 2018 20:10:53 +0000 (15:10 -0500)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Fri, 6 Apr 2018 12:56:48 +0000 (08:56 -0400)
When displaying hist triggers, variable references that have the
timestamp field flag set are erroneously displayed as common_timestamp
rather than the variable reference.  Additionally, timestamp
expressions are displayed in the same way.  Fix this by forcing the
timestamp flag handling to follow variable reference and expression
handling.

Before:

  # cat /sys/kernel/debug/tracing/events/sched/sched_switch/trigger
  hist:keys=next_pid:vals=hitcount:wakeup_lat=common_timestamp.usecs:...

After:

  # cat /sys/kernel/debug/tracing/events/sched/sched_switch/trigger
  hist:keys=next_pid:vals=hitcount:wakeup_lat=common_timestamp.usecs-$ts0.usecs:...

Link: http://lkml.kernel.org/r/92746b06be67499c2a6217bd55395b350ad18fad.1522256721.git.tom.zanussi@linux.intel.com
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace_events_hist.c

index a02bc09d765af0b09c0cf5ca07030b58c2d934ef..4f4792f4c83fd7ae982f491ab7e65a23e8440f8f 100644 (file)
@@ -1686,8 +1686,6 @@ static const char *hist_field_name(struct hist_field *field,
        else if (field->flags & HIST_FIELD_FL_LOG2 ||
                 field->flags & HIST_FIELD_FL_ALIAS)
                field_name = hist_field_name(field->operands[0], ++level);
-       else if (field->flags & HIST_FIELD_FL_TIMESTAMP)
-               field_name = "common_timestamp";
        else if (field->flags & HIST_FIELD_FL_CPU)
                field_name = "cpu";
        else if (field->flags & HIST_FIELD_FL_EXPR ||
@@ -1703,7 +1701,8 @@ static const char *hist_field_name(struct hist_field *field,
                        field_name = full_name;
                } else
                        field_name = field->name;
-       }
+       } else if (field->flags & HIST_FIELD_FL_TIMESTAMP)
+               field_name = "common_timestamp";
 
        if (field_name == NULL)
                field_name = "";
@@ -4858,23 +4857,15 @@ static void hist_field_print(struct seq_file *m, struct hist_field *hist_field)
        if (hist_field->var.name)
                seq_printf(m, "%s=", hist_field->var.name);
 
-       if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP)
-               seq_puts(m, "common_timestamp");
-       else if (hist_field->flags & HIST_FIELD_FL_CPU)
+       if (hist_field->flags & HIST_FIELD_FL_CPU)
                seq_puts(m, "cpu");
        else if (field_name) {
                if (hist_field->flags & HIST_FIELD_FL_VAR_REF ||
                    hist_field->flags & HIST_FIELD_FL_ALIAS)
                        seq_putc(m, '$');
                seq_printf(m, "%s", field_name);
-       }
-
-       if (hist_field->flags) {
-               const char *flags_str = get_hist_field_flags(hist_field);
-
-               if (flags_str)
-                       seq_printf(m, ".%s", flags_str);
-       }
+       } else if (hist_field->flags & HIST_FIELD_FL_TIMESTAMP)
+               seq_puts(m, "common_timestamp");
 }
 
 static int event_hist_trigger_print(struct seq_file *m,