|
@@ -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 */
|