Lines Matching +full:event +full:- +full:name
1 // SPDX-License-Identifier: GPL-2.0
3 #include "parse-events.h"
11 #include "../pmu-events/pmu-events.h"
14 #include "util/parse-events.h"
18 /* used for matching against events from generated pmu-events.c */
19 struct pmu_event event; member
21 /* used for matching against event aliases */
42 .event = {
43 .name = "bp_l1_btb_correct",
44 .event = "event=0x8a",
48 .alias_str = "event=0x8a",
53 .event = {
54 .name = "bp_l2_btb_correct",
55 .event = "event=0x8b",
59 .alias_str = "event=0x8b",
64 .event = {
65 .name = "segment_reg_loads.any",
66 .event = "umask=0x80,period=200000,event=0x6",
70 .alias_str = "umask=0x80,(null)=0x30d40,event=0x6",
75 .event = {
76 .name = "dispatch_blocked.any",
77 .event = "umask=0x20,period=200000,event=0x9",
78 .desc = "Memory cluster signals to block micro-op dispatch for any reason",
81 .alias_str = "umask=0x20,(null)=0x30d40,event=0x9",
82 .alias_long_desc = "Memory cluster signals to block micro-op dispatch for any reason",
86 .event = {
87 .name = "eist_trans",
88 .event = "umask=0x0,period=200000,event=0x3a",
92 .alias_str = "umask=0,(null)=0x30d40,event=0x3a",
97 .event = {
98 .name = "l3_cache_rd",
99 .event = "event=0x40",
104 .alias_str = "event=0x40",
119 .event = {
120 .name = "uncore_hisi_ddrc.flux_wcmd",
121 .event = "event=0x2",
127 .alias_str = "event=0x2",
133 .event = {
134 .name = "unc_cbo_xsnp_response.miss_eviction",
135 .event = "umask=0x81,event=0x22",
136 ….desc = "Unit: uncore_cbox A cross-core snoop resulted from L3 Eviction which misses in some proce…
138 .long_desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor core",
141 .alias_str = "umask=0x81,event=0x22",
142 ….alias_long_desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor co…
147 .event = {
148 .name = "uncore_hisi_l3c.rd_hit_cpipe",
149 .event = "event=0x2",
155 .alias_str = "event=0x7",
161 .event = {
162 .name = "uncore_imc_free_running.cache_miss",
163 .event = "event=0x12",
169 .alias_str = "event=0x12",
175 .event = {
176 .name = "uncore_imc.cache_hits",
177 .event = "event=0x34",
183 .alias_str = "event=0x34",
198 .event = {
199 .name = "sys_ddr_pmu.write_cycles",
200 .event = "event=0x2b",
201 .desc = "ddr write-cycles event. Unit: uncore_sys_ddr_pmu ",
206 .alias_str = "event=0x2b",
207 .alias_long_desc = "ddr write-cycles event. Unit: uncore_sys_ddr_pmu ",
234 for (map = &pmu_events_map[0]; map->cpuid; map++) { in __test_pmu_get_events_map()
235 if (!strcmp(map->cpuid, "testcpu")) in __test_pmu_get_events_map()
248 for ( ; tables->name; tables++) { in __test_pmu_get_sys_events_table()
249 if (!strcmp("pme_test_soc_sys", tables->name)) in __test_pmu_get_sys_events_table()
250 return tables->table; in __test_pmu_get_sys_events_table()
258 if (!is_same(e1->desc, e2->desc)) { in compare_pmu_events()
259 pr_debug2("testing event e1 %s: mismatched desc, %s vs %s\n", in compare_pmu_events()
260 e1->name, e1->desc, e2->desc); in compare_pmu_events()
261 return -1; in compare_pmu_events()
264 if (!is_same(e1->topic, e2->topic)) { in compare_pmu_events()
265 pr_debug2("testing event e1 %s: mismatched topic, %s vs %s\n", in compare_pmu_events()
266 e1->name, e1->topic, e2->topic); in compare_pmu_events()
267 return -1; in compare_pmu_events()
270 if (!is_same(e1->long_desc, e2->long_desc)) { in compare_pmu_events()
271 pr_debug2("testing event e1 %s: mismatched long_desc, %s vs %s\n", in compare_pmu_events()
272 e1->name, e1->long_desc, e2->long_desc); in compare_pmu_events()
273 return -1; in compare_pmu_events()
276 if (!is_same(e1->unit, e2->unit)) { in compare_pmu_events()
277 pr_debug2("testing event e1 %s: mismatched unit, %s vs %s\n", in compare_pmu_events()
278 e1->name, e1->unit, e2->unit); in compare_pmu_events()
279 return -1; in compare_pmu_events()
282 if (!is_same(e1->perpkg, e2->perpkg)) { in compare_pmu_events()
283 pr_debug2("testing event e1 %s: mismatched perpkg, %s vs %s\n", in compare_pmu_events()
284 e1->name, e1->perpkg, e2->perpkg); in compare_pmu_events()
285 return -1; in compare_pmu_events()
288 if (!is_same(e1->metric_expr, e2->metric_expr)) { in compare_pmu_events()
289 pr_debug2("testing event e1 %s: mismatched metric_expr, %s vs %s\n", in compare_pmu_events()
290 e1->name, e1->metric_expr, e2->metric_expr); in compare_pmu_events()
291 return -1; in compare_pmu_events()
294 if (!is_same(e1->metric_name, e2->metric_name)) { in compare_pmu_events()
295 pr_debug2("testing event e1 %s: mismatched metric_name, %s vs %s\n", in compare_pmu_events()
296 e1->name, e1->metric_name, e2->metric_name); in compare_pmu_events()
297 return -1; in compare_pmu_events()
300 if (!is_same(e1->deprecated, e2->deprecated)) { in compare_pmu_events()
301 pr_debug2("testing event e1 %s: mismatched deprecated, %s vs %s\n", in compare_pmu_events()
302 e1->name, e1->deprecated, e2->deprecated); in compare_pmu_events()
303 return -1; in compare_pmu_events()
306 if (!is_same(e1->pmu, e2->pmu)) { in compare_pmu_events()
307 pr_debug2("testing event e1 %s: mismatched pmu string, %s vs %s\n", in compare_pmu_events()
308 e1->name, e1->pmu, e2->pmu); in compare_pmu_events()
309 return -1; in compare_pmu_events()
312 if (!is_same(e1->compat, e2->compat)) { in compare_pmu_events()
313 pr_debug2("testing event e1 %s: mismatched compat string, %s vs %s\n", in compare_pmu_events()
314 e1->name, e1->compat, e2->compat); in compare_pmu_events()
315 return -1; in compare_pmu_events()
325 struct pmu_event const *event = &test_event->event; in compare_alias_to_test_event() local
328 if (!is_same(alias->name, event->name)) { in compare_alias_to_test_event()
329 pr_debug("testing aliases PMU %s: mismatched name, %s vs %s\n", in compare_alias_to_test_event()
330 pmu_name, alias->name, event->name); in compare_alias_to_test_event()
331 return -1; in compare_alias_to_test_event()
334 if (!is_same(alias->desc, event->desc)) { in compare_alias_to_test_event()
336 pmu_name, alias->desc, event->desc); in compare_alias_to_test_event()
337 return -1; in compare_alias_to_test_event()
340 if (!is_same(alias->long_desc, test_event->alias_long_desc)) { in compare_alias_to_test_event()
342 pmu_name, alias->long_desc, in compare_alias_to_test_event()
343 test_event->alias_long_desc); in compare_alias_to_test_event()
344 return -1; in compare_alias_to_test_event()
347 if (!is_same(alias->topic, event->topic)) { in compare_alias_to_test_event()
349 pmu_name, alias->topic, event->topic); in compare_alias_to_test_event()
350 return -1; in compare_alias_to_test_event()
353 if (!is_same(alias->str, test_event->alias_str)) { in compare_alias_to_test_event()
355 pmu_name, alias->str, test_event->alias_str); in compare_alias_to_test_event()
356 return -1; in compare_alias_to_test_event()
359 if (!is_same(alias->long_desc, test_event->alias_long_desc)) { in compare_alias_to_test_event()
361 pmu_name, alias->str, test_event->alias_long_desc); in compare_alias_to_test_event()
362 return -1; in compare_alias_to_test_event()
366 if (!is_same(alias->pmu_name, test_event->event.pmu)) { in compare_alias_to_test_event()
368 pmu_name, alias->pmu_name, test_event->event.pmu); in compare_alias_to_test_event()
369 return -1; in compare_alias_to_test_event()
375 /* Verify generated events from pmu-events.c are as expected */
386 ARRAY_SIZE(sys_events) - 3; in test_pmu_event_table()
389 return -1; in test_pmu_event_table()
391 for (table = map->table; table->name; table++) { in test_pmu_event_table()
395 if (table->pmu) in test_pmu_event_table()
402 struct pmu_event const *event = &test_event->event; in test_pmu_event_table() local
404 if (strcmp(table->name, event->name)) in test_pmu_event_table()
409 if (compare_pmu_events(table, event)) in test_pmu_event_table()
410 return -1; in test_pmu_event_table()
412 pr_debug("testing event table %s: pass\n", table->name); in test_pmu_event_table()
416 pr_err("testing event table: could not find event %s\n", in test_pmu_event_table()
417 table->name); in test_pmu_event_table()
418 return -1; in test_pmu_event_table()
422 for (table = sys_event_tables; table->name; table++) { in test_pmu_event_table()
430 struct pmu_event const *event = &test_event->event; in test_pmu_event_table() local
432 if (strcmp(table->name, event->name)) in test_pmu_event_table()
437 if (compare_pmu_events(table, event)) in test_pmu_event_table()
438 return -1; in test_pmu_event_table()
440 pr_debug("testing sys event table %s: pass\n", table->name); in test_pmu_event_table()
443 pr_debug("testing event table: could not find event %s\n", in test_pmu_event_table()
444 table->name); in test_pmu_event_table()
445 return -1; in test_pmu_event_table()
450 pr_err("testing event table: found %d, but expected %d\n", in test_pmu_event_table()
452 return -1; in test_pmu_event_table()
463 if (!strcmp(test_event, alias->name)) in find_alias()
480 return -1; in __test_core_pmu_event_aliases()
486 return -1; in __test_core_pmu_event_aliases()
488 pmu->name = pmu_name; in __test_core_pmu_event_aliases()
494 struct pmu_event const *event = &test_event->event; in __test_core_pmu_event_aliases() local
495 struct perf_pmu_alias *alias = find_alias(event->name, &aliases); in __test_core_pmu_event_aliases()
498 pr_debug("testing aliases core PMU %s: no alias, alias_table->name=%s\n", in __test_core_pmu_event_aliases()
499 pmu_name, event->name); in __test_core_pmu_event_aliases()
500 res = -1; in __test_core_pmu_event_aliases()
505 res = -1; in __test_core_pmu_event_aliases()
510 pr_debug2("testing aliases core PMU %s: matched event %s\n", in __test_core_pmu_event_aliases()
511 pmu_name, alias->name); in __test_core_pmu_event_aliases()
515 list_del(&a->list); in __test_core_pmu_event_aliases()
526 struct perf_pmu *pmu = &test_pmu->pmu; in __test_uncore_pmu_event_aliases()
527 const char *pmu_name = pmu->name; in __test_uncore_pmu_event_aliases()
535 return -1; in __test_uncore_pmu_event_aliases()
544 for (table = &test_pmu->aliases[0]; *table; table++) in __test_uncore_pmu_event_aliases()
550 res = -1; in __test_uncore_pmu_event_aliases()
557 for (table = &test_pmu->aliases[0]; *table; table++) { in __test_uncore_pmu_event_aliases()
559 struct pmu_event const *event = &test_event->event; in __test_uncore_pmu_event_aliases() local
561 if (!strcmp(event->name, alias->name)) { in __test_uncore_pmu_event_aliases()
574 pmu_name, alias->name); in __test_uncore_pmu_event_aliases()
575 res = -1; in __test_uncore_pmu_event_aliases()
583 res = -1; in __test_uncore_pmu_event_aliases()
588 list_del(&a->list); in __test_uncore_pmu_event_aliases()
597 .name = (char *)"hisi_sccl1_ddrc2",
606 .name = (char *)"uncore_cbox_0",
615 .name = (char *)"hisi_sccl3_l3c7",
624 .name = (char *)"uncore_imc_free_running_0",
633 .name = (char *)"uncore_imc_0",
642 .name = (char *)"uncore_sys_ddr_pmu0",
661 if (!is_pmu_core(pmu->name)) in test_aliases()
664 if (list_empty(&pmu->format)) { in test_aliases()
665 pr_debug2("skipping testing core PMU %s\n", pmu->name); in test_aliases()
669 if (__test_core_pmu_event_aliases(pmu->name, &count)) { in test_aliases()
670 pr_debug("testing core PMU %s aliases: failed\n", pmu->name); in test_aliases()
671 return -1; in test_aliases()
676 pmu->name); in test_aliases()
677 return -1; in test_aliases()
680 pr_debug("testing core PMU %s aliases: pass\n", pmu->name); in test_aliases()
716 return -ENOMEM; in check_parse_id()
728 pr_warning("Parse event failed metric '%s' id '%s' expr '%s'\n", in check_parse_cpu()
729 pe->metric_name, id, pe->metric_expr); in check_parse_cpu()
733 …pr_debug3("Parse event failed, but for an event that may not be supported by this CPU.\nid '%s' me… in check_parse_cpu()
734 id, pe->metric_name, pe->metric_expr); in check_parse_cpu()
761 msg, map->cpuid, map->version, map->type); in expr_failure()
762 pr_debug("On metric %s\n", pe->metric_name); in expr_failure()
763 pr_debug("On expression %s\n", pe->metric_expr); in expr_failure()
784 hashmap__for_each_entry_safe((&pctx->ids), cur, cur_tmp, bkt) { in resolve_metric_simple()
788 pe = metricgroup__find_metric(cur->key, map); in resolve_metric_simple()
792 if (!strcmp(metric_name, (char *)cur->key)) { in resolve_metric_simple()
794 rc = -1; in resolve_metric_simple()
801 expr__del_id(pctx, cur->key); in resolve_metric_simple()
805 rc = -ENOMEM; in resolve_metric_simple()
809 ref = &metric->metric_ref; in resolve_metric_simple()
810 ref->metric_name = pe->metric_name; in resolve_metric_simple()
811 ref->metric_expr = pe->metric_expr; in resolve_metric_simple()
812 list_add_tail(&metric->list, compound_list); in resolve_metric_simple()
814 rc = expr__find_other(pe->metric_expr, NULL, pctx, 0); in resolve_metric_simple()
844 if (!map->table) in test_parsing()
853 pe = &map->table[j++]; in test_parsing()
854 if (!pe->name && !pe->metric_group && !pe->metric_name) in test_parsing()
856 if (!pe->metric_expr) in test_parsing()
859 if (expr__find_other(pe->metric_expr, NULL, &ctx, 0) in test_parsing()
867 pe->metric_name)) { in test_parsing()
880 expr__add_id_val(&ctx, strdup(cur->key), k++); in test_parsing()
883 if (check_parse_cpu(cur->key, map == cpus_map, in test_parsing()
889 expr__add_ref(&ctx, &metric->metric_ref); in test_parsing()
893 if (expr__parse(&result, &ctx, pe->metric_expr, 0)) { in test_parsing()
911 { "imx8_ddr0@read\\-cycles@ * 4 * 4", },
912 { "imx8_ddr0@axid\\-read\\,axi_mask\\=0xffff\\,axi_id\\=0x0000@ * 4", },
913 { "(cstate_pkg@c2\\-residency@ / msr@tsc@) * 100", },
914 { "(imx8_ddr0@read\\-cycles@ + imx8_ddr0@write\\-cycles@)", },
922 int ret = -1; in metric_parse_fake()
931 return -1; in metric_parse_fake()
941 expr__add_id_val(&ctx, strdup(cur->key), i++); in metric_parse_fake()
944 if (check_parse_fake(cur->key)) { in metric_parse_fake()
981 if (!map->table) in test_parsing_fake()
985 pe = &map->table[j++]; in test_parsing_fake()
986 if (!pe->name && !pe->metric_group && !pe->metric_name) in test_parsing_fake()
988 if (!pe->metric_expr) in test_parsing_fake()
990 err = metric_parse_fake(pe->metric_expr); in test_parsing_fake()
1005 .desc = "PMU event table sanity",
1009 .desc = "PMU event map aliases",
1013 .desc = "Parsing of PMU event table metrics",
1017 .desc = "Parsing of PMU event table metrics with fake PMUs",