intel/perf: improve dynamic loading config detection
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Wed, 5 Jun 2019 08:20:23 +0000 (11:20 +0300)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Wed, 5 Jun 2019 20:16:23 +0000 (20:16 +0000)
We're currently trying to detect dynamic loading config support by
trying to remove to test config (hard coded in the i915 driver) and
checking we get ENOENT.

This can fail if the test config was updated in Mesa but not yet in
i915.

A better way to do this is to pick an invalid ID and check for ENOENT.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/perf/gen_perf.c

index cd440f7690d3429bab5877877968f5e39e500c4a..648ec460afc7ae9fdb78776a68aa8497c3aaa8d9 100644 (file)
@@ -212,22 +212,10 @@ enumerate_sysfs_metrics(struct gen_perf *perf)
 static bool
 kernel_has_dynamic_config_support(struct gen_perf *perf, int fd)
 {
-   hash_table_foreach(perf->oa_metrics_table, entry) {
-      struct gen_perf_query_info *query = entry->data;
-      char config_path[280];
-      uint64_t config_id;
+   uint64_t invalid_config_id = UINT64_MAX;
 
-      snprintf(config_path, sizeof(config_path), "%s/metrics/%s/id",
-               perf->sysfs_dev_dir, query->guid);
-
-      /* Look for the test config, which we know we can't replace. */
-      if (read_file_uint64(config_path, &config_id) && config_id == 1) {
-         return perf->ioctl(fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG,
-                            &config_id) < 0 && errno == ENOENT;
-      }
-   }
-
-   return false;
+   return perf->ioctl(fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG,
+                      &invalid_config_id) < 0 && errno == ENOENT;
 }
 
 bool