[igt-dev] [PATCH i-g-t] lib/igt_perf: Find active perf CPU

Tvrtko Ursulin tursulin at ursulin.net
Wed Feb 21 10:29:57 UTC 2018


From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Instead of assuming PMU runs on CPU0, try all possible CPUs if that is not
the case. This makes the callers handle fallout from broken tests better,
as well as sysadmin interventions where callers are not tests.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
Cc: Chris Wilson <chris at chris-wilson.co.uk>
---
 lib/igt_perf.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/lib/igt_perf.c b/lib/igt_perf.c
index 0221461e918f..99d82ea51c9b 100644
--- a/lib/igt_perf.c
+++ b/lib/igt_perf.c
@@ -4,6 +4,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#include <sys/sysinfo.h>
 
 #include "igt_perf.h"
 
@@ -31,6 +32,8 @@ static int
 _perf_open(uint64_t type, uint64_t config, int group, uint64_t format)
 {
 	struct perf_event_attr attr = { };
+	int nr_cpus = get_nprocs_conf();
+	int cpu = 0, ret;
 
 	attr.type = type;
 	if (attr.type == 0)
@@ -42,7 +45,11 @@ _perf_open(uint64_t type, uint64_t config, int group, uint64_t format)
 	attr.read_format = format;
 	attr.config = config;
 
-	return perf_event_open(&attr, -1, 0, group, 0);
+	do {
+		ret = perf_event_open(&attr, -1, cpu++, group, 0);
+	} while ((ret < 0 && errno == EINVAL) && (cpu < nr_cpus));
+
+	return ret;
 }
 
 int perf_i915_open(uint64_t config)
-- 
2.14.1



More information about the igt-dev mailing list