From f5008a48d39fc7df788ce15eac0154f428632022 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Wed, 7 Jul 2021 15:05:46 -0500 Subject: [PATCH] intel/perf: Use intel_i915_query_flags instead of hand-rolling it Reviewed-by: Paulo Zanoni Part-of: --- src/intel/common/intel_gem.h | 12 ++++++++++-- src/intel/perf/intel_perf.c | 32 ++++++++------------------------ 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/intel/common/intel_gem.h b/src/intel/common/intel_gem.h index 109b7be37d2..3ac3d7bf330 100644 --- a/src/intel/common/intel_gem.h +++ b/src/intel/common/intel_gem.h @@ -83,12 +83,13 @@ intel_ioctl(int fd, unsigned long request, void *arg) * it's better to have a common helper. */ static inline int -intel_i915_query(int fd, uint64_t query_id, void *buffer, - int32_t *buffer_len) +intel_i915_query_flags(int fd, uint64_t query_id, uint32_t flags, + void *buffer, int32_t *buffer_len) { struct drm_i915_query_item item = { .query_id = query_id, .length = *buffer_len, + .flags = flags, .data_ptr = (uintptr_t)buffer, }; @@ -108,6 +109,13 @@ intel_i915_query(int fd, uint64_t query_id, void *buffer, return 0; } +static inline int +intel_i915_query(int fd, uint64_t query_id, void *buffer, + int32_t *buffer_len) +{ + return intel_i915_query_flags(fd, query_id, 0, buffer, buffer_len); +} + /** * Query for the given data, allocating as needed * diff --git a/src/intel/perf/intel_perf.c b/src/intel/perf/intel_perf.c index f3c7726931e..7c5175ddcba 100644 --- a/src/intel/perf/intel_perf.c +++ b/src/intel/perf/intel_perf.c @@ -252,26 +252,13 @@ kernel_has_dynamic_config_support(struct intel_perf_config *perf, int fd) &invalid_config_id) < 0 && errno == ENOENT; } -static int -i915_query_items(struct intel_perf_config *perf, int fd, - struct drm_i915_query_item *items, uint32_t n_items) -{ - struct drm_i915_query q = { - .num_items = n_items, - .items_ptr = to_user_pointer(items), - }; - return intel_ioctl(fd, DRM_IOCTL_I915_QUERY, &q); -} - static bool i915_query_perf_config_supported(struct intel_perf_config *perf, int fd) { - struct drm_i915_query_item item = { - .query_id = DRM_I915_QUERY_PERF_CONFIG, - .flags = DRM_I915_QUERY_PERF_CONFIG_LIST, - }; - - return i915_query_items(perf, fd, &item, 1) == 0 && item.length > 0; + int32_t length = 0; + return !intel_i915_query_flags(fd, DRM_I915_QUERY_PERF_CONFIG, + DRM_I915_QUERY_PERF_CONFIG_LIST, + NULL, &length); } static bool @@ -283,18 +270,15 @@ i915_query_perf_config_data(struct intel_perf_config *perf, struct drm_i915_query_perf_config query; struct drm_i915_perf_oa_config config; } item_data; - struct drm_i915_query_item item = { - .query_id = DRM_I915_QUERY_PERF_CONFIG, - .flags = DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID, - .data_ptr = to_user_pointer(&item_data), - .length = sizeof(item_data), - }; memset(&item_data, 0, sizeof(item_data)); memcpy(item_data.query.uuid, guid, sizeof(item_data.query.uuid)); memcpy(&item_data.config, config, sizeof(item_data.config)); - if (!(i915_query_items(perf, fd, &item, 1) == 0 && item.length > 0)) + int32_t item_length = sizeof(item_data); + if (intel_i915_query_flags(fd, DRM_I915_QUERY_PERF_CONFIG, + DRM_I915_QUERY_PERF_CONFIG_DATA_FOR_UUID, + &item_data, &item_length)) return false; memcpy(config, &item_data.config, sizeof(item_data.config));