Lines Matching +full:ddr +full:- +full:pmu
1 // SPDX-License-Identifier: GPL-2.0
3 #include "parse-events.h"
4 #include "pmu.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 */
32 /* PMU which we should match against */
37 struct perf_pmu pmu; member
78 .desc = "Memory cluster signals to block micro-op dispatch for any reason",
82 .alias_long_desc = "Memory cluster signals to block micro-op dispatch for any reason",
125 .pmu = "hisi_sccl,ddrc",
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",
139 .pmu = "uncore_cbox",
142 ….alias_long_desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor co…
153 .pmu = "hisi_sccl,l3c",
167 .pmu = "uncore_imc_free_running",
181 .pmu = "uncore_imc",
201 .desc = "ddr write-cycles event. Unit: uncore_sys_ddr_pmu ",
203 .pmu = "uncore_sys_ddr_pmu",
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
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()
335 pr_debug("testing aliases PMU %s: mismatched desc, %s vs %s\n", 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()
341 pr_debug("testing aliases PMU %s: mismatched long_desc, %s vs %s\n", 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()
348 pr_debug("testing aliases PMU %s: mismatched topic, %s vs %s\n", 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()
354 pr_debug("testing aliases PMU %s: mismatched str, %s vs %s\n", 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()
360 pr_debug("testing aliases PMU %s: mismatched long desc, %s vs %s\n", 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()
367 pr_debug("testing aliases PMU %s: mismatched pmu_name, %s vs %s\n", 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()
404 if (strcmp(table->name, event->name)) 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()
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()
432 if (strcmp(table->name, event->name)) 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()
444 table->name); in test_pmu_event_table()
445 return -1; in test_pmu_event_table()
452 return -1; in test_pmu_event_table()
463 if (!strcmp(test_event, alias->name)) in find_alias()
473 struct perf_pmu *pmu; in __test_core_pmu_event_aliases() local
480 return -1; in __test_core_pmu_event_aliases()
484 pmu = zalloc(sizeof(*pmu)); in __test_core_pmu_event_aliases()
485 if (!pmu) 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()
490 pmu_add_cpu_aliases_map(&aliases, pmu, map); in __test_core_pmu_event_aliases()
494 struct pmu_event const *event = &test_event->event; in __test_core_pmu_event_aliases()
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()
518 free(pmu); in __test_core_pmu_event_aliases()
526 struct perf_pmu *pmu = &test_pmu->pmu; in __test_uncore_pmu_event_aliases() local
527 const char *pmu_name = pmu->name; in __test_uncore_pmu_event_aliases()
535 return -1; in __test_uncore_pmu_event_aliases()
536 pmu_add_cpu_aliases_map(&aliases, pmu, map); in __test_uncore_pmu_event_aliases()
537 pmu_add_sys_aliases(&aliases, pmu); in __test_uncore_pmu_event_aliases()
544 for (table = &test_pmu->aliases[0]; *table; table++) in __test_uncore_pmu_event_aliases()
548 pr_debug("testing aliases uncore PMU %s: mismatch expected aliases (%d) vs found (%d)\n", 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()
561 if (!strcmp(event->name, alias->name)) { in __test_uncore_pmu_event_aliases()
573 pr_debug("testing aliases uncore PMU %s: could not match alias %s\n", 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()
581 pr_debug("testing aliases uncore PMU %s: mismatch found aliases (%d) vs matched (%d)\n", 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()
596 .pmu = {
605 .pmu = {
614 .pmu = {
623 .pmu = {
632 .pmu = {
641 .pmu = {
655 struct perf_pmu *pmu = NULL; in test_aliases() local
658 while ((pmu = perf_pmu__scan(pmu)) != NULL) { in test_aliases()
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()
675 pr_debug("testing core PMU %s aliases: no events to match\n", 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()
729 pe->metric_name, id, pe->metric_expr); 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",