diff options
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/intel/perf/gen_perf.c | 13 | ||||
-rw-r--r-- | src/intel/perf/gen_perf.h | 5 | ||||
-rw-r--r-- | src/intel/perf/gen_perf_query.c | 2 |
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); |