public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Steven Rostedt <srostedt@redhat.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, acme@redhat.com, hpa@zytor.com,
	mingo@redhat.com, peterz@infradead.org, fweisbec@gmail.com,
	srostedt@redhat.com, tglx@linutronix.de, mingo@elte.hu
Subject: [tip:perf/core] perf tools: Still continue on failed parsing of an event
Date: Thu, 15 Oct 2009 08:49:54 GMT	[thread overview]
Message-ID: <tip-07a4bdddcf2546ccfbfb3c782deab636c371edeb@git.kernel.org> (raw)
In-Reply-To: <20091014194359.190809589@goodmis.org>

Commit-ID:  07a4bdddcf2546ccfbfb3c782deab636c371edeb
Gitweb:     http://git.kernel.org/tip/07a4bdddcf2546ccfbfb3c782deab636c371edeb
Author:     Steven Rostedt <srostedt@redhat.com>
AuthorDate: Wed, 14 Oct 2009 15:43:39 -0400
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Thu, 15 Oct 2009 10:42:38 +0200

perf tools: Still continue on failed parsing of an event

Even though an event may fail to parse, we should not kill the
entire report. The trace should still be able to show what it
can.

If an event fails to parse, a warning is printed, and the output
continues.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <20091014194359.190809589@goodmis.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 tools/perf/util/trace-event-parse.c |   38 ++++++++++++++++++++++++----------
 tools/perf/util/trace-event.h       |   14 +++++++-----
 2 files changed, 35 insertions(+), 17 deletions(-)

diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c
index 0739b12..eda0a24 100644
--- a/tools/perf/util/trace-event-parse.c
+++ b/tools/perf/util/trace-event-parse.c
@@ -613,7 +613,7 @@ static enum event_type read_token_item(char **tok)
 static int test_type(enum event_type type, enum event_type expect)
 {
 	if (type != expect) {
-		die("Error: expected type %d but read %d",
+		warning("Error: expected type %d but read %d",
 		    expect, type);
 		return -1;
 	}
@@ -624,13 +624,13 @@ static int test_type_token(enum event_type type, char *token,
 		    enum event_type expect, const char *expect_tok)
 {
 	if (type != expect) {
-		die("Error: expected type %d but read %d",
+		warning("Error: expected type %d but read %d",
 		    expect, type);
 		return -1;
 	}
 
 	if (strcmp(token, expect_tok) != 0) {
-		die("Error: expected '%s' but read '%s'",
+		warning("Error: expected '%s' but read '%s'",
 		    expect_tok, token);
 		return -1;
 	}
@@ -668,7 +668,7 @@ static int __read_expected(enum event_type expect, const char *str, int newline_
 
 	free_token(token);
 
-	return 0;
+	return ret;
 }
 
 static int read_expected(enum event_type expect, const char *str)
@@ -1258,12 +1258,12 @@ process_op(struct event *event, struct print_arg *arg, char **tok)
 		type = process_array(event, arg, tok);
 
 	} else {
-		die("unknown op '%s'", token);
+		warning("unknown op '%s'", token);
+		event->flags |= EVENT_FL_FAILED;
 		/* the arg is now the left side */
 		return EVENT_NONE;
 	}
 
-
 	if (type == EVENT_OP) {
 		int prio;
 
@@ -2873,7 +2873,7 @@ void print_event(int cpu, void *data, int size, unsigned long long nsecs,
 
 	event = trace_find_event(type);
 	if (!event) {
-		printf("ug! no event found for type %d\n", type);
+		warning("ug! no event found for type %d", type);
 		return;
 	}
 
@@ -2887,6 +2887,12 @@ void print_event(int cpu, void *data, int size, unsigned long long nsecs,
 	       comm, pid,  cpu,
 	       secs, nsecs, event->name);
 
+	if (event->flags & EVENT_FL_FAILED) {
+		printf("EVENT '%s' FAILED TO PARSE\n",
+		       event->name);
+		return;
+	}
+
 	pretty_print(data, size, event);
 	printf("\n");
 }
@@ -3120,12 +3126,16 @@ int parse_event_file(char *buf, unsigned long size, char *sys)
 		die("failed to read event id");
 
 	ret = event_read_format(event);
-	if (ret < 0)
-		die("failed to read event format");
+	if (ret < 0) {
+		warning("failed to read event format for %s", event->name);
+		goto event_failed;
+	}
 
 	ret = event_read_print(event);
-	if (ret < 0)
-		die("failed to read event print fmt");
+	if (ret < 0) {
+		warning("failed to read event print fmt for %s", event->name);
+		goto event_failed;
+	}
 
 	event->system = strdup(sys);
 
@@ -3135,6 +3145,12 @@ int parse_event_file(char *buf, unsigned long size, char *sys)
 
 	add_event(event);
 	return 0;
+
+ event_failed:
+	event->flags |= EVENT_FL_FAILED;
+	/* still add it even if it failed */
+	add_event(event);
+	return -1;
 }
 
 void parse_set_info(int nr_cpus, int long_sz)
diff --git a/tools/perf/util/trace-event.h b/tools/perf/util/trace-event.h
index da77e07..29821ac 100644
--- a/tools/perf/util/trace-event.h
+++ b/tools/perf/util/trace-event.h
@@ -139,12 +139,14 @@ struct event {
 };
 
 enum {
-	EVENT_FL_ISFTRACE	= 1,
-	EVENT_FL_ISPRINT	= 2,
-	EVENT_FL_ISBPRINT	= 4,
-	EVENT_FL_ISFUNC		= 8,
-	EVENT_FL_ISFUNCENT	= 16,
-	EVENT_FL_ISFUNCRET	= 32,
+	EVENT_FL_ISFTRACE	= 0x01,
+	EVENT_FL_ISPRINT	= 0x02,
+	EVENT_FL_ISBPRINT	= 0x04,
+	EVENT_FL_ISFUNC		= 0x08,
+	EVENT_FL_ISFUNCENT	= 0x10,
+	EVENT_FL_ISFUNCRET	= 0x20,
+
+	EVENT_FL_FAILED		= 0x80000000
 };
 
 struct record {

  reply	other threads:[~2009-10-15  8:51 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-14 19:43 [PATCH 00/13] [GIT PULL] perf tools: updates to parsing events Steven Rostedt
2009-10-14 19:43 ` [PATCH 01/13] [PATCH 01/13] perf tools: handle print concatinations in event format file Steven Rostedt
2009-10-15  8:48   ` [tip:perf/core] perf tools: Handle print concatenations " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 02/13] [PATCH 02/13] perf tools: fix backslash processing on trace print formats Steven Rostedt
2009-10-15  8:48   ` [tip:perf/core] perf tools: Fix " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 03/13] [PATCH 03/13] perf tools: handle trace parsing of < and > Steven Rostedt
2009-10-15  8:48   ` [tip:perf/core] perf tools: Handle " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 04/13] [PATCH 04/13] perf tools: handle arrays in print fields for trace parsing Steven Rostedt
2009-10-15  8:48   ` [tip:perf/core] perf tools: Handle " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 05/13] [PATCH 05/13] perf tools: handle * as typecast in " Steven Rostedt
2009-10-15  8:49   ` [tip:perf/core] perf tools: Handle " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 06/13] [PATCH 06/13] perf tools: handle newlines in trace parsing better Steven Rostedt
2009-10-15  8:49   ` [tip:perf/core] perf tools: Handle " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 07/13] [PATCH 07/13] perf tools: handle the case with and without the "signed" trace field Steven Rostedt
2009-10-15  8:49   ` [tip:perf/core] perf tools: Handle " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 08/13] [PATCH 08/13] perf tools: still continue on failed parsing of an event Steven Rostedt
2009-10-15  8:49   ` tip-bot for Steven Rostedt [this message]
2009-10-14 19:43 ` [PATCH 09/13] [PATCH 09/13] perf tools: fix bprintk reading in trace output Steven Rostedt
2009-10-15  8:50   ` [tip:perf/core] perf tools: Fix " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 10/13] [PATCH 10/13] perf tools: handle both versions of ftrace output Steven Rostedt
2009-10-15  8:50   ` [tip:perf/core] perf tools: Handle " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 11/13] [PATCH 11/13] perf tools: add latency format to trace output Steven Rostedt
2009-10-15  8:50   ` [tip:perf/core] perf tools: Add " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 12/13] [PATCH 12/13] perf tools: handle - and + in parsing trace print format Steven Rostedt
2009-10-15  6:42   ` Ingo Molnar
2009-10-15  7:05     ` Peter Zijlstra
2009-10-15  9:20       ` Steven Rostedt
2009-10-15  8:50   ` [tip:perf/core] perf tools: Handle " tip-bot for Steven Rostedt
2009-10-14 19:43 ` [PATCH 13/13] [PATCH 13/13] perf tools: remove all char * typecasts and use const in prototype Steven Rostedt
2009-10-14 20:26   ` Frederic Weisbecker
2009-10-15  8:51   ` [tip:perf/core] perf tools: Remove " tip-bot for Steven Rostedt
2009-10-15  8:55 ` [PATCH 00/13] [GIT PULL] perf tools: updates to parsing events Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2009-10-20 23:19 [PATCH 0/2] [GIT PULL] perf tools: trace parse fix and debug compiling Steven Rostedt
2009-10-20 23:19 ` [PATCH 1/2] [PATCH 1/2] perf tools: add make DEBUG=1 to remove the -O6 cflag Steven Rostedt
2009-10-24  1:03   ` [tip:branch?] perf tools: Add 'make DEBUG=1' " tip-bot for Steven Rostedt
2009-10-20 23:19 ` [PATCH 2/2] [PATCH 2/2] perf tools: use strsep over strtok_r for parsing single line Steven Rostedt
2009-10-24  1:03   ` [tip:branch?] perf tools: Use strsep() over strtok_r() " tip-bot for Steven Rostedt

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=tip-07a4bdddcf2546ccfbfb3c782deab636c371edeb@git.kernel.org \
    --to=srostedt@redhat.com \
    --cc=acme@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox