Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 933ccf20
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -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 */