From aad0e6f81049c098fd3922d61aa228e4bf791317 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Mon, 2 Mar 2020 14:00:55 +0200 Subject: [PATCH] intel/perf: store the probed i915-perf version MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Lionel Landwerlin Acked-by: Tapani Pälli Reviewed-by: Rafael Antognolli Reviewed-by: Mark Janes Tested-by: Marge Bot Part-of: --- src/intel/perf/gen_perf.c | 18 ++++++++++++++++++ src/intel/perf/gen_perf.h | 3 +++ src/intel/vulkan/anv_perf.c | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/intel/perf/gen_perf.c b/src/intel/perf/gen_perf.c index 2c5d541feed..1bf2424e108 100644 --- a/src/intel/perf/gen_perf.c +++ b/src/intel/perf/gen_perf.c @@ -542,6 +542,23 @@ load_pipeline_statistic_metrics(struct gen_perf_config *perf_cfg, query->data_size = sizeof(uint64_t) * query->n_counters; } +static int +i915_perf_version(int drm_fd) +{ + int tmp; + drm_i915_getparam_t gp = { + .param = I915_PARAM_PERF_REVISION, + .value = &tmp, + }; + + int ret = gen_ioctl(drm_fd, DRM_IOCTL_I915_GETPARAM, &gp); + + /* Return 0 if this getparam is not supported, the first version supported + * is 1. + */ + return ret < 0 ? 0 : tmp; +} + static bool load_oa_metrics(struct gen_perf_config *perf, int fd, const struct gen_device_info *devinfo) @@ -551,6 +568,7 @@ load_oa_metrics(struct gen_perf_config *perf, int fd, struct stat sb; perf->i915_query_supported = i915_query_perf_config_supported(perf, fd); + perf->i915_perf_version = i915_perf_version(fd); /* The existence of this sysctl parameter implies the kernel supports * the i915 perf interface. diff --git a/src/intel/perf/gen_perf.h b/src/intel/perf/gen_perf.h index facd5bb6a4c..4f0805f2b26 100644 --- a/src/intel/perf/gen_perf.h +++ b/src/intel/perf/gen_perf.h @@ -192,6 +192,9 @@ struct gen_perf_config { /* Whether i915 has DRM_I915_QUERY_PERF_CONFIG support. */ bool i915_query_supported; + /* Version of the i915-perf subsystem, refer to i915_drm.h. */ + int i915_perf_version; + struct gen_perf_query_info *queries; int n_queries; diff --git a/src/intel/vulkan/anv_perf.c b/src/intel/vulkan/anv_perf.c index 3d673bb7734..5c8fd5288b2 100644 --- a/src/intel/vulkan/anv_perf.c +++ b/src/intel/vulkan/anv_perf.c @@ -40,7 +40,7 @@ anv_get_perf(const struct gen_device_info *devinfo, int fd) /* We need DRM_I915_PERF_PROP_HOLD_PREEMPTION support, only available in * perf revision 2. */ - if (anv_gem_get_param(fd, I915_PARAM_PERF_REVISION) < 3) + if (perf->i915_perf_version < 3) goto err; return perf; -- 2.30.2