Commit 16ddcfbf authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo

perf tests: Add valid callback for parse-events test

Adding optional 'valid' callback for events tests in parse-events
object, so we don't try to parse PMUs, which are not supported.

Following line is displayed for skipped test:

  running test 52 'intel_pt//u'... SKIP

Committer note:

Use named initializers in the struct evlist_test variable to avoid
breaking the build on centos:5, 6 and others with a similar gcc:

  cc1: warnings being treated as errors
  tests/parse-events.c: In function 'test_pmu_events':
  tests/parse-events.c:1817: error: missing initializer
  tests/parse-events.c:1817: error: (near initialization for 'e.type')
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Cc: Kim Phillips <kim.phillips@arm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Link: http://lkml.kernel.org/r/20180611093422.1005-2-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 933ccf20
...@@ -1309,6 +1309,11 @@ static int test__checkevent_config_cache(struct perf_evlist *evlist) ...@@ -1309,6 +1309,11 @@ static int test__checkevent_config_cache(struct perf_evlist *evlist)
return 0; return 0;
} }
static bool test__intel_pt_valid(void)
{
return !!perf_pmu__find("intel_pt");
}
static int test__intel_pt(struct perf_evlist *evlist) static int test__intel_pt(struct perf_evlist *evlist)
{ {
struct perf_evsel *evsel = perf_evlist__first(evlist); struct perf_evsel *evsel = perf_evlist__first(evlist);
...@@ -1375,6 +1380,7 @@ struct evlist_test { ...@@ -1375,6 +1380,7 @@ struct evlist_test {
const char *name; const char *name;
__u32 type; __u32 type;
const int id; const int id;
bool (*valid)(void);
int (*check)(struct perf_evlist *evlist); int (*check)(struct perf_evlist *evlist);
}; };
...@@ -1648,6 +1654,7 @@ static struct evlist_test test__events[] = { ...@@ -1648,6 +1654,7 @@ static struct evlist_test test__events[] = {
}, },
{ {
.name = "intel_pt//u", .name = "intel_pt//u",
.valid = test__intel_pt_valid,
.check = test__intel_pt, .check = test__intel_pt,
.id = 52, .id = 52,
}, },
...@@ -1690,6 +1697,11 @@ static int test_event(struct evlist_test *e) ...@@ -1690,6 +1697,11 @@ static int test_event(struct evlist_test *e)
struct perf_evlist *evlist; struct perf_evlist *evlist;
int ret; int ret;
if (e->valid && !e->valid()) {
pr_debug("... SKIP");
return 0;
}
evlist = perf_evlist__new(); evlist = perf_evlist__new();
if (evlist == NULL) if (evlist == NULL)
return -ENOMEM; return -ENOMEM;
...@@ -1716,10 +1728,11 @@ static int test_events(struct evlist_test *events, unsigned cnt) ...@@ -1716,10 +1728,11 @@ static int test_events(struct evlist_test *events, unsigned cnt)
for (i = 0; i < cnt; i++) { for (i = 0; i < cnt; i++) {
struct evlist_test *e = &events[i]; struct evlist_test *e = &events[i];
pr_debug("running test %d '%s'\n", e->id, e->name); pr_debug("running test %d '%s'", e->id, e->name);
ret1 = test_event(e); ret1 = test_event(e);
if (ret1) if (ret1)
ret2 = ret1; ret2 = ret1;
pr_debug("\n");
} }
return ret2; return ret2;
...@@ -1801,7 +1814,7 @@ static int test_pmu_events(void) ...@@ -1801,7 +1814,7 @@ static int test_pmu_events(void)
} }
while (!ret && (ent = readdir(dir))) { while (!ret && (ent = readdir(dir))) {
struct evlist_test e; struct evlist_test e = { .id = 0, };
char name[2 * NAME_MAX + 1 + 12 + 3]; char name[2 * NAME_MAX + 1 + 12 + 3];
/* Names containing . are special and cannot be used directly */ /* Names containing . are special and cannot be used directly */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment