1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2945aea22SJiri Olsa #include "parse-events.h" 3945aea22SJiri Olsa #include "evsel.h" 4945aea22SJiri Olsa #include "evlist.h" 5cd0cfad7SBorislav Petkov #include <api/fs/fs.h> 6c81251e8SJiri Olsa #include "tests.h" 784f5d36fSJiri Olsa #include "debug.h" 8f2a39fe8SArnaldo Carvalho de Melo #include "pmu.h" 9490e9a8fSJin Yao #include "pmu-hybrid.h" 1076b31a29SArnaldo Carvalho de Melo #include <dirent.h> 11a43783aeSArnaldo Carvalho de Melo #include <errno.h> 12c7a3828dSJin Yao #include "fncache.h" 137a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h> 147a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h> 157a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h> 16877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h> 17f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h> 1820a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h> 19945aea22SJiri Olsa 20945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 21945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 22945aea22SJiri Olsa 23*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 24*378ef0f5SIan Rogers 2553fe307dSThomas Richter #if defined(__s390x__) 2653fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 274d39c89fSIngo Molnar * and return success when trace point kvm_s390_create_vm 2853fe307dSThomas Richter * exists. Otherwise this test always fails. 2953fe307dSThomas Richter */ 3053fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 3153fe307dSThomas Richter { 3253fe307dSThomas Richter char *eventfile; 3353fe307dSThomas Richter bool rc = false; 3453fe307dSThomas Richter 3553fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 3653fe307dSThomas Richter 3753fe307dSThomas Richter if (eventfile) { 3853fe307dSThomas Richter DIR *mydir = opendir(eventfile); 3953fe307dSThomas Richter 4053fe307dSThomas Richter if (mydir) { 4153fe307dSThomas Richter rc = true; 4253fe307dSThomas Richter closedir(mydir); 4353fe307dSThomas Richter } 4453fe307dSThomas Richter put_events_file(eventfile); 4553fe307dSThomas Richter } 4653fe307dSThomas Richter 4753fe307dSThomas Richter return rc; 4853fe307dSThomas Richter } 4953fe307dSThomas Richter #endif 5053fe307dSThomas Richter 5163503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 52945aea22SJiri Olsa { 53515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 54945aea22SJiri Olsa 556484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 563a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups); 571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 58945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 591fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 617741e03eSIan Rogers return TEST_OK; 62945aea22SJiri Olsa } 63945aea22SJiri Olsa 6463503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 65945aea22SJiri Olsa { 6632dcd021SJiri Olsa struct evsel *evsel; 67945aea22SJiri Olsa 686484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 693a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups); 70945aea22SJiri Olsa 71e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 72945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 731fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 74945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 751fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 76945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 771fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 78945aea22SJiri Olsa } 797741e03eSIan Rogers return TEST_OK; 80945aea22SJiri Olsa } 81*378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 82945aea22SJiri Olsa 8363503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 84945aea22SJiri Olsa { 85515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 86945aea22SJiri Olsa 876484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 907741e03eSIan Rogers return TEST_OK; 91945aea22SJiri Olsa } 92945aea22SJiri Olsa 9363503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 94945aea22SJiri Olsa { 95515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 96945aea22SJiri Olsa 976484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 1007741e03eSIan Rogers return TEST_OK; 101945aea22SJiri Olsa } 102945aea22SJiri Olsa 10363503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 104945aea22SJiri Olsa { 105515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 106945aea22SJiri Olsa 1076484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 109945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1101fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 1117741e03eSIan Rogers return TEST_OK; 112945aea22SJiri Olsa } 113945aea22SJiri Olsa 11463503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 115945aea22SJiri Olsa { 116515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 117945aea22SJiri Olsa 1186484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 120945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1211fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 122ee4c7588SJiri Olsa /* 12378e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 124ee4c7588SJiri Olsa * while this test executes only parse events method. 125ee4c7588SJiri Olsa */ 126945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1271fc632ceSJiri Olsa 0 == evsel->core.attr.sample_period); 128945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1291fc632ceSJiri Olsa 0 == evsel->core.attr.config1); 130945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 1311fc632ceSJiri Olsa 1 == evsel->core.attr.config2); 1327741e03eSIan Rogers return TEST_OK; 133945aea22SJiri Olsa } 134945aea22SJiri Olsa 13563503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 136945aea22SJiri Olsa { 137515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 138945aea22SJiri Olsa 1396484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 141945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1421fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 1437741e03eSIan Rogers return TEST_OK; 144945aea22SJiri Olsa } 145945aea22SJiri Olsa 14663503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 147945aea22SJiri Olsa { 148515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 149945aea22SJiri Olsa 1506484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 1521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config); 1537741e03eSIan Rogers return TEST_OK; 154945aea22SJiri Olsa } 155945aea22SJiri Olsa 15663503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 157945aea22SJiri Olsa { 158515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 159945aea22SJiri Olsa 1606484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 163945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1641fc632ceSJiri Olsa evsel->core.attr.bp_type); 165945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 1661fc632ceSJiri Olsa evsel->core.attr.bp_len); 1677741e03eSIan Rogers return TEST_OK; 168945aea22SJiri Olsa } 169945aea22SJiri Olsa 17063503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 171945aea22SJiri Olsa { 172515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 173945aea22SJiri Olsa 1746484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 177945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1781fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 1791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 1807741e03eSIan Rogers return TEST_OK; 181945aea22SJiri Olsa } 182945aea22SJiri Olsa 18363503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 184945aea22SJiri Olsa { 185515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 186945aea22SJiri Olsa 1876484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 188945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1891fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 191945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1921fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 193945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 1941fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 1957741e03eSIan Rogers return TEST_OK; 196945aea22SJiri Olsa } 197945aea22SJiri Olsa 19863503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 199945aea22SJiri Olsa { 200515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 201945aea22SJiri Olsa 2026484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 203945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2041fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 206945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2071fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 208945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2091fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2107741e03eSIan Rogers return TEST_OK; 211945aea22SJiri Olsa } 212945aea22SJiri Olsa 21363503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 214945aea22SJiri Olsa { 215515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 216945aea22SJiri Olsa 2176484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 218945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2191fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 221945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2221fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 223945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2241fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2257741e03eSIan Rogers return TEST_OK; 226945aea22SJiri Olsa } 227945aea22SJiri Olsa 228*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 22963503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 230945aea22SJiri Olsa { 231515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 232945aea22SJiri Olsa 2331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 237945aea22SJiri Olsa 238945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 239945aea22SJiri Olsa } 240945aea22SJiri Olsa 241945aea22SJiri Olsa static int 24263503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 243945aea22SJiri Olsa { 24432dcd021SJiri Olsa struct evsel *evsel; 245945aea22SJiri Olsa 2466484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 247945aea22SJiri Olsa 248e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 249945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 2501fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 251945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 2521fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 2531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 255945aea22SJiri Olsa } 256945aea22SJiri Olsa 257945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 258945aea22SJiri Olsa } 259*378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 260945aea22SJiri Olsa 26163503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 262945aea22SJiri Olsa { 263515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 264945aea22SJiri Olsa 2651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 269945aea22SJiri Olsa 270945aea22SJiri Olsa return test__checkevent_raw(evlist); 271945aea22SJiri Olsa } 272945aea22SJiri Olsa 27363503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist) 274945aea22SJiri Olsa { 275515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 276945aea22SJiri Olsa 2771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 281945aea22SJiri Olsa 282945aea22SJiri Olsa return test__checkevent_numeric(evlist); 283945aea22SJiri Olsa } 284945aea22SJiri Olsa 28563503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 286945aea22SJiri Olsa { 287515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 288945aea22SJiri Olsa 2891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 293945aea22SJiri Olsa 294945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 295945aea22SJiri Olsa } 296945aea22SJiri Olsa 29763503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 298945aea22SJiri Olsa { 299515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 300945aea22SJiri Olsa 3011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 303945aea22SJiri Olsa 304945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 305945aea22SJiri Olsa } 306945aea22SJiri Olsa 30763503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 308945aea22SJiri Olsa { 309515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 310945aea22SJiri Olsa 3111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 3121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 313945aea22SJiri Olsa 314945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 315945aea22SJiri Olsa } 316945aea22SJiri Olsa 31763503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 318945aea22SJiri Olsa { 319515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 320945aea22SJiri Olsa 3211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 325945aea22SJiri Olsa 326945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 327945aea22SJiri Olsa } 328945aea22SJiri Olsa 32963503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 330945aea22SJiri Olsa { 331515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 332945aea22SJiri Olsa 3331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 337945aea22SJiri Olsa 338945aea22SJiri Olsa return test__checkevent_genhw(evlist); 339945aea22SJiri Olsa } 340945aea22SJiri Olsa 34163503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 342a1e12da4SJiri Olsa { 343515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 344a1e12da4SJiri Olsa 3451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 352a1e12da4SJiri Olsa 353a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 354a1e12da4SJiri Olsa } 355a1e12da4SJiri Olsa 35663503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 357a1e12da4SJiri Olsa { 358515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 359a1e12da4SJiri Olsa 3601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 3631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 367a1e12da4SJiri Olsa 368a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 369a1e12da4SJiri Olsa } 370a1e12da4SJiri Olsa 37163503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 372945aea22SJiri Olsa { 373515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 374945aea22SJiri Olsa 375945aea22SJiri Olsa 3761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 380945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3818ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 382945aea22SJiri Olsa 383945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 384945aea22SJiri Olsa } 385945aea22SJiri Olsa 38663503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 387945aea22SJiri Olsa { 388515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 389945aea22SJiri Olsa 3901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 394945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3958ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 396945aea22SJiri Olsa 397945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 398945aea22SJiri Olsa } 399945aea22SJiri Olsa 40063503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 401945aea22SJiri Olsa { 402515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 403945aea22SJiri Olsa 4041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 408945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4098ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 410945aea22SJiri Olsa 411945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 412945aea22SJiri Olsa } 413945aea22SJiri Olsa 41463503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 415945aea22SJiri Olsa { 416515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 417945aea22SJiri Olsa 4181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 422945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4238ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 424945aea22SJiri Olsa 425945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 426945aea22SJiri Olsa } 427945aea22SJiri Olsa 42863503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 429945aea22SJiri Olsa { 430515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 431945aea22SJiri Olsa 4321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 436945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4378ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 438945aea22SJiri Olsa 439945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 440945aea22SJiri Olsa } 441945aea22SJiri Olsa 44263503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 443945aea22SJiri Olsa { 444945aea22SJiri Olsa 445515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 446945aea22SJiri Olsa 4476484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->core.attr.config); 4501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 452ee4c7588SJiri Olsa /* 45378e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 454ee4c7588SJiri Olsa * while this test executes only parse events method. 455ee4c7588SJiri Olsa */ 4561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 457945aea22SJiri Olsa 4587741e03eSIan Rogers return TEST_OK; 459945aea22SJiri Olsa } 460945aea22SJiri Olsa 461*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 46263503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 463945aea22SJiri Olsa { 464515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 465945aea22SJiri Olsa 4666484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 467945aea22SJiri Olsa 468945aea22SJiri Olsa /* r1 */ 4691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 4731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 477945aea22SJiri Olsa 47843f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 479e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 481945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 4821fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 488945aea22SJiri Olsa 489945aea22SJiri Olsa /* 1:1:hp */ 490e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 4921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 497945aea22SJiri Olsa 4987741e03eSIan Rogers return TEST_OK; 499945aea22SJiri Olsa } 500*378ef0f5SIan Rogers #endif 501945aea22SJiri Olsa 50263503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 503945aea22SJiri Olsa { 504515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 505945aea22SJiri Olsa 506945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 5076484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 5108ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 511945aea22SJiri Olsa 512945aea22SJiri Olsa /* cpu/config=2/u" */ 513e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 517945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5188ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 519945aea22SJiri Olsa 5207741e03eSIan Rogers return TEST_OK; 521945aea22SJiri Olsa } 522945aea22SJiri Olsa 52363503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 52471ef150eSKan Liang { 525515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 52671ef150eSKan Liang 52771ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5286484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 53171ef150eSKan Liang /* 53278e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 53371ef150eSKan Liang * while this test executes only parse events method. 53471ef150eSKan Liang */ 5351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 53627de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 53871ef150eSKan Liang 53971ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 540e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 54371ef150eSKan Liang /* 54478e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 54571ef150eSKan Liang * while this test executes only parse events method. 54671ef150eSKan Liang */ 5471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 54827de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 55071ef150eSKan Liang 5517741e03eSIan Rogers return TEST_OK; 55271ef150eSKan Liang } 55371ef150eSKan Liang 55463503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 555945aea22SJiri Olsa { 556515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 557945aea22SJiri Olsa 5586484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 560945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 5611fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 562945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 5631fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5670997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 568945aea22SJiri Olsa 5697741e03eSIan Rogers return TEST_OK; 570945aea22SJiri Olsa } 571945aea22SJiri Olsa 572ffe59788SKan Liang 57363503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 574ffe59788SKan Liang { 575515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 576ffe59788SKan Liang 577ffe59788SKan Liang /* pmu-event:u */ 5786484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 579ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5801fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 581ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5821fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5860997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 587ffe59788SKan Liang 588ffe59788SKan Liang /* cpu/pmu-event/u*/ 589e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5906484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 592ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5931fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 594ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5951fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5990997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 600ffe59788SKan Liang 6017741e03eSIan Rogers return TEST_OK; 602ffe59788SKan Liang } 603ffe59788SKan Liang 604945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 605945aea22SJiri Olsa { 6066cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 607945aea22SJiri Olsa 608945aea22SJiri Olsa /* config=10 */ 6096cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 610945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 611945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 612945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 613945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 614945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 6154f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 616945aea22SJiri Olsa 617945aea22SJiri Olsa /* config1 */ 6186cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 619945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 620945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 621945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 622945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 623945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6244f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 625945aea22SJiri Olsa 626945aea22SJiri Olsa /* config2=3 */ 6276cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 628945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 629945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 630945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 631945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 632945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 6334f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 634945aea22SJiri Olsa 635945aea22SJiri Olsa /* umask=1*/ 6366cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 637945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 638945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 639945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 640945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 641945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 642945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 643945aea22SJiri Olsa 6444929e95aSJiri Olsa /* 6454929e95aSJiri Olsa * read 6464929e95aSJiri Olsa * 6474929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 6484929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 6494929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 6504929e95aSJiri Olsa */ 6514929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6524929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6534929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 6544929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6554929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6564929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6574929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read")); 6584929e95aSJiri Olsa 6594929e95aSJiri Olsa /* 6604929e95aSJiri Olsa * r0xead 6614929e95aSJiri Olsa * 6624929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 6634929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 6644929e95aSJiri Olsa */ 6654929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6664929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6674929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 6684929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6694929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6704929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 0xead); 6714f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 6727741e03eSIan Rogers return TEST_OK; 673945aea22SJiri Olsa } 674945aea22SJiri Olsa 67563503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 676945aea22SJiri Olsa { 67732dcd021SJiri Olsa struct evsel *evsel, *leader; 678945aea22SJiri Olsa 6796484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6803a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 681945aea22SJiri Olsa 682945aea22SJiri Olsa /* instructions:k */ 683515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 6841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 685945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6861fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 6871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 6911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 693c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 6945643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 6952bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 696a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 697945aea22SJiri Olsa 698945aea22SJiri Olsa /* cycles:upp */ 699e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 701945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7021fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 706945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 710fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7112bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 712a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 713945aea22SJiri Olsa 7147741e03eSIan Rogers return TEST_OK; 715945aea22SJiri Olsa } 716945aea22SJiri Olsa 71763503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 718945aea22SJiri Olsa { 71932dcd021SJiri Olsa struct evsel *evsel, *leader; 720945aea22SJiri Olsa 7216484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7223a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 723945aea22SJiri Olsa 724945aea22SJiri Olsa /* faults + :ku modifier */ 725515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 727945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7281fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 7291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 732943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 735c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7365643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7372bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 738a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 739945aea22SJiri Olsa 740945aea22SJiri Olsa /* cache-references + :u modifier */ 741e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 743945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7441fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config); 7451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 751fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7522bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 753a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 754945aea22SJiri Olsa 755945aea22SJiri Olsa /* cycles:k */ 756e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 758945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7591fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 766c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 767a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 768945aea22SJiri Olsa 7697741e03eSIan Rogers return TEST_OK; 770945aea22SJiri Olsa } 771945aea22SJiri Olsa 772*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 77363503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 774945aea22SJiri Olsa { 77532dcd021SJiri Olsa struct evsel *evsel, *leader; 776945aea22SJiri Olsa 7776484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7783a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups); 779945aea22SJiri Olsa 78043f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 781515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 783945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 7841fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 7851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 7861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 7891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 792c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 793945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 794945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 7955643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7962bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 797a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 798945aea22SJiri Olsa 799945aea22SJiri Olsa /* group1 cycles:kppp */ 800e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 802945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8031fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 807945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 811fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 812945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8132bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 814a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 815945aea22SJiri Olsa 816945aea22SJiri Olsa /* group2 cycles + G modifier */ 817e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 819945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8201fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 827c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 828945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 829945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8305643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8312bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 832a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 833945aea22SJiri Olsa 834945aea22SJiri Olsa /* group2 1:3 + G modifier */ 835e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config); 8381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 844fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 846a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 847945aea22SJiri Olsa 848945aea22SJiri Olsa /* instructions:u */ 849e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 851945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8521fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 856943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 859c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 860a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 861945aea22SJiri Olsa 8627741e03eSIan Rogers return TEST_OK; 863945aea22SJiri Olsa } 864*378ef0f5SIan Rogers #endif 865945aea22SJiri Olsa 86663503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 867945aea22SJiri Olsa { 86832dcd021SJiri Olsa struct evsel *evsel, *leader; 869945aea22SJiri Olsa 8706484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8713a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 872945aea22SJiri Olsa 873945aea22SJiri Olsa /* cycles:u + p */ 874515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 876945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8771fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 881945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 885945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 886c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8875643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8882bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 889a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 890945aea22SJiri Olsa 891945aea22SJiri Olsa /* instructions:kp + p */ 892e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 894945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8951fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 899945aea22SJiri Olsa /* use of precise requires exclude_guest */ 9001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 903fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9042bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 905a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 906945aea22SJiri Olsa 9077741e03eSIan Rogers return TEST_OK; 908945aea22SJiri Olsa } 909945aea22SJiri Olsa 91063503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 911945aea22SJiri Olsa { 91232dcd021SJiri Olsa struct evsel *evsel, *leader; 913945aea22SJiri Olsa 9146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9153a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups); 916945aea22SJiri Olsa 917945aea22SJiri Olsa /* cycles + G */ 918515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 920945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9211fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 928945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 929c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9305643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9312bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 932a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 933945aea22SJiri Olsa 934945aea22SJiri Olsa /* instructions + G */ 935e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 937945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9381fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 945fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9462bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 947a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 948945aea22SJiri Olsa 949945aea22SJiri Olsa /* cycles:G */ 950e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 9511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 952945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9531fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 960945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 961c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9625643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9632bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 964a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 965945aea22SJiri Olsa 966945aea22SJiri Olsa /* instructions:G */ 967e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 969945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9701fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 977fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9782bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 979945aea22SJiri Olsa 980945aea22SJiri Olsa /* cycles */ 981e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 983945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9841fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 991c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 992945aea22SJiri Olsa 9937741e03eSIan Rogers return TEST_OK; 994945aea22SJiri Olsa } 995945aea22SJiri Olsa 99663503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 9975a30a99fSJiri Olsa { 99832dcd021SJiri Olsa struct evsel *evsel, *leader; 9995a30a99fSJiri Olsa 10006484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10013a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 10025a30a99fSJiri Olsa 10035a30a99fSJiri Olsa /* cycles + :H group modifier */ 1004515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10065a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10071fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10145a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1015c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10165643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10172bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10185a30a99fSJiri Olsa 10195a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1020e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10225a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10231fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1030fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10312bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10325a30a99fSJiri Olsa 10337741e03eSIan Rogers return TEST_OK; 10345a30a99fSJiri Olsa } 10355a30a99fSJiri Olsa 103663503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10375a30a99fSJiri Olsa { 103832dcd021SJiri Olsa struct evsel *evsel, *leader; 10395a30a99fSJiri Olsa 10406484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10413a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 10425a30a99fSJiri Olsa 10435a30a99fSJiri Olsa /* cycles + :G group modifier */ 1044515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10465a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10471fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10545a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1055c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10565643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10572bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10585a30a99fSJiri Olsa 10595a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1060e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10625a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10631fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1070fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10712bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10725a30a99fSJiri Olsa 10737741e03eSIan Rogers return TEST_OK; 10745a30a99fSJiri Olsa } 10755a30a99fSJiri Olsa 107663503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10775a30a99fSJiri Olsa { 107832dcd021SJiri Olsa struct evsel *evsel, *leader; 10795a30a99fSJiri Olsa 10806484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10813a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 10825a30a99fSJiri Olsa 10835a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1084515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10865a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10871fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10945a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1095c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10965643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10972bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10985a30a99fSJiri Olsa 10995a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1100e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11025a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11031fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1110fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11112bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11125a30a99fSJiri Olsa 11137741e03eSIan Rogers return TEST_OK; 11145a30a99fSJiri Olsa } 11155a30a99fSJiri Olsa 111663503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11175a30a99fSJiri Olsa { 111832dcd021SJiri Olsa struct evsel *evsel, *leader; 11195a30a99fSJiri Olsa 11206484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11213a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 11225a30a99fSJiri Olsa 11235a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1124515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11265a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11271fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11345a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1135c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11365643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11372bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11385a30a99fSJiri Olsa 11395a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1140e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11425a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11431fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1150fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11512bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11525a30a99fSJiri Olsa 11537741e03eSIan Rogers return TEST_OK; 11545a30a99fSJiri Olsa } 11555a30a99fSJiri Olsa 115663503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1157a9f93f97SJiri Olsa { 115832dcd021SJiri Olsa struct evsel *evsel, *leader; 1159a9f93f97SJiri Olsa 11606484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1161a9f93f97SJiri Olsa 1162a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1163515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1165a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11661fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1173a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1174fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1175a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1176a9f93f97SJiri Olsa 1177a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1178e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1180a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11811fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1188fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1189a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1190a9f93f97SJiri Olsa 1191a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1192e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1194a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11951fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 11961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1202a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1203fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1204a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1205a9f93f97SJiri Olsa 12067741e03eSIan Rogers return TEST_OK; 1207a9f93f97SJiri Olsa } 1208a9f93f97SJiri Olsa 120963503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1210a9f93f97SJiri Olsa { 121132dcd021SJiri Olsa struct evsel *evsel, *leader; 1212a9f93f97SJiri Olsa 12136484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1214a9f93f97SJiri Olsa 1215a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1216515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1218a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12191fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 12201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1226a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1227fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1228a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1229a9f93f97SJiri Olsa 1230a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1231e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1233a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12341fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1241a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1242fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1243a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1244a9f93f97SJiri Olsa 12457741e03eSIan Rogers return TEST_OK; 1246a9f93f97SJiri Olsa } 1247a9f93f97SJiri Olsa 124863503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1249c9ee780fSMichael Ellerman { 1250515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1251c9ee780fSMichael Ellerman 12521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1257c9ee780fSMichael Ellerman 1258c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1259c9ee780fSMichael Ellerman } 1260c9ee780fSMichael Ellerman 126163503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1262c9ee780fSMichael Ellerman { 126332dcd021SJiri Olsa struct evsel *evsel, *leader; 1264c9ee780fSMichael Ellerman 12656484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1266c9ee780fSMichael Ellerman 1267c9ee780fSMichael Ellerman /* cycles - group leader */ 1268515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1270c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12711fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1272c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1273fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1275c9ee780fSMichael Ellerman 1276c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1277e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1279c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12801fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 12811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1282c9ee780fSMichael Ellerman 1283c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1284e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 1285c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12861fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1288c9ee780fSMichael Ellerman 12897741e03eSIan Rogers return TEST_OK; 1290c9ee780fSMichael Ellerman } 1291c9ee780fSMichael Ellerman 12920997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 12930997a266SAndi Kleen { 12940997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 12950997a266SAndi Kleen 12960997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12970997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12980997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12990997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 13000997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13010997a266SAndi Kleen 13020997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 13030997a266SAndi Kleen } 13040997a266SAndi Kleen 13050997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 13060997a266SAndi Kleen { 13070997a266SAndi Kleen struct evsel *evsel, *leader; 13080997a266SAndi Kleen 13090997a266SAndi Kleen TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 13100997a266SAndi Kleen 13110997a266SAndi Kleen /* cycles - group leader */ 13120997a266SAndi Kleen evsel = leader = evlist__first(evlist); 13130997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13140997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13150997a266SAndi Kleen PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 13160997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1317fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13180997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13190997a266SAndi Kleen 13200997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 13210997a266SAndi Kleen evsel = evsel__next(evsel); 13220997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13230997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13240997a266SAndi Kleen PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 13250997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13260997a266SAndi Kleen 13270997a266SAndi Kleen /* branch-misses - ditto */ 13280997a266SAndi Kleen evsel = evsel__next(evsel); 13290997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13300997a266SAndi Kleen PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 13310997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13320997a266SAndi Kleen 13337741e03eSIan Rogers return TEST_OK; 13340997a266SAndi Kleen } 133563503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1336ec32398cSJacob Shin { 1337515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1338ec32398cSJacob Shin 13396484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1342ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13431fc632ceSJiri Olsa evsel->core.attr.bp_type); 1344ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13451fc632ceSJiri Olsa evsel->core.attr.bp_len); 1346ec32398cSJacob Shin 13477741e03eSIan Rogers return TEST_OK; 1348ec32398cSJacob Shin } 1349ec32398cSJacob Shin 135063503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1351ec32398cSJacob Shin { 1352515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1353ec32398cSJacob Shin 13546484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1357ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13581fc632ceSJiri Olsa evsel->core.attr.bp_type); 1359ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13601fc632ceSJiri Olsa evsel->core.attr.bp_len); 1361ec32398cSJacob Shin 13627741e03eSIan Rogers return TEST_OK; 1363ec32398cSJacob Shin } 1364ec32398cSJacob Shin 1365ec32398cSJacob Shin static int 136663503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1367ec32398cSJacob Shin { 1368515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1369ec32398cSJacob Shin 13701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1374ec32398cSJacob Shin 1375ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1376ec32398cSJacob Shin } 1377ec32398cSJacob Shin 137863503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1379ddd83c97SJiri Olsa { 1380515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1381ddd83c97SJiri Olsa 13826484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1384ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong config", 13851fc632ceSJiri Olsa PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config); 13867741e03eSIan Rogers return TEST_OK; 1387ddd83c97SJiri Olsa } 1388ddd83c97SJiri Olsa 138963503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 139010bf358aSWang Nan { 1391515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139210bf358aSWang Nan 139310bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0); 13947741e03eSIan Rogers return TEST_OK; 139510bf358aSWang Nan } 139610bf358aSWang Nan 139763503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 139810bf358aSWang Nan { 1399515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 140010bf358aSWang Nan 140110bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0); 14027741e03eSIan Rogers return TEST_OK; 140310bf358aSWang Nan } 140410bf358aSWang Nan 140563503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 140610bf358aSWang Nan { 1407515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 140810bf358aSWang Nan 140910bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0); 14107741e03eSIan Rogers return TEST_OK; 141110bf358aSWang Nan } 141210bf358aSWang Nan 141363503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 141443d0b978SWang Nan { 1415515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 141643d0b978SWang Nan 141743d0b978SWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0); 14187741e03eSIan Rogers return TEST_OK; 141943d0b978SWang Nan } 142010bf358aSWang Nan 142116ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 142216ddcfbfSJiri Olsa { 142316ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 142416ddcfbfSJiri Olsa } 142516ddcfbfSJiri Olsa 142663503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1427b3f58c8dSArnaldo Carvalho de Melo { 1428515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1429b3f58c8dSArnaldo Carvalho de Melo 1430b3f58c8dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0); 14317741e03eSIan Rogers return TEST_OK; 1432b3f58c8dSArnaldo Carvalho de Melo } 1433b3f58c8dSArnaldo Carvalho de Melo 143463503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 143506dc5bf2SAlexey Budankov { 1436515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 143706dc5bf2SAlexey Budankov 143806dc5bf2SAlexey Budankov TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0); 14397741e03eSIan Rogers return TEST_OK; 144006dc5bf2SAlexey Budankov } 144106dc5bf2SAlexey Budankov 14423a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 14433a6c51e4SJiri Olsa { 14443a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 14453a6c51e4SJiri Olsa 14463a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14473a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14483a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 14497741e03eSIan Rogers return TEST_OK; 14503a6c51e4SJiri Olsa } 14513a6c51e4SJiri Olsa 145263503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1453714a92d8SJiri Olsa { 1454515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1455714a92d8SJiri Olsa 14561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14597741e03eSIan Rogers return TEST_OK; 1460714a92d8SJiri Olsa } 1461714a92d8SJiri Olsa 146263503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1463714a92d8SJiri Olsa { 1464515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1465714a92d8SJiri Olsa 14661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 14697741e03eSIan Rogers return TEST_OK; 1470714a92d8SJiri Olsa } 1471714a92d8SJiri Olsa 1472*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 147382ce75d9SJiri Olsa static int count_tracepoints(void) 147482ce75d9SJiri Olsa { 147582ce75d9SJiri Olsa struct dirent *events_ent; 147682ce75d9SJiri Olsa DIR *events_dir; 147782ce75d9SJiri Olsa int cnt = 0; 147882ce75d9SJiri Olsa 14797014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 148082ce75d9SJiri Olsa 148182ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 148282ce75d9SJiri Olsa 148382ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 148425a7d914SArnaldo Carvalho de Melo char *sys_path; 148582ce75d9SJiri Olsa struct dirent *sys_ent; 148682ce75d9SJiri Olsa DIR *sys_dir; 148782ce75d9SJiri Olsa 148882ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 148982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 149082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 149182ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 149282ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 149382ce75d9SJiri Olsa continue; 149482ce75d9SJiri Olsa 149525a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 149625a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 149782ce75d9SJiri Olsa 149882ce75d9SJiri Olsa sys_dir = opendir(sys_path); 149982ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 150082ce75d9SJiri Olsa 150182ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 150282ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 150382ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 150482ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 150582ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 150682ce75d9SJiri Olsa continue; 150782ce75d9SJiri Olsa 150882ce75d9SJiri Olsa cnt++; 150982ce75d9SJiri Olsa } 151082ce75d9SJiri Olsa 151182ce75d9SJiri Olsa closedir(sys_dir); 151225a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 151382ce75d9SJiri Olsa } 151482ce75d9SJiri Olsa 151582ce75d9SJiri Olsa closedir(events_dir); 151682ce75d9SJiri Olsa return cnt; 151782ce75d9SJiri Olsa } 151882ce75d9SJiri Olsa 151963503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 152082ce75d9SJiri Olsa { 152182ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 15226484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 152382ce75d9SJiri Olsa 152482ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 152582ce75d9SJiri Olsa } 1526*378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 152782ce75d9SJiri Olsa 15282541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist) 15292541cb63SJin Yao { 15302541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 15312541cb63SJin Yao 15322541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15332541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15342541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 15357741e03eSIan Rogers return TEST_OK; 15362541cb63SJin Yao } 15372541cb63SJin Yao 15382541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist) 15392541cb63SJin Yao { 15402541cb63SJin Yao struct evsel *evsel, *leader; 15412541cb63SJin Yao 15422541cb63SJin Yao evsel = leader = evlist__first(evlist); 15432541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15442541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15452541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1546fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15472541cb63SJin Yao 15482541cb63SJin Yao evsel = evsel__next(evsel); 15492541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15502541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config); 1551fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15527741e03eSIan Rogers return TEST_OK; 15532541cb63SJin Yao } 15542541cb63SJin Yao 15552541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist) 15562541cb63SJin Yao { 15572541cb63SJin Yao struct evsel *evsel, *leader; 15582541cb63SJin Yao 15592541cb63SJin Yao evsel = leader = evlist__first(evlist); 15602541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15612541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1562fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15632541cb63SJin Yao 15642541cb63SJin Yao evsel = evsel__next(evsel); 15652541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15662541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1567fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15687741e03eSIan Rogers return TEST_OK; 15692541cb63SJin Yao } 15702541cb63SJin Yao 15712541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist) 15722541cb63SJin Yao { 15732541cb63SJin Yao struct evsel *evsel, *leader; 15742541cb63SJin Yao 15752541cb63SJin Yao evsel = leader = evlist__first(evlist); 15762541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15772541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15782541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1579fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15802541cb63SJin Yao 15812541cb63SJin Yao evsel = evsel__next(evsel); 15822541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1583fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15847741e03eSIan Rogers return TEST_OK; 15852541cb63SJin Yao } 15862541cb63SJin Yao 15872541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist) 15882541cb63SJin Yao { 15892541cb63SJin Yao struct evsel *evsel, *leader; 15902541cb63SJin Yao 15912541cb63SJin Yao evsel = leader = evlist__first(evlist); 15922541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15932541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15942541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1595fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15962541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 15972541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 15982541cb63SJin Yao 15992541cb63SJin Yao evsel = evsel__next(evsel); 16002541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16012541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config); 1602fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 16032541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 16042541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 16057741e03eSIan Rogers return TEST_OK; 16062541cb63SJin Yao } 16072541cb63SJin Yao 16082541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist) 16092541cb63SJin Yao { 16102541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16112541cb63SJin Yao 1612490e9a8fSJin Yao if (!perf_pmu__hybrid_mounted("cpu_atom")) { 1613490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1614490e9a8fSJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 1615490e9a8fSJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16167741e03eSIan Rogers return TEST_OK; 1617490e9a8fSJin Yao } 1618490e9a8fSJin Yao 16192541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 16202541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16212541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16222541cb63SJin Yao 16232541cb63SJin Yao /* The type of second event is randome value */ 16242541cb63SJin Yao evsel = evsel__next(evsel); 16252541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16267741e03eSIan Rogers return TEST_OK; 16272541cb63SJin Yao } 16282541cb63SJin Yao 16292541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist) 16302541cb63SJin Yao { 16312541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16322541cb63SJin Yao 16332541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16342541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16352541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16367741e03eSIan Rogers return TEST_OK; 16372541cb63SJin Yao } 16382541cb63SJin Yao 16392541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist) 16402541cb63SJin Yao { 16412541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16422541cb63SJin Yao 1643490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16442541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 16452541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff)); 16467741e03eSIan Rogers return TEST_OK; 16472541cb63SJin Yao } 16482541cb63SJin Yao 164923b6339bSArnaldo Carvalho de Melo struct evlist_test { 1650945aea22SJiri Olsa const char *name; 165116ddcfbfSJiri Olsa bool (*valid)(void); 165263503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1653945aea22SJiri Olsa }; 1654945aea22SJiri Olsa 16558252e791SIan Rogers static const struct evlist_test test__events[] = { 1656*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1657615b8f99SAlexander Yarygin { 165843f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1659945aea22SJiri Olsa .check = test__checkevent_tracepoint, 16608252e791SIan Rogers /* 0 */ 1661945aea22SJiri Olsa }, 1662615b8f99SAlexander Yarygin { 1663945aea22SJiri Olsa .name = "syscalls:*", 1664945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 16658252e791SIan Rogers /* 1 */ 1666945aea22SJiri Olsa }, 1667*378ef0f5SIan Rogers #endif 1668615b8f99SAlexander Yarygin { 1669945aea22SJiri Olsa .name = "r1a", 1670945aea22SJiri Olsa .check = test__checkevent_raw, 16718252e791SIan Rogers /* 2 */ 1672945aea22SJiri Olsa }, 1673615b8f99SAlexander Yarygin { 1674945aea22SJiri Olsa .name = "1:1", 1675945aea22SJiri Olsa .check = test__checkevent_numeric, 16768252e791SIan Rogers /* 3 */ 1677945aea22SJiri Olsa }, 1678615b8f99SAlexander Yarygin { 1679945aea22SJiri Olsa .name = "instructions", 1680945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 16818252e791SIan Rogers /* 4 */ 1682945aea22SJiri Olsa }, 1683615b8f99SAlexander Yarygin { 1684945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1685945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 16868252e791SIan Rogers /* 5 */ 1687945aea22SJiri Olsa }, 1688615b8f99SAlexander Yarygin { 1689945aea22SJiri Olsa .name = "faults", 1690945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 16918252e791SIan Rogers /* 6 */ 1692945aea22SJiri Olsa }, 1693615b8f99SAlexander Yarygin { 1694945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1695945aea22SJiri Olsa .check = test__checkevent_genhw, 16968252e791SIan Rogers /* 7 */ 1697945aea22SJiri Olsa }, 1698615b8f99SAlexander Yarygin { 1699945aea22SJiri Olsa .name = "mem:0", 1700945aea22SJiri Olsa .check = test__checkevent_breakpoint, 17018252e791SIan Rogers /* 8 */ 1702945aea22SJiri Olsa }, 1703615b8f99SAlexander Yarygin { 1704945aea22SJiri Olsa .name = "mem:0:x", 1705945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 17068252e791SIan Rogers /* 9 */ 1707945aea22SJiri Olsa }, 1708615b8f99SAlexander Yarygin { 1709945aea22SJiri Olsa .name = "mem:0:r", 1710945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 17118252e791SIan Rogers /* 0 */ 1712945aea22SJiri Olsa }, 1713615b8f99SAlexander Yarygin { 1714945aea22SJiri Olsa .name = "mem:0:w", 1715945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 17168252e791SIan Rogers /* 1 */ 1717945aea22SJiri Olsa }, 1718*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1719615b8f99SAlexander Yarygin { 172043f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1721945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 17228252e791SIan Rogers /* 2 */ 1723945aea22SJiri Olsa }, 1724615b8f99SAlexander Yarygin { 1725945aea22SJiri Olsa .name = "syscalls:*:u", 1726945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 17278252e791SIan Rogers /* 3 */ 1728945aea22SJiri Olsa }, 1729*378ef0f5SIan Rogers #endif 1730615b8f99SAlexander Yarygin { 1731945aea22SJiri Olsa .name = "r1a:kp", 1732945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 17338252e791SIan Rogers /* 4 */ 1734945aea22SJiri Olsa }, 1735615b8f99SAlexander Yarygin { 1736945aea22SJiri Olsa .name = "1:1:hp", 1737945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 17388252e791SIan Rogers /* 5 */ 1739945aea22SJiri Olsa }, 1740615b8f99SAlexander Yarygin { 1741945aea22SJiri Olsa .name = "instructions:h", 1742945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 17438252e791SIan Rogers /* 6 */ 1744945aea22SJiri Olsa }, 1745615b8f99SAlexander Yarygin { 1746945aea22SJiri Olsa .name = "faults:u", 1747945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 17488252e791SIan Rogers /* 7 */ 1749945aea22SJiri Olsa }, 1750615b8f99SAlexander Yarygin { 1751945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1752945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 17538252e791SIan Rogers /* 8 */ 1754945aea22SJiri Olsa }, 1755615b8f99SAlexander Yarygin { 1756945aea22SJiri Olsa .name = "mem:0:u", 1757945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 17588252e791SIan Rogers /* 9 */ 1759945aea22SJiri Olsa }, 1760615b8f99SAlexander Yarygin { 1761945aea22SJiri Olsa .name = "mem:0:x:k", 1762945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 17638252e791SIan Rogers /* 0 */ 1764945aea22SJiri Olsa }, 1765615b8f99SAlexander Yarygin { 1766945aea22SJiri Olsa .name = "mem:0:r:hp", 1767945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 17688252e791SIan Rogers /* 1 */ 1769945aea22SJiri Olsa }, 1770615b8f99SAlexander Yarygin { 1771945aea22SJiri Olsa .name = "mem:0:w:up", 1772945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 17738252e791SIan Rogers /* 2 */ 1774945aea22SJiri Olsa }, 1775*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1776615b8f99SAlexander Yarygin { 177743f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1778945aea22SJiri Olsa .check = test__checkevent_list, 17798252e791SIan Rogers /* 3 */ 1780945aea22SJiri Olsa }, 1781*378ef0f5SIan Rogers #endif 1782615b8f99SAlexander Yarygin { 1783945aea22SJiri Olsa .name = "instructions:G", 1784945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 17858252e791SIan Rogers /* 4 */ 1786945aea22SJiri Olsa }, 1787615b8f99SAlexander Yarygin { 1788945aea22SJiri Olsa .name = "instructions:H", 1789945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 17908252e791SIan Rogers /* 5 */ 1791945aea22SJiri Olsa }, 1792615b8f99SAlexander Yarygin { 1793945aea22SJiri Olsa .name = "mem:0:rw", 1794945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 17958252e791SIan Rogers /* 6 */ 1796945aea22SJiri Olsa }, 1797615b8f99SAlexander Yarygin { 1798945aea22SJiri Olsa .name = "mem:0:rw:kp", 1799945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 18008252e791SIan Rogers /* 7 */ 1801945aea22SJiri Olsa }, 1802615b8f99SAlexander Yarygin { 1803945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1804945aea22SJiri Olsa .check = test__group1, 18058252e791SIan Rogers /* 8 */ 1806945aea22SJiri Olsa }, 1807615b8f99SAlexander Yarygin { 1808945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1809945aea22SJiri Olsa .check = test__group2, 18108252e791SIan Rogers /* 9 */ 1811945aea22SJiri Olsa }, 1812*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1813615b8f99SAlexander Yarygin { 181443f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1815945aea22SJiri Olsa .check = test__group3, 18168252e791SIan Rogers /* 0 */ 1817945aea22SJiri Olsa }, 1818*378ef0f5SIan Rogers #endif 1819615b8f99SAlexander Yarygin { 1820945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1821945aea22SJiri Olsa .check = test__group4, 18228252e791SIan Rogers /* 1 */ 1823945aea22SJiri Olsa }, 1824615b8f99SAlexander Yarygin { 1825945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1826945aea22SJiri Olsa .check = test__group5, 18278252e791SIan Rogers /* 2 */ 1828945aea22SJiri Olsa }, 1829*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1830615b8f99SAlexander Yarygin { 183182ce75d9SJiri Olsa .name = "*:*", 183282ce75d9SJiri Olsa .check = test__all_tracepoints, 18338252e791SIan Rogers /* 3 */ 183482ce75d9SJiri Olsa }, 1835*378ef0f5SIan Rogers #endif 1836615b8f99SAlexander Yarygin { 18375a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 18385a30a99fSJiri Olsa .check = test__group_gh1, 18398252e791SIan Rogers /* 4 */ 18405a30a99fSJiri Olsa }, 1841615b8f99SAlexander Yarygin { 18425a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 18435a30a99fSJiri Olsa .check = test__group_gh2, 18448252e791SIan Rogers /* 5 */ 18455a30a99fSJiri Olsa }, 1846615b8f99SAlexander Yarygin { 18475a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 18485a30a99fSJiri Olsa .check = test__group_gh3, 18498252e791SIan Rogers /* 6 */ 18505a30a99fSJiri Olsa }, 1851615b8f99SAlexander Yarygin { 18525a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 18535a30a99fSJiri Olsa .check = test__group_gh4, 18548252e791SIan Rogers /* 7 */ 18555a30a99fSJiri Olsa }, 1856615b8f99SAlexander Yarygin { 1857a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1858a9f93f97SJiri Olsa .check = test__leader_sample1, 18598252e791SIan Rogers /* 8 */ 1860a9f93f97SJiri Olsa }, 1861615b8f99SAlexander Yarygin { 1862a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1863a9f93f97SJiri Olsa .check = test__leader_sample2, 18648252e791SIan Rogers /* 9 */ 1865a9f93f97SJiri Olsa }, 1866615b8f99SAlexander Yarygin { 1867c9ee780fSMichael Ellerman .name = "instructions:uDp", 1868c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 18698252e791SIan Rogers /* 0 */ 1870c9ee780fSMichael Ellerman }, 1871615b8f99SAlexander Yarygin { 1872c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1873c9ee780fSMichael Ellerman .check = test__pinned_group, 18748252e791SIan Rogers /* 1 */ 1875c9ee780fSMichael Ellerman }, 1876ec32398cSJacob Shin { 1877ec32398cSJacob Shin .name = "mem:0/1", 1878ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 18798252e791SIan Rogers /* 2 */ 1880ec32398cSJacob Shin }, 1881ec32398cSJacob Shin { 1882ec32398cSJacob Shin .name = "mem:0/2:w", 1883ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 18848252e791SIan Rogers /* 3 */ 1885ec32398cSJacob Shin }, 1886ec32398cSJacob Shin { 1887ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1888ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 18898252e791SIan Rogers /* 4 */ 1890ec32398cSJacob Shin }, 1891*378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 1892c0bc8c6dSAlexander Yarygin { 1893c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1894c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 189553fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 18968252e791SIan Rogers /* 0 */ 1897c0bc8c6dSAlexander Yarygin }, 1898c0bc8c6dSAlexander Yarygin #endif 1899a1e12da4SJiri Olsa { 1900a1e12da4SJiri Olsa .name = "instructions:I", 1901a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 19028252e791SIan Rogers /* 5 */ 1903a1e12da4SJiri Olsa }, 1904a1e12da4SJiri Olsa { 1905a1e12da4SJiri Olsa .name = "instructions:kIG", 1906a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 19078252e791SIan Rogers /* 6 */ 1908a1e12da4SJiri Olsa }, 1909ddd83c97SJiri Olsa { 1910ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1911ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 19128252e791SIan Rogers /* 7 */ 1913ddd83c97SJiri Olsa }, 191410bf358aSWang Nan { 191510bf358aSWang Nan .name = "instructions/name=insn/", 191610bf358aSWang Nan .check = test__checkevent_config_symbol, 19178252e791SIan Rogers /* 8 */ 191810bf358aSWang Nan }, 191910bf358aSWang Nan { 192010bf358aSWang Nan .name = "r1234/name=rawpmu/", 192110bf358aSWang Nan .check = test__checkevent_config_raw, 19228252e791SIan Rogers /* 9 */ 192310bf358aSWang Nan }, 192410bf358aSWang Nan { 192510bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 192610bf358aSWang Nan .check = test__checkevent_config_num, 19278252e791SIan Rogers /* 0 */ 192810bf358aSWang Nan }, 192943d0b978SWang Nan { 193043d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 193143d0b978SWang Nan .check = test__checkevent_config_cache, 19328252e791SIan Rogers /* 1 */ 193343d0b978SWang Nan }, 1934b3f58c8dSArnaldo Carvalho de Melo { 1935b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 193616ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1937b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 19388252e791SIan Rogers /* 2 */ 1939b3f58c8dSArnaldo Carvalho de Melo }, 194006dc5bf2SAlexey Budankov { 194106dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 194206dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 19438252e791SIan Rogers /* 3 */ 1944714a92d8SJiri Olsa }, 1945714a92d8SJiri Olsa { 1946714a92d8SJiri Olsa .name = "cycles//u", 1947714a92d8SJiri Olsa .check = test__sym_event_slash, 19488252e791SIan Rogers /* 4 */ 1949714a92d8SJiri Olsa }, 1950714a92d8SJiri Olsa { 1951714a92d8SJiri Olsa .name = "cycles:k", 1952714a92d8SJiri Olsa .check = test__sym_event_dc, 19538252e791SIan Rogers /* 5 */ 19540997a266SAndi Kleen }, 19550997a266SAndi Kleen { 19560997a266SAndi Kleen .name = "instructions:uep", 19570997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 19588252e791SIan Rogers /* 6 */ 19590997a266SAndi Kleen }, 19600997a266SAndi Kleen { 19610997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 19620997a266SAndi Kleen .check = test__exclusive_group, 19638252e791SIan Rogers /* 7 */ 19640997a266SAndi Kleen }, 1965945aea22SJiri Olsa }; 1966945aea22SJiri Olsa 19678252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 1968615b8f99SAlexander Yarygin { 1969945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1970945aea22SJiri Olsa .check = test__checkevent_pmu, 19718252e791SIan Rogers /* 0 */ 1972945aea22SJiri Olsa }, 1973615b8f99SAlexander Yarygin { 1974945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1975945aea22SJiri Olsa .check = test__checkevent_pmu_name, 19768252e791SIan Rogers /* 1 */ 1977945aea22SJiri Olsa }, 197871ef150eSKan Liang { 197971ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 198071ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 19818252e791SIan Rogers /* 2 */ 198271ef150eSKan Liang }, 198306dc5bf2SAlexey Budankov { 1984a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 198506dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 19868252e791SIan Rogers /* 3 */ 19873a6c51e4SJiri Olsa }, 19883a6c51e4SJiri Olsa { 19893a6c51e4SJiri Olsa .name = "software/r1a/", 19903a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 19918252e791SIan Rogers /* 4 */ 19923a6c51e4SJiri Olsa }, 1993c33cdf54SJiri Olsa { 1994c33cdf54SJiri Olsa .name = "software/r0x1a/", 1995c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 19968252e791SIan Rogers /* 5 */ 1997c33cdf54SJiri Olsa }, 1998945aea22SJiri Olsa }; 1999945aea22SJiri Olsa 200023b6339bSArnaldo Carvalho de Melo struct terms_test { 2001945aea22SJiri Olsa const char *str; 2002945aea22SJiri Olsa int (*check)(struct list_head *terms); 2003945aea22SJiri Olsa }; 2004945aea22SJiri Olsa 2005b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2006945aea22SJiri Olsa [0] = { 20074929e95aSJiri Olsa .str = "config=10,config1,config2=3,umask=1,read,r0xead", 2008945aea22SJiri Olsa .check = test__checkterms_simple, 2009945aea22SJiri Olsa }, 2010945aea22SJiri Olsa }; 2011945aea22SJiri Olsa 20128252e791SIan Rogers static const struct evlist_test test__hybrid_events[] = { 20132541cb63SJin Yao { 20142541cb63SJin Yao .name = "cpu_core/cpu-cycles/", 20152541cb63SJin Yao .check = test__hybrid_hw_event_with_pmu, 20168252e791SIan Rogers /* 0 */ 20172541cb63SJin Yao }, 20182541cb63SJin Yao { 20192541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu_core/instructions/}", 20202541cb63SJin Yao .check = test__hybrid_hw_group_event, 20218252e791SIan Rogers /* 1 */ 20222541cb63SJin Yao }, 20232541cb63SJin Yao { 20242541cb63SJin Yao .name = "{cpu-clock,cpu_core/cpu-cycles/}", 20252541cb63SJin Yao .check = test__hybrid_sw_hw_group_event, 20268252e791SIan Rogers /* 2 */ 20272541cb63SJin Yao }, 20282541cb63SJin Yao { 20292541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu-clock}", 20302541cb63SJin Yao .check = test__hybrid_hw_sw_group_event, 20318252e791SIan Rogers /* 3 */ 20322541cb63SJin Yao }, 20332541cb63SJin Yao { 20342541cb63SJin Yao .name = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}", 20352541cb63SJin Yao .check = test__hybrid_group_modifier1, 20368252e791SIan Rogers /* 4 */ 20372541cb63SJin Yao }, 20382541cb63SJin Yao { 20392541cb63SJin Yao .name = "r1a", 20402541cb63SJin Yao .check = test__hybrid_raw1, 20418252e791SIan Rogers /* 5 */ 20422541cb63SJin Yao }, 20432541cb63SJin Yao { 20442541cb63SJin Yao .name = "cpu_core/r1a/", 20452541cb63SJin Yao .check = test__hybrid_raw2, 20468252e791SIan Rogers /* 6 */ 20472541cb63SJin Yao }, 20482541cb63SJin Yao { 20492541cb63SJin Yao .name = "cpu_core/config=10,config1,config2=3,period=1000/u", 20502541cb63SJin Yao .check = test__checkevent_pmu, 20518252e791SIan Rogers /* 7 */ 20522541cb63SJin Yao }, 20532541cb63SJin Yao { 2054490e9a8fSJin Yao .name = "cpu_core/LLC-loads/", 20552541cb63SJin Yao .check = test__hybrid_cache_event, 20568252e791SIan Rogers /* 8 */ 20572541cb63SJin Yao }, 20582541cb63SJin Yao }; 20592541cb63SJin Yao 20608252e791SIan Rogers static int test_event(const struct evlist_test *e) 2061945aea22SJiri Olsa { 2062a910e466SIan Rogers struct parse_events_error err; 206363503dbaSJiri Olsa struct evlist *evlist; 2064945aea22SJiri Olsa int ret; 2065945aea22SJiri Olsa 206616ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 20677741e03eSIan Rogers pr_debug("... SKIP\n"); 20687741e03eSIan Rogers return TEST_OK; 206916ddcfbfSJiri Olsa } 207016ddcfbfSJiri Olsa 20710f98b11cSJiri Olsa evlist = evlist__new(); 20727741e03eSIan Rogers if (evlist == NULL) { 20737741e03eSIan Rogers pr_err("Failed allocation"); 20747741e03eSIan Rogers return TEST_FAIL; 20757741e03eSIan Rogers } 207607eafd4eSIan Rogers parse_events_error__init(&err); 2077933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2078945aea22SJiri Olsa if (ret) { 2079933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2080933ccf20SJiri Olsa e->name, ret, err.str); 20816c191289SIan Rogers parse_events_error__print(&err, e->name); 20827741e03eSIan Rogers ret = TEST_FAIL; 20837741e03eSIan Rogers if (strstr(err.str, "can't access trace events")) 20847741e03eSIan Rogers ret = TEST_SKIP; 20852d4352c0SArnaldo Carvalho de Melo } else { 20862d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2087945aea22SJiri Olsa } 208807eafd4eSIan Rogers parse_events_error__exit(&err); 2089c12995a5SJiri Olsa evlist__delete(evlist); 2090945aea22SJiri Olsa 2091945aea22SJiri Olsa return ret; 2092945aea22SJiri Olsa } 2093945aea22SJiri Olsa 2094b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2095b4a7276cSJohn Garry { 2096b4a7276cSJohn Garry struct parse_events_error err; 2097b4a7276cSJohn Garry struct evlist *evlist; 2098b4a7276cSJohn Garry int ret; 2099b4a7276cSJohn Garry 2100b4a7276cSJohn Garry evlist = evlist__new(); 2101b4a7276cSJohn Garry if (!evlist) 2102b4a7276cSJohn Garry return -ENOMEM; 2103b4a7276cSJohn Garry 2104b4a7276cSJohn Garry parse_events_error__init(&err); 2105b4a7276cSJohn Garry perf_pmu__test_parse_init(); 2106b4a7276cSJohn Garry ret = __parse_events(evlist, str, &err, &perf_pmu__fake); 2107b4a7276cSJohn Garry if (ret) { 2108b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2109b4a7276cSJohn Garry str, ret, err.str); 2110b4a7276cSJohn Garry parse_events_error__print(&err, str); 2111b4a7276cSJohn Garry } 2112b4a7276cSJohn Garry 2113b4a7276cSJohn Garry parse_events_error__exit(&err); 2114b4a7276cSJohn Garry evlist__delete(evlist); 2115b4a7276cSJohn Garry 2116b4a7276cSJohn Garry return ret; 2117b4a7276cSJohn Garry } 2118b4a7276cSJohn Garry 21197741e03eSIan Rogers static int combine_test_results(int existing, int latest) 21207741e03eSIan Rogers { 21217741e03eSIan Rogers if (existing == TEST_FAIL) 21227741e03eSIan Rogers return TEST_FAIL; 21237741e03eSIan Rogers if (existing == TEST_SKIP) 21247741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 21257741e03eSIan Rogers return latest; 21267741e03eSIan Rogers } 21277741e03eSIan Rogers 21288252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2129945aea22SJiri Olsa { 21307741e03eSIan Rogers int ret = TEST_OK; 2131945aea22SJiri Olsa 21328252e791SIan Rogers for (int i = 0; i < cnt; i++) { 21338252e791SIan Rogers const struct evlist_test *e = &events[i]; 21347741e03eSIan Rogers int test_ret; 2135945aea22SJiri Olsa 21367741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 21377741e03eSIan Rogers test_ret = test_event(e); 21387741e03eSIan Rogers if (test_ret != TEST_OK) { 21397741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 21407741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 21417741e03eSIan Rogers } 2142945aea22SJiri Olsa } 2143945aea22SJiri Olsa 21447741e03eSIan Rogers return ret; 21457741e03eSIan Rogers } 21467741e03eSIan Rogers 21477741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21487741e03eSIan Rogers { 21497741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2150945aea22SJiri Olsa } 2151945aea22SJiri Olsa 2152b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2153945aea22SJiri Olsa { 2154c549aca5SDavid Ahern struct list_head terms; 2155945aea22SJiri Olsa int ret; 2156945aea22SJiri Olsa 2157c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2158945aea22SJiri Olsa 21594929e95aSJiri Olsa /* 21604929e95aSJiri Olsa * The perf_pmu__test_parse_init prepares perf_pmu_events_list 21614929e95aSJiri Olsa * which gets freed in parse_events_terms. 21624929e95aSJiri Olsa */ 21634929e95aSJiri Olsa if (perf_pmu__test_parse_init()) 21644929e95aSJiri Olsa return -1; 21654929e95aSJiri Olsa 2166c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2167945aea22SJiri Olsa if (ret) { 2168945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2169945aea22SJiri Olsa t->str , ret); 2170945aea22SJiri Olsa return ret; 2171945aea22SJiri Olsa } 2172945aea22SJiri Olsa 2173c549aca5SDavid Ahern ret = t->check(&terms); 2174682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2175945aea22SJiri Olsa 2176945aea22SJiri Olsa return ret; 2177945aea22SJiri Olsa } 2178945aea22SJiri Olsa 2179b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2180945aea22SJiri Olsa { 2181945aea22SJiri Olsa int ret = 0; 2182945aea22SJiri Olsa 2183b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2184b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2185945aea22SJiri Olsa 2186945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2187945aea22SJiri Olsa ret = test_term(t); 2188945aea22SJiri Olsa if (ret) 2189945aea22SJiri Olsa break; 2190945aea22SJiri Olsa } 2191945aea22SJiri Olsa 2192945aea22SJiri Olsa return ret; 2193945aea22SJiri Olsa } 2194945aea22SJiri Olsa 21957741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21967741e03eSIan Rogers { 21977741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 21987741e03eSIan Rogers } 21997741e03eSIan Rogers 2200945aea22SJiri Olsa static int test_pmu(void) 2201945aea22SJiri Olsa { 2202945aea22SJiri Olsa struct stat st; 2203945aea22SJiri Olsa char path[PATH_MAX]; 2204945aea22SJiri Olsa int ret; 2205945aea22SJiri Olsa 2206945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 2207cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 2208945aea22SJiri Olsa 2209945aea22SJiri Olsa ret = stat(path, &st); 2210945aea22SJiri Olsa if (ret) 2211945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 2212945aea22SJiri Olsa return !ret; 2213945aea22SJiri Olsa } 2214945aea22SJiri Olsa 22157741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2216945aea22SJiri Olsa { 2217945aea22SJiri Olsa struct stat st; 2218945aea22SJiri Olsa char path[PATH_MAX]; 2219945aea22SJiri Olsa struct dirent *ent; 2220945aea22SJiri Olsa DIR *dir; 2221945aea22SJiri Olsa int ret; 2222945aea22SJiri Olsa 22237741e03eSIan Rogers if (!test_pmu()) 22247741e03eSIan Rogers return TEST_SKIP; 22257741e03eSIan Rogers 2226945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 2227cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 2228945aea22SJiri Olsa 2229945aea22SJiri Olsa ret = stat(path, &st); 2230945aea22SJiri Olsa if (ret) { 22317741e03eSIan Rogers pr_debug("omitting PMU cpu events tests: %s\n", path); 22327741e03eSIan Rogers return TEST_OK; 2233945aea22SJiri Olsa } 2234945aea22SJiri Olsa 2235945aea22SJiri Olsa dir = opendir(path); 2236945aea22SJiri Olsa if (!dir) { 22377741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 22387741e03eSIan Rogers return TEST_FAIL; 2239945aea22SJiri Olsa } 2240945aea22SJiri Olsa 22417741e03eSIan Rogers ret = TEST_OK; 22427741e03eSIan Rogers while ((ent = readdir(dir))) { 22438252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 22442e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 22457741e03eSIan Rogers int test_ret; 2246945aea22SJiri Olsa 224717a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 224817a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2249945aea22SJiri Olsa continue; 2250945aea22SJiri Olsa 22512e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name); 2252945aea22SJiri Olsa 2253945aea22SJiri Olsa e.name = name; 2254945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2255945aea22SJiri Olsa 22567741e03eSIan Rogers test_ret = test_event(&e); 22577741e03eSIan Rogers if (test_ret != TEST_OK) { 22587741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22597741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22607741e03eSIan Rogers } 2261146edff3SIan Rogers /* 2262146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2263146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2264146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2265146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2266146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2267146edff3SIan Rogers * isn't expected after this. As event names in the config 2268146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2269146edff3SIan Rogers * above. 2270146edff3SIan Rogers */ 2271146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2272146edff3SIan Rogers continue; 2273146edff3SIan Rogers 22742e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 2275ffe59788SKan Liang e.name = name; 2276ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 22777741e03eSIan Rogers test_ret = test_event(&e); 22787741e03eSIan Rogers if (test_ret != TEST_OK) { 22797741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22807741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22817741e03eSIan Rogers } 2282945aea22SJiri Olsa } 2283945aea22SJiri Olsa 2284945aea22SJiri Olsa closedir(dir); 2285945aea22SJiri Olsa return ret; 2286945aea22SJiri Olsa } 2287945aea22SJiri Olsa 22887741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 22897741e03eSIan Rogers { 22907741e03eSIan Rogers if (!test_pmu()) 22917741e03eSIan Rogers return TEST_SKIP; 22927741e03eSIan Rogers 22937741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 22947741e03eSIan Rogers } 22957741e03eSIan Rogers 2296c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2297c7a3828dSJin Yao { 2298c7a3828dSJin Yao char path[PATH_MAX]; 2299c7a3828dSJin Yao DIR *dir; 2300c7a3828dSJin Yao struct dirent *dent; 2301c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2302c7a3828dSJin Yao char buf[128]; 2303c7a3828dSJin Yao FILE *file; 2304c7a3828dSJin Yao 2305c7a3828dSJin Yao if (!sysfs) 2306c7a3828dSJin Yao return false; 2307c7a3828dSJin Yao 2308c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2309c7a3828dSJin Yao dir = opendir(path); 2310c7a3828dSJin Yao if (!dir) 2311c7a3828dSJin Yao return false; 2312c7a3828dSJin Yao 2313c7a3828dSJin Yao while ((dent = readdir(dir))) { 2314c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2315c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2316c7a3828dSJin Yao continue; 2317c7a3828dSJin Yao 2318c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2319c7a3828dSJin Yao sysfs, dent->d_name); 2320c7a3828dSJin Yao 2321c7a3828dSJin Yao if (!file_available(path)) 2322c7a3828dSJin Yao continue; 2323c7a3828dSJin Yao 2324c7a3828dSJin Yao file = fopen(path, "r"); 2325c7a3828dSJin Yao if (!file) 2326c7a3828dSJin Yao continue; 2327c7a3828dSJin Yao 2328c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2329c7a3828dSJin Yao fclose(file); 2330c7a3828dSJin Yao continue; 2331c7a3828dSJin Yao } 2332c7a3828dSJin Yao 2333c7a3828dSJin Yao /* Remove the last '\n' */ 2334c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2335c7a3828dSJin Yao 2336c7a3828dSJin Yao fclose(file); 2337c7a3828dSJin Yao *event = strdup(dent->d_name); 2338c7a3828dSJin Yao *alias = strdup(buf); 2339c7a3828dSJin Yao closedir(dir); 2340c7a3828dSJin Yao 2341c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2342c7a3828dSJin Yao free(*event); 2343c7a3828dSJin Yao free(*alias); 2344c7a3828dSJin Yao return false; 2345c7a3828dSJin Yao } 2346c7a3828dSJin Yao 2347c7a3828dSJin Yao return true; 2348c7a3828dSJin Yao } 2349c7a3828dSJin Yao 2350c7a3828dSJin Yao closedir(dir); 2351c7a3828dSJin Yao return false; 2352c7a3828dSJin Yao } 2353c7a3828dSJin Yao 23547741e03eSIan Rogers static int test__hybrid(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23557741e03eSIan Rogers { 23567741e03eSIan Rogers if (!perf_pmu__has_hybrid()) 23577741e03eSIan Rogers return TEST_SKIP; 23587741e03eSIan Rogers 23597741e03eSIan Rogers return test_events(test__hybrid_events, ARRAY_SIZE(test__hybrid_events)); 23607741e03eSIan Rogers } 23617741e03eSIan Rogers 2362c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2363c7a3828dSJin Yao { 2364c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2365c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2366c7a3828dSJin Yao 2367c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2368c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 23697741e03eSIan Rogers return TEST_OK; 2370c7a3828dSJin Yao } 2371c7a3828dSJin Yao 23727741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2373c7a3828dSJin Yao { 23748252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2375c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2376c7a3828dSJin Yao 2377c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2378c7a3828dSJin Yao event, alias); 2379c7a3828dSJin Yao 2380c7a3828dSJin Yao e.name = name; 2381c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2382c7a3828dSJin Yao return test_event(&e); 2383c7a3828dSJin Yao } 2384c7a3828dSJin Yao 23857741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23867741e03eSIan Rogers { 23877741e03eSIan Rogers char *event, *alias; 23887741e03eSIan Rogers int ret; 23897741e03eSIan Rogers 23907741e03eSIan Rogers if (!test_alias(&event, &alias)) 23917741e03eSIan Rogers return TEST_SKIP; 23927741e03eSIan Rogers 23937741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 23947741e03eSIan Rogers 23957741e03eSIan Rogers free(event); 23967741e03eSIan Rogers free(alias); 23977741e03eSIan Rogers return ret; 23987741e03eSIan Rogers } 23997741e03eSIan Rogers 24007741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 24017741e03eSIan Rogers int subtest __maybe_unused) 2402b4a7276cSJohn Garry { 2403b4a7276cSJohn Garry static const char events[][30] = { 2404b4a7276cSJohn Garry "event-hyphen", 2405b4a7276cSJohn Garry "event-two-hyph", 2406b4a7276cSJohn Garry }; 24077741e03eSIan Rogers int ret = TEST_OK; 2408b4a7276cSJohn Garry 24097741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 24107741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 24117741e03eSIan Rogers 24127741e03eSIan Rogers if (test_ret != TEST_OK) { 24137741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 24147741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2415b4a7276cSJohn Garry } 2416b4a7276cSJohn Garry } 2417b4a7276cSJohn Garry 2418b4a7276cSJohn Garry return ret; 2419b4a7276cSJohn Garry } 2420b4a7276cSJohn Garry 24217741e03eSIan Rogers static struct test_case tests__parse_events[] = { 24227741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 24237741e03eSIan Rogers events2, 24247741e03eSIan Rogers "permissions"), 24257741e03eSIan Rogers TEST_CASE_REASON("Test parsing of \"hybrid\" CPU events", 24267741e03eSIan Rogers hybrid, 24277741e03eSIan Rogers "not hybrid"), 24287741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 24297741e03eSIan Rogers pmu_events, 24307741e03eSIan Rogers "permissions"), 24317741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 24327741e03eSIan Rogers pmu_events2, 24337741e03eSIan Rogers "permissions"), 24347741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 24357741e03eSIan Rogers "no aliases in sysfs"), 24367741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 24377741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 24387741e03eSIan Rogers { .name = NULL, } 24397741e03eSIan Rogers }; 2440945aea22SJiri Olsa 24417741e03eSIan Rogers struct test_suite suite__parse_events = { 24427741e03eSIan Rogers .desc = "Parse event definition strings", 24437741e03eSIan Rogers .test_cases = tests__parse_events, 24447741e03eSIan Rogers }; 2445