From 47fef4731e0f0f77b35a09e091b11c56669feb1b Mon Sep 17 00:00:00 2001 From: Tvrtko Ursulin Date: Wed, 13 Sep 2017 18:08:02 +0100 Subject: intel-gpu-overlay: Consolidate perf PMU access to library Various tool modules implement their owm PMU open wrapper which can be replaced by calling the library one. v2: * Remove extra newline. (Chris Wilson) * Commit msg. Signed-off-by: Tvrtko Ursulin Reviewed-by: Chris Wilson --- overlay/gem-interrupts.c | 16 +--------------- overlay/gpu-freq.c | 22 ++-------------------- overlay/gpu-top.c | 32 ++++++++------------------------ overlay/power.c | 17 +---------------- overlay/rc6.c | 24 +++--------------------- 5 files changed, 15 insertions(+), 96 deletions(-) (limited to 'overlay') diff --git a/overlay/gem-interrupts.c b/overlay/gem-interrupts.c index 7ba54fcd..a84aef03 100644 --- a/overlay/gem-interrupts.c +++ b/overlay/gem-interrupts.c @@ -36,20 +36,6 @@ #include "gem-interrupts.h" #include "debugfs.h" -static int perf_open(void) -{ - struct perf_event_attr attr; - - memset(&attr, 0, sizeof (attr)); - - attr.type = i915_type_id(); - if (attr.type == 0) - return -ENOENT; - attr.config = I915_PERF_INTERRUPTS; - - return perf_event_open(&attr, -1, 0, -1, 0); -} - static long long debugfs_read(void) { char buf[8192], *b; @@ -127,7 +113,7 @@ int gem_interrupts_init(struct gem_interrupts *irqs) { memset(irqs, 0, sizeof(*irqs)); - irqs->fd = perf_open(); + irqs->fd = perf_i915_open(I915_PERF_INTERRUPTS); if (irqs->fd < 0 && interrupts_read() < 0) irqs->error = ENODEV; diff --git a/overlay/gpu-freq.c b/overlay/gpu-freq.c index 7f29b1aa..76c5ed9a 100644 --- a/overlay/gpu-freq.c +++ b/overlay/gpu-freq.c @@ -33,30 +33,12 @@ #include "gpu-freq.h" #include "debugfs.h" -static int perf_i915_open(int config, int group) -{ - struct perf_event_attr attr; - - memset(&attr, 0, sizeof (attr)); - - attr.type = i915_type_id(); - if (attr.type == 0) - return -ENOENT; - attr.config = config; - - attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED; - if (group == -1) - attr.read_format |= PERF_FORMAT_GROUP; - - return perf_event_open(&attr, -1, 0, group, 0); -} - static int perf_open(void) { int fd; - fd = perf_i915_open(I915_PERF_ACTUAL_FREQUENCY, -1); - if (perf_i915_open(I915_PERF_REQUESTED_FREQUENCY, fd) < 0) { + fd = perf_i915_open_group(I915_PERF_ACTUAL_FREQUENCY, -1); + if (perf_i915_open_group(I915_PERF_REQUESTED_FREQUENCY, fd) < 0) { close(fd); fd = -1; } diff --git a/overlay/gpu-top.c b/overlay/gpu-top.c index 06f489df..812f47d5 100644 --- a/overlay/gpu-top.c +++ b/overlay/gpu-top.c @@ -48,24 +48,6 @@ #define I915_PERF_RING_WAIT(n) (__I915_PERF_RING(n) + 1) #define I915_PERF_RING_SEMA(n) (__I915_PERF_RING(n) + 2) -static int perf_i915_open(int config, int group) -{ - struct perf_event_attr attr; - - memset(&attr, 0, sizeof (attr)); - - attr.type = i915_type_id(); - if (attr.type == 0) - return -ENOENT; - attr.config = config; - - attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED; - if (group == -1) - attr.read_format |= PERF_FORMAT_GROUP; - - return perf_event_open(&attr, -1, 0, group, 0); -} - static int perf_init(struct gpu_top *gt) { const char *names[] = { @@ -77,27 +59,29 @@ static int perf_init(struct gpu_top *gt) }; int n; - gt->fd = perf_i915_open(I915_PERF_RING_BUSY(0), -1); + gt->fd = perf_i915_open_group(I915_PERF_RING_BUSY(0), -1); if (gt->fd < 0) return -1; - if (perf_i915_open(I915_PERF_RING_WAIT(0), gt->fd) >= 0) + if (perf_i915_open_group(I915_PERF_RING_WAIT(0), gt->fd) >= 0) gt->have_wait = 1; - if (perf_i915_open(I915_PERF_RING_SEMA(0), gt->fd) >= 0) + if (perf_i915_open_group(I915_PERF_RING_SEMA(0), gt->fd) >= 0) gt->have_sema = 1; gt->ring[0].name = names[0]; gt->num_rings = 1; for (n = 1; names[n]; n++) { - if (perf_i915_open(I915_PERF_RING_BUSY(n), gt->fd) >= 0) { + if (perf_i915_open_group(I915_PERF_RING_BUSY(n), gt->fd) >= 0) { if (gt->have_wait && - perf_i915_open(I915_PERF_RING_WAIT(n), gt->fd) < 0) + perf_i915_open_group(I915_PERF_RING_WAIT(n), + gt->fd) < 0) return -1; if (gt->have_sema && - perf_i915_open(I915_PERF_RING_SEMA(n), gt->fd) < 0) + perf_i915_open_group(I915_PERF_RING_SEMA(n), + gt->fd) < 0) return -1; gt->ring[gt->num_rings++].name = names[n]; diff --git a/overlay/power.c b/overlay/power.c index 84d860ca..dd4aec6b 100644 --- a/overlay/power.c +++ b/overlay/power.c @@ -38,21 +38,6 @@ /* XXX Is this exposed through RAPL? */ -static int perf_open(void) -{ - struct perf_event_attr attr; - - memset(&attr, 0, sizeof (attr)); - - attr.type = i915_type_id(); - if (attr.type == 0) - return -1; - attr.config = I915_PERF_ENERGY; - - attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED; - return perf_event_open(&attr, -1, 0, -1, 0); -} - int power_init(struct power *power) { char buf[4096]; @@ -60,7 +45,7 @@ int power_init(struct power *power) memset(power, 0, sizeof(*power)); - power->fd = perf_open(); + power->fd = perf_i915_open(I915_PERF_ENERGY); if (power->fd != -1) return 0; diff --git a/overlay/rc6.c b/overlay/rc6.c index 3175bb22..46c975a5 100644 --- a/overlay/rc6.c +++ b/overlay/rc6.c @@ -35,24 +35,6 @@ #include "rc6.h" -static int perf_i915_open(int config, int group) -{ - struct perf_event_attr attr; - - memset(&attr, 0, sizeof (attr)); - - attr.type = i915_type_id(); - if (attr.type == 0) - return -ENOENT; - attr.config = config; - - attr.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED; - if (group == -1) - attr.read_format |= PERF_FORMAT_GROUP; - - return perf_event_open(&attr, -1, 0, group, 0); -} - #define RC6 (1<<0) #define RC6p (1<<1) #define RC6pp (1<<2) @@ -61,15 +43,15 @@ static int perf_open(unsigned *flags) { int fd; - fd = perf_i915_open(I915_PERF_RC6_RESIDENCY, -1); + fd = perf_i915_open_group(I915_PERF_RC6_RESIDENCY, -1); if (fd < 0) return -1; *flags |= RC6; - if (perf_i915_open(I915_PERF_RC6p_RESIDENCY, fd) >= 0) + if (perf_i915_open_group(I915_PERF_RC6p_RESIDENCY, fd) >= 0) *flags |= RC6p; - if (perf_i915_open(I915_PERF_RC6pp_RESIDENCY, fd) >= 0) + if (perf_i915_open_group(I915_PERF_RC6pp_RESIDENCY, fd) >= 0) *flags |= RC6pp; return fd; -- cgit v1.2.3