Skip to content

Commit

Permalink
perf tools: Still continue on failed parsing of an event
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Steven Rostedt authored and Ingo Molnar committed Oct 15, 2009
1 parent 13999e5 commit 07a4bdd
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 17 deletions.
38 changes: 27 additions & 11 deletions tools/perf/util/trace-event-parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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;
}
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;
}

Expand All @@ -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");
}
Expand Down Expand Up @@ -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);

Expand All @@ -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)
Expand Down
14 changes: 8 additions & 6 deletions tools/perf/util/trace-event.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 07a4bdd

Please sign in to comment.