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: Jiri 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.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
933ccf2002
commit
16ddcfbf7f
|
@ -1309,6 +1309,11 @@ static int test__checkevent_config_cache(struct perf_evlist *evlist)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool test__intel_pt_valid(void)
|
||||
{
|
||||
return !!perf_pmu__find("intel_pt");
|
||||
}
|
||||
|
||||
static int test__intel_pt(struct perf_evlist *evlist)
|
||||
{
|
||||
struct perf_evsel *evsel = perf_evlist__first(evlist);
|
||||
|
@ -1375,6 +1380,7 @@ struct evlist_test {
|
|||
const char *name;
|
||||
__u32 type;
|
||||
const int id;
|
||||
bool (*valid)(void);
|
||||
int (*check)(struct perf_evlist *evlist);
|
||||
};
|
||||
|
||||
|
@ -1648,6 +1654,7 @@ static struct evlist_test test__events[] = {
|
|||
},
|
||||
{
|
||||
.name = "intel_pt//u",
|
||||
.valid = test__intel_pt_valid,
|
||||
.check = test__intel_pt,
|
||||
.id = 52,
|
||||
},
|
||||
|
@ -1690,6 +1697,11 @@ static int test_event(struct evlist_test *e)
|
|||
struct perf_evlist *evlist;
|
||||
int ret;
|
||||
|
||||
if (e->valid && !e->valid()) {
|
||||
pr_debug("... SKIP");
|
||||
return 0;
|
||||
}
|
||||
|
||||
evlist = perf_evlist__new();
|
||||
if (evlist == NULL)
|
||||
return -ENOMEM;
|
||||
|
@ -1716,10 +1728,11 @@ static int test_events(struct evlist_test *events, unsigned cnt)
|
|||
for (i = 0; i < cnt; 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);
|
||||
if (ret1)
|
||||
ret2 = ret1;
|
||||
pr_debug("\n");
|
||||
}
|
||||
|
||||
return ret2;
|
||||
|
@ -1801,7 +1814,7 @@ static int test_pmu_events(void)
|
|||
}
|
||||
|
||||
while (!ret && (ent = readdir(dir))) {
|
||||
struct evlist_test e;
|
||||
struct evlist_test e = { .id = 0, };
|
||||
char name[2 * NAME_MAX + 1 + 12 + 3];
|
||||
|
||||
/* Names containing . are special and cannot be used directly */
|
||||
|
|
Loading…
Reference in a new issue