Lines Matching +full:event +full:- +full:name

1 // SPDX-License-Identifier: GPL-2.0
3 #include "parse-events.h"
12 #include "../pmu-events/pmu-events.h"
17 #include "util/parse-events.h"
22 /* used for matching against events from generated pmu-events.c */
23 struct pmu_event event; member
25 /* used for matching against event aliases */
46 .event = {
48 .name = "bp_l1_btb_correct",
49 .event = "event=0x8a",
53 .alias_str = "event=0x8a",
58 .event = {
60 .name = "bp_l2_btb_correct",
61 .event = "event=0x8b",
65 .alias_str = "event=0x8b",
70 .event = {
72 .name = "segment_reg_loads.any",
73 .event = "event=6,period=200000,umask=0x80",
77 .alias_str = "event=0x6,period=0x30d40,umask=0x80",
82 .event = {
84 .name = "dispatch_blocked.any",
85 .event = "event=9,period=200000,umask=0x20",
86 .desc = "Memory cluster signals to block micro-op dispatch for any reason",
89 .alias_str = "event=0x9,period=0x30d40,umask=0x20",
90 .alias_long_desc = "Memory cluster signals to block micro-op dispatch for any reason",
94 .event = {
96 .name = "eist_trans",
97 .event = "event=0x3a,period=200000",
101 .alias_str = "event=0x3a,period=0x30d40",
106 .event = {
108 .name = "l3_cache_rd",
109 .event = "event=0x40",
114 .alias_str = "event=0x40",
129 .event = {
130 .name = "uncore_hisi_ddrc.flux_wcmd",
131 .event = "event=2",
137 .alias_str = "event=0x2",
143 .event = {
144 .name = "unc_cbo_xsnp_response.miss_eviction",
145 .event = "event=0x22,umask=0x81",
146 .desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor core",
148 .long_desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor core",
151 .alias_str = "event=0x22,umask=0x81",
152 ….alias_long_desc = "A cross-core snoop resulted from L3 Eviction which misses in some processor co…
157 .event = {
158 .name = "event-hyphen",
159 .event = "event=0xe0",
165 .alias_str = "event=0xe0",
171 .event = {
172 .name = "event-two-hyph",
173 .event = "event=0xc0",
179 .alias_str = "event=0xc0",
185 .event = {
186 .name = "uncore_hisi_l3c.rd_hit_cpipe",
187 .event = "event=7",
193 .alias_str = "event=0x7",
199 .event = {
200 .name = "uncore_imc_free_running.cache_miss",
201 .event = "event=0x12",
207 .alias_str = "event=0x12",
213 .event = {
214 .name = "uncore_imc.cache_hits",
215 .event = "event=0x34",
221 .alias_str = "event=0x34",
238 .event = {
239 .name = "sys_ddr_pmu.write_cycles",
240 .event = "event=0x2b",
241 .desc = "ddr write-cycles event",
246 .alias_str = "event=0x2b",
247 .alias_long_desc = "ddr write-cycles event",
252 .event = {
253 .name = "sys_ccn_pmu.read_cycles",
254 .event = "config=0x2c",
255 .desc = "ccn read-cycles event",
261 .alias_long_desc = "ccn read-cycles event",
266 .event = {
267 .name = "sys_cmn_pmu.hnf_cache_miss",
268 .event = "eventid=1,type=5",
302 if (!is_same(e1->name, e2->name)) { in compare_pmu_events()
303 pr_debug2("testing event e1 %s: mismatched name string, %s vs %s\n", in compare_pmu_events()
304 e1->name, e1->name, e2->name); in compare_pmu_events()
305 return -1; in compare_pmu_events()
308 if (!is_same(e1->compat, e2->compat)) { in compare_pmu_events()
309 pr_debug2("testing event e1 %s: mismatched compat string, %s vs %s\n", in compare_pmu_events()
310 e1->name, e1->compat, e2->compat); in compare_pmu_events()
311 return -1; in compare_pmu_events()
314 if (!is_same(e1->event, e2->event)) { in compare_pmu_events()
315 pr_debug2("testing event e1 %s: mismatched event, %s vs %s\n", in compare_pmu_events()
316 e1->name, e1->event, e2->event); in compare_pmu_events()
317 return -1; in compare_pmu_events()
320 if (!is_same(e1->desc, e2->desc)) { in compare_pmu_events()
321 pr_debug2("testing event e1 %s: mismatched desc, %s vs %s\n", in compare_pmu_events()
322 e1->name, e1->desc, e2->desc); in compare_pmu_events()
323 return -1; in compare_pmu_events()
326 if (!is_same(e1->topic, e2->topic)) { in compare_pmu_events()
327 pr_debug2("testing event e1 %s: mismatched topic, %s vs %s\n", in compare_pmu_events()
328 e1->name, e1->topic, e2->topic); in compare_pmu_events()
329 return -1; in compare_pmu_events()
332 if (!is_same(e1->long_desc, e2->long_desc)) { in compare_pmu_events()
333 pr_debug2("testing event e1 %s: mismatched long_desc, %s vs %s\n", in compare_pmu_events()
334 e1->name, e1->long_desc, e2->long_desc); in compare_pmu_events()
335 return -1; in compare_pmu_events()
338 if (!is_same(e1->pmu, e2->pmu)) { in compare_pmu_events()
339 pr_debug2("testing event e1 %s: mismatched pmu string, %s vs %s\n", in compare_pmu_events()
340 e1->name, e1->pmu, e2->pmu); in compare_pmu_events()
341 return -1; in compare_pmu_events()
344 if (!is_same(e1->unit, e2->unit)) { in compare_pmu_events()
345 pr_debug2("testing event e1 %s: mismatched unit, %s vs %s\n", in compare_pmu_events()
346 e1->name, e1->unit, e2->unit); in compare_pmu_events()
347 return -1; in compare_pmu_events()
350 if (e1->perpkg != e2->perpkg) { in compare_pmu_events()
351 pr_debug2("testing event e1 %s: mismatched perpkg, %d vs %d\n", in compare_pmu_events()
352 e1->name, e1->perpkg, e2->perpkg); in compare_pmu_events()
353 return -1; in compare_pmu_events()
356 if (e1->deprecated != e2->deprecated) { in compare_pmu_events()
357 pr_debug2("testing event e1 %s: mismatched deprecated, %d vs %d\n", in compare_pmu_events()
358 e1->name, e1->deprecated, e2->deprecated); in compare_pmu_events()
359 return -1; in compare_pmu_events()
369 struct pmu_event const *event = &test_event->event; in compare_alias_to_test_event() local
372 if (!is_same(alias->name, event->name)) { in compare_alias_to_test_event()
373 pr_debug("testing aliases PMU %s: mismatched name, %s vs %s\n", in compare_alias_to_test_event()
374 pmu_name, alias->name, event->name); in compare_alias_to_test_event()
375 return -1; in compare_alias_to_test_event()
378 if (!is_same(alias->desc, event->desc)) { in compare_alias_to_test_event()
380 pmu_name, alias->desc, event->desc); in compare_alias_to_test_event()
381 return -1; in compare_alias_to_test_event()
384 if (!is_same(alias->long_desc, test_event->alias_long_desc)) { in compare_alias_to_test_event()
386 pmu_name, alias->long_desc, in compare_alias_to_test_event()
387 test_event->alias_long_desc); in compare_alias_to_test_event()
388 return -1; in compare_alias_to_test_event()
391 if (!is_same(alias->topic, event->topic)) { in compare_alias_to_test_event()
393 pmu_name, alias->topic, event->topic); in compare_alias_to_test_event()
394 return -1; in compare_alias_to_test_event()
397 if (!is_same(alias->str, test_event->alias_str)) { in compare_alias_to_test_event()
399 pmu_name, alias->str, test_event->alias_str); in compare_alias_to_test_event()
400 return -1; in compare_alias_to_test_event()
403 if (!is_same(alias->long_desc, test_event->alias_long_desc)) { in compare_alias_to_test_event()
405 pmu_name, alias->str, test_event->alias_long_desc); in compare_alias_to_test_event()
406 return -1; in compare_alias_to_test_event()
409 if (!is_same(alias->pmu_name, test_event->event.pmu) && in compare_alias_to_test_event()
410 !is_same(alias->pmu_name, "default_core")) { in compare_alias_to_test_event()
412 pmu_name, alias->pmu_name, test_event->event.pmu); in compare_alias_to_test_event()
413 return -1; in compare_alias_to_test_event()
427 if (strcmp(pe->pmu, "default_core")) in test__pmu_event_table_core_callback()
434 struct pmu_event const *event = &test_event->event; in test__pmu_event_table_core_callback() local
436 if (strcmp(pe->name, event->name)) in test__pmu_event_table_core_callback()
441 if (compare_pmu_events(pe, event)) in test__pmu_event_table_core_callback()
442 return -1; in test__pmu_event_table_core_callback()
444 pr_debug("testing event table %s: pass\n", pe->name); in test__pmu_event_table_core_callback()
447 pr_err("testing event table: could not find event %s\n", pe->name); in test__pmu_event_table_core_callback()
448 return -1; in test__pmu_event_table_core_callback()
465 struct pmu_event const *event = &test_event->event; in test__pmu_event_table_sys_callback() local
467 if (strcmp(pe->name, event->name)) in test__pmu_event_table_sys_callback()
472 if (compare_pmu_events(pe, event)) in test__pmu_event_table_sys_callback()
475 pr_debug("testing sys event table %s: pass\n", pe->name); in test__pmu_event_table_sys_callback()
478 pr_debug("testing sys event table: could not find event %s\n", pe->name); in test__pmu_event_table_sys_callback()
484 /* Verify generated events from pmu-events.c are as expected */
496 ARRAY_SIZE(sys_events) - 3; in test__pmu_event_table()
499 return -1; in test__pmu_event_table()
514 pr_err("testing event table: found %d, but expected %d\n", in test__pmu_event_table()
531 if (compare_alias_to_test_event(alias, args->test_event, alias->pmu->name)) in test_core_pmu_event_aliases_cb()
532 return -1; in test_core_pmu_event_aliases_cb()
533 (*args->count)++; in test_core_pmu_event_aliases_cb()
534 pr_debug2("testing aliases core PMU %s: matched event %s\n", in test_core_pmu_event_aliases_cb()
535 alias->pmu_name, alias->name); in test_core_pmu_event_aliases_cb()
548 return -1; in __test_core_pmu_event_aliases()
554 return -1; in __test_core_pmu_event_aliases()
556 INIT_LIST_HEAD(&pmu->format); in __test_core_pmu_event_aliases()
557 INIT_LIST_HEAD(&pmu->aliases); in __test_core_pmu_event_aliases()
558 INIT_LIST_HEAD(&pmu->caps); in __test_core_pmu_event_aliases()
559 INIT_LIST_HEAD(&pmu->list); in __test_core_pmu_event_aliases()
560 pmu->name = strdup(pmu_name); in __test_core_pmu_event_aliases()
561 pmu->is_core = true; in __test_core_pmu_event_aliases()
563 pmu->events_table = table; in __test_core_pmu_event_aliases()
565 pmu->cpu_aliases_added = true; in __test_core_pmu_event_aliases()
566 pmu->sysfs_aliases_loaded = true; in __test_core_pmu_event_aliases()
570 pr_debug("Missing test event in test architecture"); in __test_core_pmu_event_aliases()
575 struct pmu_event const *event = &test_event.event; in __test_core_pmu_event_aliases() local
582 test_event.event.pmu = pmu_name; in __test_core_pmu_event_aliases()
583 err = perf_pmu__find_event(pmu, event->name, &args, in __test_core_pmu_event_aliases()
597 struct perf_pmu *pmu = &test_pmu->pmu; in __test_uncore_pmu_event_aliases()
598 const char *pmu_name = pmu->name; in __test_uncore_pmu_event_aliases()
604 return -1; in __test_uncore_pmu_event_aliases()
605 pmu->events_table = events_table; in __test_uncore_pmu_event_aliases()
607 pmu->cpu_aliases_added = true; in __test_uncore_pmu_event_aliases()
608 pmu->sysfs_aliases_loaded = true; in __test_uncore_pmu_event_aliases()
615 for (table = &test_pmu->aliases[0]; *table; table++) in __test_uncore_pmu_event_aliases()
621 return -1; in __test_uncore_pmu_event_aliases()
624 for (table = &test_pmu->aliases[0]; *table; table++) { in __test_uncore_pmu_event_aliases()
626 struct pmu_event const *event = &test_event.event; in __test_uncore_pmu_event_aliases() local
636 return -1; in __test_uncore_pmu_event_aliases()
639 err = perf_pmu__find_event(pmu, event->name, &args, in __test_uncore_pmu_event_aliases()
644 pmu_name, event->name); in __test_uncore_pmu_event_aliases()
645 return -1; in __test_uncore_pmu_event_aliases()
652 res = -1; in __test_uncore_pmu_event_aliases()
660 .name = "hisi_sccl1_ddrc2",
669 .name = "uncore_cbox_0",
680 .name = "hisi_sccl3_l3c7",
689 .name = "uncore_imc_free_running_0",
698 .name = "uncore_imc_0",
707 .name = "uncore_sys_ddr_pmu0",
717 .name = "uncore_sys_ccn_pmu4",
727 .name = (char *)"uncore_sys_cmn_pmu0",
737 .name = (char *)"uncore_sys_cmn_pmu0",
747 .name = (char *)"uncore_sys_cmn_pmu0",
757 .name = (char *)"uncore_sys_cmn_pmu0",
777 if (list_empty(&pmu->format)) { in test__aliases()
778 pr_debug2("skipping testing core PMU %s\n", pmu->name); in test__aliases()
782 if (__test_core_pmu_event_aliases(pmu->name, &count)) { in test__aliases()
783 pr_debug("testing core PMU %s aliases: failed\n", pmu->name); in test__aliases()
784 return -1; in test__aliases()
789 pmu->name); in test__aliases()
790 return -1; in test__aliases()
793 pr_debug("testing core PMU %s aliases: pass\n", pmu->name); in test__aliases()
834 return -ENOMEM; in check_parse_id()
838 return -ENOMEM; in check_parse_id()
881 if (!pm->metric_expr) in test__parsing_callback()
884 pr_debug("Found metric '%s'\n", pm->metric_name); in test__parsing_callback()
893 return -ENOMEM; in test__parsing_callback()
898 return -ENOMEM; in test__parsing_callback()
901 perf_evlist__set_maps(&evlist->core, cpus, NULL); in test__parsing_callback()
903 err = metricgroup__parse_groups_test(evlist, table, pm->metric_name, &metric_events); in test__parsing_callback()
905 if (!strcmp(pm->metric_name, "M1") || !strcmp(pm->metric_name, "M2") || in test__parsing_callback()
906 !strcmp(pm->metric_name, "M3")) { in test__parsing_callback()
907 (*failures)--; in test__parsing_callback()
908 pr_debug("Expected broken metric %s skipping\n", pm->metric_name); in test__parsing_callback()
924 evsel->stats->aggr->counts.val = k; in test__parsing_callback()
935 list_for_each_entry (mexp, &me->head, nd) { in test__parsing_callback()
936 if (strcmp(mexp->metric_name, pm->metric_name)) in test__parsing_callback()
940 (*failures)--; in test__parsing_callback()
945 pr_debug("Didn't find parsed metric %s", pm->metric_name); in test__parsing_callback()
949 pr_debug("Broken metric %s\n", pm->metric_name); in test__parsing_callback()
976 { "imx8_ddr0@read\\-cycles@ * 4 * 4", },
977 { "imx8_ddr0@axid\\-read\\,axi_mask\\=0xffff\\,axi_id\\=0x0000@ * 4", },
978 { "(cstate_pkg@c2\\-residency@ / msr@tsc@) * 100", },
979 { "(imx8_ddr0@read\\-cycles@ + imx8_ddr0@write\\-cycles@)", },
987 int ret = -1; in metric_parse_fake()
998 ctx->sctx.is_test = true; in metric_parse_fake()
1001 return -1; in metric_parse_fake()
1010 hashmap__for_each_entry(ctx->ids, cur, bkt) in metric_parse_fake()
1011 expr__add_id_val(ctx, strdup(cur->pkey), i++); in metric_parse_fake()
1013 hashmap__for_each_entry(ctx->ids, cur, bkt) { in metric_parse_fake()
1014 if (check_parse_fake(cur->pkey)) { in metric_parse_fake()
1027 hashmap__for_each_entry(ctx->ids, cur, bkt) in metric_parse_fake()
1028 expr__add_id_val(ctx, strdup(cur->pkey), i--); in metric_parse_fake()
1036 ret = -1; in metric_parse_fake()
1049 return metric_parse_fake(pm->metric_name, pm->metric_expr); in test__parsing_fake_callback()
1078 if (!pm->metric_threshold) in test__parsing_threshold_callback()
1080 return metric_parse_fake(pm->metric_name, pm->metric_threshold); in test__parsing_threshold_callback()
1096 TEST_CASE("PMU event table sanity", pmu_event_table),
1097 TEST_CASE("PMU event map aliases", aliases),
1098 TEST_CASE_REASON("Parsing of PMU event table metrics", parsing,
1100 TEST_CASE("Parsing of PMU event table metrics with fake PMUs", parsing_fake),
1102 { .name = NULL, }
1106 .desc = "PMU JSON event tests",