All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>, Andi Kleen <ak@linux.intel.com>,
	linux-kernel@vger.kernel.org
Subject: [PATCH V2 05/12] perf auxtrace: Add optional error flags to the itrace 'e' option
Date: Fri, 10 Jul 2020 18:10:57 +0300	[thread overview]
Message-ID: <20200710151104.15137-6-adrian.hunter@intel.com> (raw)
In-Reply-To: <20200710151104.15137-1-adrian.hunter@intel.com>

Allow the 'e' option to be followed by flags which will affect what errors
will or will not be reported. Each flag must be preceded by either '+' or
'-'. The flags are:
	o	overflow
	l	trace data lost

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/perf/Documentation/itrace.txt |  6 ++++
 tools/perf/util/auxtrace.c          | 44 +++++++++++++++++++++++++++++
 tools/perf/util/auxtrace.h          | 12 +++++++-
 3 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Documentation/itrace.txt b/tools/perf/Documentation/itrace.txt
index e817179c5027..114d0544d7c7 100644
--- a/tools/perf/Documentation/itrace.txt
+++ b/tools/perf/Documentation/itrace.txt
@@ -47,3 +47,9 @@
 	--itrace=i0nss1000000
 
 	skips the first million instructions.
+
+	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 are:
+		o	overflow
+		l	trace data lost
diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index 25c639ac4ad4..f0b0758830ee 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -1349,6 +1349,47 @@ void itrace_synth_opts__set_default(struct itrace_synth_opts *synth_opts,
 	synth_opts->initial_skip = 0;
 }
 
+static int get_flag(const char **ptr, unsigned int *flags)
+{
+	while (1) {
+		char c = **ptr;
+
+		if (c >= 'a' && c <= 'z') {
+			*flags |= 1 << (c - 'a');
+			++*ptr;
+			return 0;
+		} else if (c == ' ') {
+			++*ptr;
+			continue;
+		} else {
+			return -1;
+		}
+	}
+}
+
+static int get_flags(const char **ptr, unsigned int *plus_flags, unsigned int *minus_flags)
+{
+	while (1) {
+		switch (**ptr) {
+		case '+':
+			++*ptr;
+			if (get_flag(ptr, plus_flags))
+				return -1;
+			break;
+		case '-':
+			++*ptr;
+			if (get_flag(ptr, minus_flags))
+				return -1;
+			break;
+		case ' ':
+			++*ptr;
+			break;
+		default:
+			return 0;
+		}
+	}
+}
+
 /*
  * Please check tools/perf/Documentation/perf-script.txt for information
  * about the options parsed here, which is introduced after this cset,
@@ -1436,6 +1477,9 @@ int itrace_parse_synth_opts(const struct option *opt, const char *str,
 			break;
 		case 'e':
 			synth_opts->errors = true;
+			if (get_flags(&p, &synth_opts->error_plus_flags,
+				      &synth_opts->error_minus_flags))
+				goto out_err;
 			break;
 		case 'd':
 			synth_opts->log = true;
diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h
index e3ce5fb03ca0..cfe6d00d8624 100644
--- a/tools/perf/util/auxtrace.h
+++ b/tools/perf/util/auxtrace.h
@@ -55,6 +55,9 @@ enum itrace_period_type {
 	PERF_ITRACE_PERIOD_NANOSECS,
 };
 
+#define AUXTRACE_ERR_FLG_OVERFLOW	(1 << ('o' - 'a'))
+#define AUXTRACE_ERR_FLG_DATA_LOST	(1 << ('l' - 'a'))
+
 /**
  * struct itrace_synth_opts - AUX area tracing synthesis options.
  * @set: indicates whether or not options have been set
@@ -91,6 +94,8 @@ enum itrace_period_type {
  * @cpu_bitmap: CPUs for which to synthesize events, or NULL for all
  * @ptime_range: time intervals to trace or NULL
  * @range_num: number of time intervals to trace
+ * @error_plus_flags: flags to affect what errors are reported
+ * @error_minus_flags: flags to affect what errors are reported
  */
 struct itrace_synth_opts {
 	bool			set;
@@ -124,6 +129,8 @@ struct itrace_synth_opts {
 	unsigned long		*cpu_bitmap;
 	struct perf_time_interval *ptime_range;
 	int			range_num;
+	unsigned int		error_plus_flags;
+	unsigned int		error_minus_flags;
 };
 
 /**
@@ -613,7 +620,10 @@ bool auxtrace__evsel_is_auxtrace(struct perf_session *session,
 "				p:	    		synthesize power events\n"			\
 "				o:			synthesize other events recorded due to the use\n" \
 "							of aux-output (refer to perf record)\n"	\
-"				e:	    		synthesize error events\n"			\
+"				e[flags]:		synthesize error events\n" \
+"							each flag must be preceded by + or -\n" \
+"							error flags are: o (overflow)\n" \
+"									 l (data lost)\n" \
 "				d:	    		create a debug log\n"			\
 "				f:	    		synthesize first level cache events\n" \
 "				m:	    		synthesize last level cache events\n" \
-- 
2.17.1


  parent reply	other threads:[~2020-07-10 15:20 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-10 15:10 [PATCH V2 00/12] perf intel-pt: Add support for decoding FUP/TIP only Adrian Hunter
2020-07-10 15:10 ` [PATCH V2 01/12] perf intel-pt: Fix FUP packet state Adrian Hunter
2020-07-10 15:10 ` [PATCH V2 02/12] perf intel-pt: Fix duplicate branch after CBR Adrian Hunter
2020-07-10 15:10 ` [PATCH V2 03/12] perf tools: Improve aux_output not supported error Adrian Hunter
2020-07-10 15:10 ` [PATCH V2 04/12] perf auxtrace: Add missing itrace options to help text Adrian Hunter
2020-07-10 15:10 ` Adrian Hunter [this message]
2020-07-10 15:10 ` [PATCH V2 06/12] perf intel-pt: Use itrace error flags to suppress some errors Adrian Hunter
2020-07-10 15:10 ` [PATCH V2 07/12] perf auxtrace: Add optional log flags to the itrace 'd' option Adrian Hunter
2020-07-10 15:11 ` [PATCH V2 08/12] perf intel-pt: Use itrace debug log flags to suppress some messages Adrian Hunter
2020-07-10 15:11 ` [PATCH V2 09/12] perf intel-pt: Time filter logged perf events Adrian Hunter
2020-07-10 15:11 ` [PATCH V2 10/12] perf auxtrace: Add itrace 'q' option for quicker, less detailed decoding Adrian Hunter
2020-07-20 22:27   ` Andi Kleen
2020-07-10 15:11 ` [PATCH V2 11/12] perf intel-pt: Add support for decoding FUP/TIP only Adrian Hunter
2020-07-10 15:11 ` [PATCH V2 12/12] perf intel-pt: Add support for decoding PSB+ only Adrian Hunter
2020-07-20 22:25   ` Andi Kleen
2020-08-06 12:03     ` Arnaldo Carvalho de Melo
2020-08-04 13:34 ` [PATCH V2 00/12] perf intel-pt: Add support for decoding FUP/TIP only Adrian Hunter
2020-08-04 14:59   ` Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200710151104.15137-6-adrian.hunter@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=acme@kernel.org \
    --cc=ak@linux.intel.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.