perf intel-pt: Use itrace error flags to suppress some errors
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 10 Jul 2020 15:10:58 +0000 (18:10 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 6 Aug 2020 11:22:07 +0000 (08:22 -0300)
The itrace "e" option may be followed by flags which affect what errors
will or will not be reported.  Each flag must be preceded by either '+' or '-'.
The flags supported by Intel PT are:

-o Suppress overflow errors
-l Suppress trace data lost errors
For example, for errors but not overflow or data lost errors:

--itrace=e-o-l

Suppressing those errors can be useful for testing and debugging because
they are not due to decoding.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lore.kernel.org/lkml/20200710151104.15137-7-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/Documentation/perf-intel-pt.txt
tools/perf/util/intel-pt.c

index f4cd49a..20ac592 100644 (file)
@@ -871,7 +871,14 @@ Developer Manuals.
 
 Error events show where the decoder lost the trace.  Error events
 are quite important.  Users must know if what they are seeing is a complete
-picture or not.
+picture or not. The "e" option may be followed by flags which affect what errors
+will or will not be reported.  Each flag must be preceded by either '+' or '-'.
+The flags supported by Intel PT are:
+               -o      Suppress overflow errors
+               -l      Suppress trace data lost errors
+For example, for errors but not overflow or data lost errors:
+
+       --itrace=e-o-l
 
 The "d" option will cause the creation of a file "intel_pt.log" containing all
 decoded packets and instructions.  Note that this option slows down the decoder
index 9cef46c..8b860a6 100644 (file)
@@ -1863,6 +1863,15 @@ static int intel_pt_synth_error(struct intel_pt *pt, int code, int cpu,
        char msg[MAX_AUXTRACE_ERROR_MSG];
        int err;
 
+       if (pt->synth_opts.error_minus_flags) {
+               if (code == INTEL_PT_ERR_OVR &&
+                   pt->synth_opts.error_minus_flags & AUXTRACE_ERR_FLG_OVERFLOW)
+                       return 0;
+               if (code == INTEL_PT_ERR_LOST &&
+                   pt->synth_opts.error_minus_flags & AUXTRACE_ERR_FLG_DATA_LOST)
+                       return 0;
+       }
+
        intel_pt__strerror(code, msg, MAX_AUXTRACE_ERROR_MSG);
 
        auxtrace_synth_error(&event.auxtrace_error, PERF_AUXTRACE_ERROR_ITRACE,