summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.pick_status.json2
-rw-r--r--src/intel/perf/gen_perf.c13
-rw-r--r--src/intel/perf/gen_perf.h5
-rw-r--r--src/intel/perf/gen_perf_query.c2
4 files changed, 20 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json
index bba637c6d6e..281098e0920 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -3406,7 +3406,7 @@
"description": "intel/perf: fix raw query kernel metric selection",
"nominated": true,
"nomination_type": 0,
- "resolution": 0,
+ "resolution": 1,
"master_sha": null,
"because_sha": null
},
diff --git a/src/intel/perf/gen_perf.c b/src/intel/perf/gen_perf.c
index 189f71f6575..77b7f4d8188 100644
--- a/src/intel/perf/gen_perf.c
+++ b/src/intel/perf/gen_perf.c
@@ -621,6 +621,19 @@ load_oa_metrics(struct gen_perf_config *perf, int fd,
else
enumerate_sysfs_metrics(perf);
+ /* Select a fallback OA metric. Look for the TestOa metric or use the last
+ * one if no present (on HSW).
+ */
+ for (int i = 0; i < perf->n_queries; i++) {
+ if (perf->queries[i].symbol_name &&
+ strcmp(perf->queries[i].symbol_name, "TestOa") == 0) {
+ perf->fallback_raw_oa_metric = perf->queries[i].oa_metrics_set_id;
+ break;
+ }
+ }
+ if (perf->fallback_raw_oa_metric == 0)
+ perf->fallback_raw_oa_metric = perf->queries[perf->n_queries - 1].oa_metrics_set_id;
+
return true;
}
diff --git a/src/intel/perf/gen_perf.h b/src/intel/perf/gen_perf.h
index 1421d2b3a08..05029bc912e 100644
--- a/src/intel/perf/gen_perf.h
+++ b/src/intel/perf/gen_perf.h
@@ -228,6 +228,11 @@ struct gen_perf_config {
*/
struct hash_table *oa_metrics_table;
+ /* When MDAPI hasn't configured the metric we need to use by the time the
+ * query begins, this OA metric is used as a fallback.
+ */
+ uint64_t fallback_raw_oa_metric;
+
/* Location of the device's sysfs entry. */
char sysfs_dev_dir[256];
diff --git a/src/intel/perf/gen_perf_query.c b/src/intel/perf/gen_perf_query.c
index b9744913b16..fb6e5d33efb 100644
--- a/src/intel/perf/gen_perf_query.c
+++ b/src/intel/perf/gen_perf_query.c
@@ -423,7 +423,7 @@ get_metric_id(struct gen_perf_config *perf,
if (!gen_perf_load_metric_id(perf, query->guid,
&raw_query->oa_metrics_set_id)) {
DBG("Unable to read query guid=%s ID, falling back to test config\n", query->guid);
- raw_query->oa_metrics_set_id = 1ULL;
+ raw_query->oa_metrics_set_id = perf->fallback_raw_oa_metric;
} else {
DBG("Raw query '%s'guid=%s loaded ID: %"PRIu64"\n",
query->name, query->guid, query->oa_metrics_set_id);