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 23378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 24378ef0f5SIan 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); 569d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 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); 699d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 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 } 81378ef0f5SIan 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 228378ef0f5SIan 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 } 259378ef0f5SIan 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); 452*204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 453ee4c7588SJiri Olsa /* 45478e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 455ee4c7588SJiri Olsa * while this test executes only parse events method. 456ee4c7588SJiri Olsa */ 4571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 458945aea22SJiri Olsa 4597741e03eSIan Rogers return TEST_OK; 460945aea22SJiri Olsa } 461945aea22SJiri Olsa 462378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 46363503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 464945aea22SJiri Olsa { 465515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 466945aea22SJiri Olsa 4676484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 468945aea22SJiri Olsa 469945aea22SJiri Olsa /* r1 */ 4701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 474*204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 4751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 479945aea22SJiri Olsa 48043f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 481e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 483945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 4841fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 490945aea22SJiri Olsa 491945aea22SJiri Olsa /* 1:1:hp */ 492e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 4941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 499945aea22SJiri Olsa 5007741e03eSIan Rogers return TEST_OK; 501945aea22SJiri Olsa } 502378ef0f5SIan Rogers #endif 503945aea22SJiri Olsa 50463503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 505945aea22SJiri Olsa { 506515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 507945aea22SJiri Olsa 508945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 5096484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 5128ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 513945aea22SJiri Olsa 514945aea22SJiri Olsa /* cpu/config=2/u" */ 515e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5166484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 519945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5208ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 521945aea22SJiri Olsa 5227741e03eSIan Rogers return TEST_OK; 523945aea22SJiri Olsa } 524945aea22SJiri Olsa 52563503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 52671ef150eSKan Liang { 527515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 52871ef150eSKan Liang 52971ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5306484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 53371ef150eSKan Liang /* 53478e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 53571ef150eSKan Liang * while this test executes only parse events method. 53671ef150eSKan Liang */ 5371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 53827de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 54071ef150eSKan Liang 54171ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 542e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 54571ef150eSKan Liang /* 54678e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 54771ef150eSKan Liang * while this test executes only parse events method. 54871ef150eSKan Liang */ 5491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 55027de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 55271ef150eSKan Liang 5537741e03eSIan Rogers return TEST_OK; 55471ef150eSKan Liang } 55571ef150eSKan Liang 55663503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 557945aea22SJiri Olsa { 558515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 559945aea22SJiri Olsa 5606484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 562945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 5631fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 564945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 5651fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5690997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 570945aea22SJiri Olsa 5717741e03eSIan Rogers return TEST_OK; 572945aea22SJiri Olsa } 573945aea22SJiri Olsa 574ffe59788SKan Liang 57563503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 576ffe59788SKan Liang { 577515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 578ffe59788SKan Liang 579ffe59788SKan Liang /* pmu-event:u */ 5806484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 581ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5821fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 583ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5841fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5880997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 589ffe59788SKan Liang 590ffe59788SKan Liang /* cpu/pmu-event/u*/ 591e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5926484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 594ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5951fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 596ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5971fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 6010997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 602ffe59788SKan Liang 6037741e03eSIan Rogers return TEST_OK; 604ffe59788SKan Liang } 605ffe59788SKan Liang 606945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 607945aea22SJiri Olsa { 6086cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 609945aea22SJiri Olsa 610945aea22SJiri Olsa /* config=10 */ 6116cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 612945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 613945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 614945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 615945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 616945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 6174f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 618945aea22SJiri Olsa 619945aea22SJiri Olsa /* config1 */ 6206cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 621945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 622945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 623945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 624945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 625945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6264f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 627945aea22SJiri Olsa 628945aea22SJiri Olsa /* config2=3 */ 6296cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 630945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 631945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 632945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 633945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 634945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 6354f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 636945aea22SJiri Olsa 637*204e7c49SRob Herring /* config3=4 */ 638*204e7c49SRob Herring term = list_entry(term->list.next, struct parse_events_term, list); 639*204e7c49SRob Herring TEST_ASSERT_VAL("wrong type term", 640*204e7c49SRob Herring term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); 641*204e7c49SRob Herring TEST_ASSERT_VAL("wrong type val", 642*204e7c49SRob Herring term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 643*204e7c49SRob Herring TEST_ASSERT_VAL("wrong val", term->val.num == 4); 644*204e7c49SRob Herring TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); 645*204e7c49SRob Herring 646945aea22SJiri Olsa /* umask=1*/ 6476cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 648945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 649945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 650945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 651945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 652945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 653945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 654945aea22SJiri Olsa 6554929e95aSJiri Olsa /* 6564929e95aSJiri Olsa * read 6574929e95aSJiri Olsa * 6584929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 6594929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 6604929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 6614929e95aSJiri Olsa */ 6624929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6634929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6644929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 6654929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6664929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6674929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6684929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read")); 6694929e95aSJiri Olsa 6704929e95aSJiri Olsa /* 6714929e95aSJiri Olsa * r0xead 6724929e95aSJiri Olsa * 6734929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 6744929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 6754929e95aSJiri Olsa */ 6764929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6774929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6784929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 6794929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6804929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6814929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 0xead); 6824f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 6837741e03eSIan Rogers return TEST_OK; 684945aea22SJiri Olsa } 685945aea22SJiri Olsa 68663503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 687945aea22SJiri Olsa { 68832dcd021SJiri Olsa struct evsel *evsel, *leader; 689945aea22SJiri Olsa 6906484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6919d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 692945aea22SJiri Olsa 693945aea22SJiri Olsa /* instructions:k */ 694515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 6951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 696945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6971fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 6981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 704c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7055643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7062bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 707a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 708945aea22SJiri Olsa 709945aea22SJiri Olsa /* cycles:upp */ 710e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 712945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7131fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 717945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 721fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7222bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 723a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 724945aea22SJiri Olsa 7257741e03eSIan Rogers return TEST_OK; 726945aea22SJiri Olsa } 727945aea22SJiri Olsa 72863503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 729945aea22SJiri Olsa { 73032dcd021SJiri Olsa struct evsel *evsel, *leader; 731945aea22SJiri Olsa 7326484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7339d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 734945aea22SJiri Olsa 735945aea22SJiri Olsa /* faults + :ku modifier */ 736515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 738945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7391fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 7401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 743943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 746c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7475643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7482bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 749a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 750945aea22SJiri Olsa 751945aea22SJiri Olsa /* cache-references + :u modifier */ 752e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 754945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7551fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config); 7561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 762fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7632bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 764a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 765945aea22SJiri Olsa 766945aea22SJiri Olsa /* cycles:k */ 767e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 769945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7701fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 777c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 778a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 779945aea22SJiri Olsa 7807741e03eSIan Rogers return TEST_OK; 781945aea22SJiri Olsa } 782945aea22SJiri Olsa 783378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 78463503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 785945aea22SJiri Olsa { 78632dcd021SJiri Olsa struct evsel *evsel, *leader; 787945aea22SJiri Olsa 7886484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7899d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 790945aea22SJiri Olsa 79143f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 792515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 794945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 7951fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 7961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 7971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 803c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 804945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 805945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 8065643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8072bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 808a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 809945aea22SJiri Olsa 810945aea22SJiri Olsa /* group1 cycles:kppp */ 811e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 813945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8141fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 818945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 822fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 823945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8242bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 825a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 826945aea22SJiri Olsa 827945aea22SJiri Olsa /* group2 cycles + G modifier */ 828e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 830945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8311fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 838c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 839945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 840945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8415643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8422bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 843a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 844945aea22SJiri Olsa 845945aea22SJiri Olsa /* group2 1:3 + G modifier */ 846e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config); 8491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 855fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8562bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 857a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 858945aea22SJiri Olsa 859945aea22SJiri Olsa /* instructions:u */ 860e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 862945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8631fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 867943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 870c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 871a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 872945aea22SJiri Olsa 8737741e03eSIan Rogers return TEST_OK; 874945aea22SJiri Olsa } 875378ef0f5SIan Rogers #endif 876945aea22SJiri Olsa 87763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 878945aea22SJiri Olsa { 87932dcd021SJiri Olsa struct evsel *evsel, *leader; 880945aea22SJiri Olsa 8816484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8829d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 883945aea22SJiri Olsa 884945aea22SJiri Olsa /* cycles:u + p */ 885515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 887945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8881fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 892945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 896945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 897c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8985643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8992bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 900a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 901945aea22SJiri Olsa 902945aea22SJiri Olsa /* instructions:kp + p */ 903e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 905945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9061fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 9081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 910945aea22SJiri Olsa /* use of precise requires exclude_guest */ 9111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 914fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9152bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 916a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 917945aea22SJiri Olsa 9187741e03eSIan Rogers return TEST_OK; 919945aea22SJiri Olsa } 920945aea22SJiri Olsa 92163503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 922945aea22SJiri Olsa { 92332dcd021SJiri Olsa struct evsel *evsel, *leader; 924945aea22SJiri Olsa 9256484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9269d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 927945aea22SJiri Olsa 928945aea22SJiri Olsa /* cycles + G */ 929515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 931945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9321fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 939945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 940c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9415643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9422bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 943a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 944945aea22SJiri Olsa 945945aea22SJiri Olsa /* instructions + G */ 946e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 948945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9491fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 956fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9572bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 958a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 959945aea22SJiri Olsa 960945aea22SJiri Olsa /* cycles:G */ 961e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 9621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 963945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9641fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 971945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 972c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9735643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9742bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 975a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 976945aea22SJiri Olsa 977945aea22SJiri Olsa /* instructions:G */ 978e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 980945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9811fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 988fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9892bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 990945aea22SJiri Olsa 991945aea22SJiri Olsa /* cycles */ 992e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 994945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9951fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1002c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 1003945aea22SJiri Olsa 10047741e03eSIan Rogers return TEST_OK; 1005945aea22SJiri Olsa } 1006945aea22SJiri Olsa 100763503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 10085a30a99fSJiri Olsa { 100932dcd021SJiri Olsa struct evsel *evsel, *leader; 10105a30a99fSJiri Olsa 10116484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10129d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10135a30a99fSJiri Olsa 10145a30a99fSJiri Olsa /* cycles + :H group modifier */ 1015515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10175a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10181fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10255a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1026c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10275643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10282bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10295a30a99fSJiri Olsa 10305a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1031e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10335a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10341fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1041fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10422bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10435a30a99fSJiri Olsa 10447741e03eSIan Rogers return TEST_OK; 10455a30a99fSJiri Olsa } 10465a30a99fSJiri Olsa 104763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10485a30a99fSJiri Olsa { 104932dcd021SJiri Olsa struct evsel *evsel, *leader; 10505a30a99fSJiri Olsa 10516484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10529d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10535a30a99fSJiri Olsa 10545a30a99fSJiri Olsa /* cycles + :G group modifier */ 1055515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10575a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10581fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10655a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1066c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10675643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10682bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10695a30a99fSJiri Olsa 10705a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1071e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10735a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10741fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1081fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10822bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10835a30a99fSJiri Olsa 10847741e03eSIan Rogers return TEST_OK; 10855a30a99fSJiri Olsa } 10865a30a99fSJiri Olsa 108763503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10885a30a99fSJiri Olsa { 108932dcd021SJiri Olsa struct evsel *evsel, *leader; 10905a30a99fSJiri Olsa 10916484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10929d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10935a30a99fSJiri Olsa 10945a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1095515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10975a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10981fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11055a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1106c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11075643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11082bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11095a30a99fSJiri Olsa 11105a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1111e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11135a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11141fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1121fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11222bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11235a30a99fSJiri Olsa 11247741e03eSIan Rogers return TEST_OK; 11255a30a99fSJiri Olsa } 11265a30a99fSJiri Olsa 112763503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11285a30a99fSJiri Olsa { 112932dcd021SJiri Olsa struct evsel *evsel, *leader; 11305a30a99fSJiri Olsa 11316484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11329d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 11335a30a99fSJiri Olsa 11345a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1135515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11375a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11381fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11455a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1146c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11475643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11482bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11495a30a99fSJiri Olsa 11505a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1151e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11535a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11541fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1161fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11622bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11635a30a99fSJiri Olsa 11647741e03eSIan Rogers return TEST_OK; 11655a30a99fSJiri Olsa } 11665a30a99fSJiri Olsa 116763503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1168a9f93f97SJiri Olsa { 116932dcd021SJiri Olsa struct evsel *evsel, *leader; 1170a9f93f97SJiri Olsa 11716484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1172a9f93f97SJiri Olsa 1173a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1174515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1176a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11771fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1184a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1185fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1186a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1187a9f93f97SJiri Olsa 1188a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1189e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1191a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11921fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1199fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1200a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1201a9f93f97SJiri Olsa 1202a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1203e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1205a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12061fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1213a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1214fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1215a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1216a9f93f97SJiri Olsa 12177741e03eSIan Rogers return TEST_OK; 1218a9f93f97SJiri Olsa } 1219a9f93f97SJiri Olsa 122063503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1221a9f93f97SJiri Olsa { 122232dcd021SJiri Olsa struct evsel *evsel, *leader; 1223a9f93f97SJiri Olsa 12246484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1225a9f93f97SJiri Olsa 1226a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1227515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1229a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12301fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 12311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1237a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1238fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1239a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1240a9f93f97SJiri Olsa 1241a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1242e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1244a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12451fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1252a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1253fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1254a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1255a9f93f97SJiri Olsa 12567741e03eSIan Rogers return TEST_OK; 1257a9f93f97SJiri Olsa } 1258a9f93f97SJiri Olsa 125963503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1260c9ee780fSMichael Ellerman { 1261515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1262c9ee780fSMichael Ellerman 12631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1268c9ee780fSMichael Ellerman 1269c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1270c9ee780fSMichael Ellerman } 1271c9ee780fSMichael Ellerman 127263503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1273c9ee780fSMichael Ellerman { 127432dcd021SJiri Olsa struct evsel *evsel, *leader; 1275c9ee780fSMichael Ellerman 12766484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1277c9ee780fSMichael Ellerman 1278c9ee780fSMichael Ellerman /* cycles - group leader */ 1279515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1281c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12821fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1283c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1284fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1286c9ee780fSMichael Ellerman 1287c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1288e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1290c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12911fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 12921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1293c9ee780fSMichael Ellerman 1294c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1295e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 1296c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12971fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1299c9ee780fSMichael Ellerman 13007741e03eSIan Rogers return TEST_OK; 1301c9ee780fSMichael Ellerman } 1302c9ee780fSMichael Ellerman 13030997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 13040997a266SAndi Kleen { 13050997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 13060997a266SAndi Kleen 13070997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13080997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13090997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13100997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 13110997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13120997a266SAndi Kleen 13130997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 13140997a266SAndi Kleen } 13150997a266SAndi Kleen 13160997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 13170997a266SAndi Kleen { 13180997a266SAndi Kleen struct evsel *evsel, *leader; 13190997a266SAndi Kleen 13200997a266SAndi Kleen TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 13210997a266SAndi Kleen 13220997a266SAndi Kleen /* cycles - group leader */ 13230997a266SAndi Kleen evsel = leader = evlist__first(evlist); 13240997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13250997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13260997a266SAndi Kleen PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 13270997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1328fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13290997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13300997a266SAndi Kleen 13310997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 13320997a266SAndi Kleen evsel = evsel__next(evsel); 13330997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13340997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13350997a266SAndi Kleen PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 13360997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13370997a266SAndi Kleen 13380997a266SAndi Kleen /* branch-misses - ditto */ 13390997a266SAndi Kleen evsel = evsel__next(evsel); 13400997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13410997a266SAndi Kleen PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 13420997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13430997a266SAndi Kleen 13447741e03eSIan Rogers return TEST_OK; 13450997a266SAndi Kleen } 134663503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1347ec32398cSJacob Shin { 1348515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1349ec32398cSJacob Shin 13506484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1353ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13541fc632ceSJiri Olsa evsel->core.attr.bp_type); 1355ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13561fc632ceSJiri Olsa evsel->core.attr.bp_len); 1357ec32398cSJacob Shin 13587741e03eSIan Rogers return TEST_OK; 1359ec32398cSJacob Shin } 1360ec32398cSJacob Shin 136163503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1362ec32398cSJacob Shin { 1363515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1364ec32398cSJacob Shin 13656484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1368ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13691fc632ceSJiri Olsa evsel->core.attr.bp_type); 1370ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13711fc632ceSJiri Olsa evsel->core.attr.bp_len); 1372ec32398cSJacob Shin 13737741e03eSIan Rogers return TEST_OK; 1374ec32398cSJacob Shin } 1375ec32398cSJacob Shin 1376ec32398cSJacob Shin static int 137763503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1378ec32398cSJacob Shin { 1379515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1380ec32398cSJacob Shin 13811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1385ec32398cSJacob Shin 1386ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1387ec32398cSJacob Shin } 1388ec32398cSJacob Shin 138963503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1390ddd83c97SJiri Olsa { 1391515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1392ddd83c97SJiri Olsa 13936484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1395ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong config", 13961fc632ceSJiri Olsa PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config); 13977741e03eSIan Rogers return TEST_OK; 1398ddd83c97SJiri Olsa } 1399ddd83c97SJiri Olsa 140063503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 140110bf358aSWang Nan { 1402515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 140310bf358aSWang Nan 140410bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0); 14057741e03eSIan Rogers return TEST_OK; 140610bf358aSWang Nan } 140710bf358aSWang Nan 140863503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 140910bf358aSWang Nan { 1410515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 141110bf358aSWang Nan 141210bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0); 14137741e03eSIan Rogers return TEST_OK; 141410bf358aSWang Nan } 141510bf358aSWang Nan 141663503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 141710bf358aSWang Nan { 1418515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 141910bf358aSWang Nan 142010bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0); 14217741e03eSIan Rogers return TEST_OK; 142210bf358aSWang Nan } 142310bf358aSWang Nan 142463503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 142543d0b978SWang Nan { 1426515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 142743d0b978SWang Nan 142843d0b978SWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0); 14297741e03eSIan Rogers return TEST_OK; 143043d0b978SWang Nan } 143110bf358aSWang Nan 143216ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 143316ddcfbfSJiri Olsa { 143416ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 143516ddcfbfSJiri Olsa } 143616ddcfbfSJiri Olsa 143763503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1438b3f58c8dSArnaldo Carvalho de Melo { 1439515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1440b3f58c8dSArnaldo Carvalho de Melo 1441b3f58c8dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0); 14427741e03eSIan Rogers return TEST_OK; 1443b3f58c8dSArnaldo Carvalho de Melo } 1444b3f58c8dSArnaldo Carvalho de Melo 144563503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 144606dc5bf2SAlexey Budankov { 1447515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 144806dc5bf2SAlexey Budankov 144906dc5bf2SAlexey Budankov TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0); 14507741e03eSIan Rogers return TEST_OK; 145106dc5bf2SAlexey Budankov } 145206dc5bf2SAlexey Budankov 14533a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 14543a6c51e4SJiri Olsa { 14553a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 14563a6c51e4SJiri Olsa 14573a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14583a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14593a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 14607741e03eSIan Rogers return TEST_OK; 14613a6c51e4SJiri Olsa } 14623a6c51e4SJiri Olsa 146363503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1464714a92d8SJiri Olsa { 1465515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1466714a92d8SJiri Olsa 14671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14707741e03eSIan Rogers return TEST_OK; 1471714a92d8SJiri Olsa } 1472714a92d8SJiri Olsa 147363503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1474714a92d8SJiri Olsa { 1475515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1476714a92d8SJiri Olsa 14771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 14807741e03eSIan Rogers return TEST_OK; 1481714a92d8SJiri Olsa } 1482714a92d8SJiri Olsa 1483378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 148482ce75d9SJiri Olsa static int count_tracepoints(void) 148582ce75d9SJiri Olsa { 148682ce75d9SJiri Olsa struct dirent *events_ent; 148782ce75d9SJiri Olsa DIR *events_dir; 148882ce75d9SJiri Olsa int cnt = 0; 148982ce75d9SJiri Olsa 14907014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 149182ce75d9SJiri Olsa 149282ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 149382ce75d9SJiri Olsa 149482ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 149525a7d914SArnaldo Carvalho de Melo char *sys_path; 149682ce75d9SJiri Olsa struct dirent *sys_ent; 149782ce75d9SJiri Olsa DIR *sys_dir; 149882ce75d9SJiri Olsa 149982ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 150082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 150182ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 150282ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 150382ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 150482ce75d9SJiri Olsa continue; 150582ce75d9SJiri Olsa 150625a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 150725a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 150882ce75d9SJiri Olsa 150982ce75d9SJiri Olsa sys_dir = opendir(sys_path); 151082ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 151182ce75d9SJiri Olsa 151282ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 151382ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 151482ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 151582ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 151682ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 151782ce75d9SJiri Olsa continue; 151882ce75d9SJiri Olsa 151982ce75d9SJiri Olsa cnt++; 152082ce75d9SJiri Olsa } 152182ce75d9SJiri Olsa 152282ce75d9SJiri Olsa closedir(sys_dir); 152325a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 152482ce75d9SJiri Olsa } 152582ce75d9SJiri Olsa 152682ce75d9SJiri Olsa closedir(events_dir); 152782ce75d9SJiri Olsa return cnt; 152882ce75d9SJiri Olsa } 152982ce75d9SJiri Olsa 153063503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 153182ce75d9SJiri Olsa { 153282ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 15336484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 153482ce75d9SJiri Olsa 153582ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 153682ce75d9SJiri Olsa } 1537378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 153882ce75d9SJiri Olsa 15392541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist) 15402541cb63SJin Yao { 15412541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 15422541cb63SJin Yao 15432541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == 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); 15467741e03eSIan Rogers return TEST_OK; 15472541cb63SJin Yao } 15482541cb63SJin Yao 15492541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist) 15502541cb63SJin Yao { 15512541cb63SJin Yao struct evsel *evsel, *leader; 15522541cb63SJin Yao 15532541cb63SJin Yao evsel = leader = evlist__first(evlist); 15542541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15552541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15562541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1557fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15582541cb63SJin Yao 15592541cb63SJin Yao evsel = evsel__next(evsel); 15602541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15612541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config); 1562fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15637741e03eSIan Rogers return TEST_OK; 15642541cb63SJin Yao } 15652541cb63SJin Yao 15662541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist) 15672541cb63SJin Yao { 15682541cb63SJin Yao struct evsel *evsel, *leader; 15692541cb63SJin Yao 15702541cb63SJin Yao evsel = leader = evlist__first(evlist); 15712541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15722541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1573fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15742541cb63SJin Yao 15752541cb63SJin Yao evsel = evsel__next(evsel); 15762541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15772541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1578fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15797741e03eSIan Rogers return TEST_OK; 15802541cb63SJin Yao } 15812541cb63SJin Yao 15822541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist) 15832541cb63SJin Yao { 15842541cb63SJin Yao struct evsel *evsel, *leader; 15852541cb63SJin Yao 15862541cb63SJin Yao evsel = leader = evlist__first(evlist); 15872541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15882541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15892541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1590fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15912541cb63SJin Yao 15922541cb63SJin Yao evsel = evsel__next(evsel); 15932541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1594fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15957741e03eSIan Rogers return TEST_OK; 15962541cb63SJin Yao } 15972541cb63SJin Yao 15982541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist) 15992541cb63SJin Yao { 16002541cb63SJin Yao struct evsel *evsel, *leader; 16012541cb63SJin Yao 16022541cb63SJin Yao evsel = leader = evlist__first(evlist); 16032541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 16042541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16052541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1606fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 16072541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 16082541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 16092541cb63SJin Yao 16102541cb63SJin Yao evsel = evsel__next(evsel); 16112541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16122541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config); 1613fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 16142541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 16152541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 16167741e03eSIan Rogers return TEST_OK; 16172541cb63SJin Yao } 16182541cb63SJin Yao 16192541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist) 16202541cb63SJin Yao { 16212541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16222541cb63SJin Yao 1623490e9a8fSJin Yao if (!perf_pmu__hybrid_mounted("cpu_atom")) { 1624490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1625490e9a8fSJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 1626490e9a8fSJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16277741e03eSIan Rogers return TEST_OK; 1628490e9a8fSJin Yao } 1629490e9a8fSJin Yao 16302541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 16312541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16322541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16332541cb63SJin Yao 16342541cb63SJin Yao /* The type of second event is randome value */ 16352541cb63SJin Yao evsel = evsel__next(evsel); 16362541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16377741e03eSIan Rogers return TEST_OK; 16382541cb63SJin Yao } 16392541cb63SJin Yao 16402541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist) 16412541cb63SJin Yao { 16422541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16432541cb63SJin Yao 16442541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16452541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16462541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16477741e03eSIan Rogers return TEST_OK; 16482541cb63SJin Yao } 16492541cb63SJin Yao 16502541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist) 16512541cb63SJin Yao { 16522541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16532541cb63SJin Yao 1654490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16552541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 16562541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff)); 16577741e03eSIan Rogers return TEST_OK; 16582541cb63SJin Yao } 16592541cb63SJin Yao 166023b6339bSArnaldo Carvalho de Melo struct evlist_test { 1661945aea22SJiri Olsa const char *name; 166216ddcfbfSJiri Olsa bool (*valid)(void); 166363503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1664945aea22SJiri Olsa }; 1665945aea22SJiri Olsa 16668252e791SIan Rogers static const struct evlist_test test__events[] = { 1667378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1668615b8f99SAlexander Yarygin { 166943f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1670945aea22SJiri Olsa .check = test__checkevent_tracepoint, 16718252e791SIan Rogers /* 0 */ 1672945aea22SJiri Olsa }, 1673615b8f99SAlexander Yarygin { 1674945aea22SJiri Olsa .name = "syscalls:*", 1675945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 16768252e791SIan Rogers /* 1 */ 1677945aea22SJiri Olsa }, 1678378ef0f5SIan Rogers #endif 1679615b8f99SAlexander Yarygin { 1680945aea22SJiri Olsa .name = "r1a", 1681945aea22SJiri Olsa .check = test__checkevent_raw, 16828252e791SIan Rogers /* 2 */ 1683945aea22SJiri Olsa }, 1684615b8f99SAlexander Yarygin { 1685945aea22SJiri Olsa .name = "1:1", 1686945aea22SJiri Olsa .check = test__checkevent_numeric, 16878252e791SIan Rogers /* 3 */ 1688945aea22SJiri Olsa }, 1689615b8f99SAlexander Yarygin { 1690945aea22SJiri Olsa .name = "instructions", 1691945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 16928252e791SIan Rogers /* 4 */ 1693945aea22SJiri Olsa }, 1694615b8f99SAlexander Yarygin { 1695945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1696945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 16978252e791SIan Rogers /* 5 */ 1698945aea22SJiri Olsa }, 1699615b8f99SAlexander Yarygin { 1700945aea22SJiri Olsa .name = "faults", 1701945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 17028252e791SIan Rogers /* 6 */ 1703945aea22SJiri Olsa }, 1704615b8f99SAlexander Yarygin { 1705945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1706945aea22SJiri Olsa .check = test__checkevent_genhw, 17078252e791SIan Rogers /* 7 */ 1708945aea22SJiri Olsa }, 1709615b8f99SAlexander Yarygin { 1710945aea22SJiri Olsa .name = "mem:0", 1711945aea22SJiri Olsa .check = test__checkevent_breakpoint, 17128252e791SIan Rogers /* 8 */ 1713945aea22SJiri Olsa }, 1714615b8f99SAlexander Yarygin { 1715945aea22SJiri Olsa .name = "mem:0:x", 1716945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 17178252e791SIan Rogers /* 9 */ 1718945aea22SJiri Olsa }, 1719615b8f99SAlexander Yarygin { 1720945aea22SJiri Olsa .name = "mem:0:r", 1721945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 17228252e791SIan Rogers /* 0 */ 1723945aea22SJiri Olsa }, 1724615b8f99SAlexander Yarygin { 1725945aea22SJiri Olsa .name = "mem:0:w", 1726945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 17278252e791SIan Rogers /* 1 */ 1728945aea22SJiri Olsa }, 1729378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1730615b8f99SAlexander Yarygin { 173143f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1732945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 17338252e791SIan Rogers /* 2 */ 1734945aea22SJiri Olsa }, 1735615b8f99SAlexander Yarygin { 1736945aea22SJiri Olsa .name = "syscalls:*:u", 1737945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 17388252e791SIan Rogers /* 3 */ 1739945aea22SJiri Olsa }, 1740378ef0f5SIan Rogers #endif 1741615b8f99SAlexander Yarygin { 1742945aea22SJiri Olsa .name = "r1a:kp", 1743945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 17448252e791SIan Rogers /* 4 */ 1745945aea22SJiri Olsa }, 1746615b8f99SAlexander Yarygin { 1747945aea22SJiri Olsa .name = "1:1:hp", 1748945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 17498252e791SIan Rogers /* 5 */ 1750945aea22SJiri Olsa }, 1751615b8f99SAlexander Yarygin { 1752945aea22SJiri Olsa .name = "instructions:h", 1753945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 17548252e791SIan Rogers /* 6 */ 1755945aea22SJiri Olsa }, 1756615b8f99SAlexander Yarygin { 1757945aea22SJiri Olsa .name = "faults:u", 1758945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 17598252e791SIan Rogers /* 7 */ 1760945aea22SJiri Olsa }, 1761615b8f99SAlexander Yarygin { 1762945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1763945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 17648252e791SIan Rogers /* 8 */ 1765945aea22SJiri Olsa }, 1766615b8f99SAlexander Yarygin { 1767945aea22SJiri Olsa .name = "mem:0:u", 1768945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 17698252e791SIan Rogers /* 9 */ 1770945aea22SJiri Olsa }, 1771615b8f99SAlexander Yarygin { 1772945aea22SJiri Olsa .name = "mem:0:x:k", 1773945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 17748252e791SIan Rogers /* 0 */ 1775945aea22SJiri Olsa }, 1776615b8f99SAlexander Yarygin { 1777945aea22SJiri Olsa .name = "mem:0:r:hp", 1778945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 17798252e791SIan Rogers /* 1 */ 1780945aea22SJiri Olsa }, 1781615b8f99SAlexander Yarygin { 1782945aea22SJiri Olsa .name = "mem:0:w:up", 1783945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 17848252e791SIan Rogers /* 2 */ 1785945aea22SJiri Olsa }, 1786378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1787615b8f99SAlexander Yarygin { 178843f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1789945aea22SJiri Olsa .check = test__checkevent_list, 17908252e791SIan Rogers /* 3 */ 1791945aea22SJiri Olsa }, 1792378ef0f5SIan Rogers #endif 1793615b8f99SAlexander Yarygin { 1794945aea22SJiri Olsa .name = "instructions:G", 1795945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 17968252e791SIan Rogers /* 4 */ 1797945aea22SJiri Olsa }, 1798615b8f99SAlexander Yarygin { 1799945aea22SJiri Olsa .name = "instructions:H", 1800945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 18018252e791SIan Rogers /* 5 */ 1802945aea22SJiri Olsa }, 1803615b8f99SAlexander Yarygin { 1804945aea22SJiri Olsa .name = "mem:0:rw", 1805945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 18068252e791SIan Rogers /* 6 */ 1807945aea22SJiri Olsa }, 1808615b8f99SAlexander Yarygin { 1809945aea22SJiri Olsa .name = "mem:0:rw:kp", 1810945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 18118252e791SIan Rogers /* 7 */ 1812945aea22SJiri Olsa }, 1813615b8f99SAlexander Yarygin { 1814945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1815945aea22SJiri Olsa .check = test__group1, 18168252e791SIan Rogers /* 8 */ 1817945aea22SJiri Olsa }, 1818615b8f99SAlexander Yarygin { 1819945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1820945aea22SJiri Olsa .check = test__group2, 18218252e791SIan Rogers /* 9 */ 1822945aea22SJiri Olsa }, 1823378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1824615b8f99SAlexander Yarygin { 182543f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1826945aea22SJiri Olsa .check = test__group3, 18278252e791SIan Rogers /* 0 */ 1828945aea22SJiri Olsa }, 1829378ef0f5SIan Rogers #endif 1830615b8f99SAlexander Yarygin { 1831945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1832945aea22SJiri Olsa .check = test__group4, 18338252e791SIan Rogers /* 1 */ 1834945aea22SJiri Olsa }, 1835615b8f99SAlexander Yarygin { 1836945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1837945aea22SJiri Olsa .check = test__group5, 18388252e791SIan Rogers /* 2 */ 1839945aea22SJiri Olsa }, 1840378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1841615b8f99SAlexander Yarygin { 184282ce75d9SJiri Olsa .name = "*:*", 184382ce75d9SJiri Olsa .check = test__all_tracepoints, 18448252e791SIan Rogers /* 3 */ 184582ce75d9SJiri Olsa }, 1846378ef0f5SIan Rogers #endif 1847615b8f99SAlexander Yarygin { 18485a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 18495a30a99fSJiri Olsa .check = test__group_gh1, 18508252e791SIan Rogers /* 4 */ 18515a30a99fSJiri Olsa }, 1852615b8f99SAlexander Yarygin { 18535a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 18545a30a99fSJiri Olsa .check = test__group_gh2, 18558252e791SIan Rogers /* 5 */ 18565a30a99fSJiri Olsa }, 1857615b8f99SAlexander Yarygin { 18585a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 18595a30a99fSJiri Olsa .check = test__group_gh3, 18608252e791SIan Rogers /* 6 */ 18615a30a99fSJiri Olsa }, 1862615b8f99SAlexander Yarygin { 18635a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 18645a30a99fSJiri Olsa .check = test__group_gh4, 18658252e791SIan Rogers /* 7 */ 18665a30a99fSJiri Olsa }, 1867615b8f99SAlexander Yarygin { 1868a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1869a9f93f97SJiri Olsa .check = test__leader_sample1, 18708252e791SIan Rogers /* 8 */ 1871a9f93f97SJiri Olsa }, 1872615b8f99SAlexander Yarygin { 1873a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1874a9f93f97SJiri Olsa .check = test__leader_sample2, 18758252e791SIan Rogers /* 9 */ 1876a9f93f97SJiri Olsa }, 1877615b8f99SAlexander Yarygin { 1878c9ee780fSMichael Ellerman .name = "instructions:uDp", 1879c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 18808252e791SIan Rogers /* 0 */ 1881c9ee780fSMichael Ellerman }, 1882615b8f99SAlexander Yarygin { 1883c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1884c9ee780fSMichael Ellerman .check = test__pinned_group, 18858252e791SIan Rogers /* 1 */ 1886c9ee780fSMichael Ellerman }, 1887ec32398cSJacob Shin { 1888ec32398cSJacob Shin .name = "mem:0/1", 1889ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 18908252e791SIan Rogers /* 2 */ 1891ec32398cSJacob Shin }, 1892ec32398cSJacob Shin { 1893ec32398cSJacob Shin .name = "mem:0/2:w", 1894ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 18958252e791SIan Rogers /* 3 */ 1896ec32398cSJacob Shin }, 1897ec32398cSJacob Shin { 1898ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1899ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 19008252e791SIan Rogers /* 4 */ 1901ec32398cSJacob Shin }, 1902378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 1903c0bc8c6dSAlexander Yarygin { 1904c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1905c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 190653fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 19078252e791SIan Rogers /* 0 */ 1908c0bc8c6dSAlexander Yarygin }, 1909c0bc8c6dSAlexander Yarygin #endif 1910a1e12da4SJiri Olsa { 1911a1e12da4SJiri Olsa .name = "instructions:I", 1912a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 19138252e791SIan Rogers /* 5 */ 1914a1e12da4SJiri Olsa }, 1915a1e12da4SJiri Olsa { 1916a1e12da4SJiri Olsa .name = "instructions:kIG", 1917a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 19188252e791SIan Rogers /* 6 */ 1919a1e12da4SJiri Olsa }, 1920ddd83c97SJiri Olsa { 1921ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1922ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 19238252e791SIan Rogers /* 7 */ 1924ddd83c97SJiri Olsa }, 192510bf358aSWang Nan { 192610bf358aSWang Nan .name = "instructions/name=insn/", 192710bf358aSWang Nan .check = test__checkevent_config_symbol, 19288252e791SIan Rogers /* 8 */ 192910bf358aSWang Nan }, 193010bf358aSWang Nan { 193110bf358aSWang Nan .name = "r1234/name=rawpmu/", 193210bf358aSWang Nan .check = test__checkevent_config_raw, 19338252e791SIan Rogers /* 9 */ 193410bf358aSWang Nan }, 193510bf358aSWang Nan { 193610bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 193710bf358aSWang Nan .check = test__checkevent_config_num, 19388252e791SIan Rogers /* 0 */ 193910bf358aSWang Nan }, 194043d0b978SWang Nan { 194143d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 194243d0b978SWang Nan .check = test__checkevent_config_cache, 19438252e791SIan Rogers /* 1 */ 194443d0b978SWang Nan }, 1945b3f58c8dSArnaldo Carvalho de Melo { 1946b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 194716ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1948b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 19498252e791SIan Rogers /* 2 */ 1950b3f58c8dSArnaldo Carvalho de Melo }, 195106dc5bf2SAlexey Budankov { 195206dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 195306dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 19548252e791SIan Rogers /* 3 */ 1955714a92d8SJiri Olsa }, 1956714a92d8SJiri Olsa { 1957714a92d8SJiri Olsa .name = "cycles//u", 1958714a92d8SJiri Olsa .check = test__sym_event_slash, 19598252e791SIan Rogers /* 4 */ 1960714a92d8SJiri Olsa }, 1961714a92d8SJiri Olsa { 1962714a92d8SJiri Olsa .name = "cycles:k", 1963714a92d8SJiri Olsa .check = test__sym_event_dc, 19648252e791SIan Rogers /* 5 */ 19650997a266SAndi Kleen }, 19660997a266SAndi Kleen { 19670997a266SAndi Kleen .name = "instructions:uep", 19680997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 19698252e791SIan Rogers /* 6 */ 19700997a266SAndi Kleen }, 19710997a266SAndi Kleen { 19720997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 19730997a266SAndi Kleen .check = test__exclusive_group, 19748252e791SIan Rogers /* 7 */ 19750997a266SAndi Kleen }, 1976945aea22SJiri Olsa }; 1977945aea22SJiri Olsa 19788252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 1979615b8f99SAlexander Yarygin { 1980945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1981945aea22SJiri Olsa .check = test__checkevent_pmu, 19828252e791SIan Rogers /* 0 */ 1983945aea22SJiri Olsa }, 1984615b8f99SAlexander Yarygin { 1985945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1986945aea22SJiri Olsa .check = test__checkevent_pmu_name, 19878252e791SIan Rogers /* 1 */ 1988945aea22SJiri Olsa }, 198971ef150eSKan Liang { 199071ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 199171ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 19928252e791SIan Rogers /* 2 */ 199371ef150eSKan Liang }, 199406dc5bf2SAlexey Budankov { 1995a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 199606dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 19978252e791SIan Rogers /* 3 */ 19983a6c51e4SJiri Olsa }, 19993a6c51e4SJiri Olsa { 20003a6c51e4SJiri Olsa .name = "software/r1a/", 20013a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 20028252e791SIan Rogers /* 4 */ 20033a6c51e4SJiri Olsa }, 2004c33cdf54SJiri Olsa { 2005c33cdf54SJiri Olsa .name = "software/r0x1a/", 2006c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 20078252e791SIan Rogers /* 5 */ 2008c33cdf54SJiri Olsa }, 2009945aea22SJiri Olsa }; 2010945aea22SJiri Olsa 201123b6339bSArnaldo Carvalho de Melo struct terms_test { 2012945aea22SJiri Olsa const char *str; 2013945aea22SJiri Olsa int (*check)(struct list_head *terms); 2014945aea22SJiri Olsa }; 2015945aea22SJiri Olsa 2016b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2017945aea22SJiri Olsa [0] = { 2018*204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 2019945aea22SJiri Olsa .check = test__checkterms_simple, 2020945aea22SJiri Olsa }, 2021945aea22SJiri Olsa }; 2022945aea22SJiri Olsa 20238252e791SIan Rogers static const struct evlist_test test__hybrid_events[] = { 20242541cb63SJin Yao { 20252541cb63SJin Yao .name = "cpu_core/cpu-cycles/", 20262541cb63SJin Yao .check = test__hybrid_hw_event_with_pmu, 20278252e791SIan Rogers /* 0 */ 20282541cb63SJin Yao }, 20292541cb63SJin Yao { 20302541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu_core/instructions/}", 20312541cb63SJin Yao .check = test__hybrid_hw_group_event, 20328252e791SIan Rogers /* 1 */ 20332541cb63SJin Yao }, 20342541cb63SJin Yao { 20352541cb63SJin Yao .name = "{cpu-clock,cpu_core/cpu-cycles/}", 20362541cb63SJin Yao .check = test__hybrid_sw_hw_group_event, 20378252e791SIan Rogers /* 2 */ 20382541cb63SJin Yao }, 20392541cb63SJin Yao { 20402541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu-clock}", 20412541cb63SJin Yao .check = test__hybrid_hw_sw_group_event, 20428252e791SIan Rogers /* 3 */ 20432541cb63SJin Yao }, 20442541cb63SJin Yao { 20452541cb63SJin Yao .name = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}", 20462541cb63SJin Yao .check = test__hybrid_group_modifier1, 20478252e791SIan Rogers /* 4 */ 20482541cb63SJin Yao }, 20492541cb63SJin Yao { 20502541cb63SJin Yao .name = "r1a", 20512541cb63SJin Yao .check = test__hybrid_raw1, 20528252e791SIan Rogers /* 5 */ 20532541cb63SJin Yao }, 20542541cb63SJin Yao { 20552541cb63SJin Yao .name = "cpu_core/r1a/", 20562541cb63SJin Yao .check = test__hybrid_raw2, 20578252e791SIan Rogers /* 6 */ 20582541cb63SJin Yao }, 20592541cb63SJin Yao { 20602541cb63SJin Yao .name = "cpu_core/config=10,config1,config2=3,period=1000/u", 20612541cb63SJin Yao .check = test__checkevent_pmu, 20628252e791SIan Rogers /* 7 */ 20632541cb63SJin Yao }, 20642541cb63SJin Yao { 2065490e9a8fSJin Yao .name = "cpu_core/LLC-loads/", 20662541cb63SJin Yao .check = test__hybrid_cache_event, 20678252e791SIan Rogers /* 8 */ 20682541cb63SJin Yao }, 20692541cb63SJin Yao }; 20702541cb63SJin Yao 20718252e791SIan Rogers static int test_event(const struct evlist_test *e) 2072945aea22SJiri Olsa { 2073a910e466SIan Rogers struct parse_events_error err; 207463503dbaSJiri Olsa struct evlist *evlist; 2075945aea22SJiri Olsa int ret; 2076945aea22SJiri Olsa 207716ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 20787741e03eSIan Rogers pr_debug("... SKIP\n"); 20797741e03eSIan Rogers return TEST_OK; 208016ddcfbfSJiri Olsa } 208116ddcfbfSJiri Olsa 20820f98b11cSJiri Olsa evlist = evlist__new(); 20837741e03eSIan Rogers if (evlist == NULL) { 20847741e03eSIan Rogers pr_err("Failed allocation"); 20857741e03eSIan Rogers return TEST_FAIL; 20867741e03eSIan Rogers } 208707eafd4eSIan Rogers parse_events_error__init(&err); 2088933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2089945aea22SJiri Olsa if (ret) { 2090933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2091933ccf20SJiri Olsa e->name, ret, err.str); 20926c191289SIan Rogers parse_events_error__print(&err, e->name); 20937741e03eSIan Rogers ret = TEST_FAIL; 20947741e03eSIan Rogers if (strstr(err.str, "can't access trace events")) 20957741e03eSIan Rogers ret = TEST_SKIP; 20962d4352c0SArnaldo Carvalho de Melo } else { 20972d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2098945aea22SJiri Olsa } 209907eafd4eSIan Rogers parse_events_error__exit(&err); 2100c12995a5SJiri Olsa evlist__delete(evlist); 2101945aea22SJiri Olsa 2102945aea22SJiri Olsa return ret; 2103945aea22SJiri Olsa } 2104945aea22SJiri Olsa 2105b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2106b4a7276cSJohn Garry { 2107b4a7276cSJohn Garry struct parse_events_error err; 2108b4a7276cSJohn Garry struct evlist *evlist; 2109b4a7276cSJohn Garry int ret; 2110b4a7276cSJohn Garry 2111b4a7276cSJohn Garry evlist = evlist__new(); 2112b4a7276cSJohn Garry if (!evlist) 2113b4a7276cSJohn Garry return -ENOMEM; 2114b4a7276cSJohn Garry 2115b4a7276cSJohn Garry parse_events_error__init(&err); 2116b4a7276cSJohn Garry perf_pmu__test_parse_init(); 2117a4c7d7c5SIan Rogers ret = __parse_events(evlist, str, &err, &perf_pmu__fake, /*warn_if_reordered=*/true); 2118b4a7276cSJohn Garry if (ret) { 2119b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2120b4a7276cSJohn Garry str, ret, err.str); 2121b4a7276cSJohn Garry parse_events_error__print(&err, str); 2122b4a7276cSJohn Garry } 2123b4a7276cSJohn Garry 2124b4a7276cSJohn Garry parse_events_error__exit(&err); 2125b4a7276cSJohn Garry evlist__delete(evlist); 2126b4a7276cSJohn Garry 2127b4a7276cSJohn Garry return ret; 2128b4a7276cSJohn Garry } 2129b4a7276cSJohn Garry 21307741e03eSIan Rogers static int combine_test_results(int existing, int latest) 21317741e03eSIan Rogers { 21327741e03eSIan Rogers if (existing == TEST_FAIL) 21337741e03eSIan Rogers return TEST_FAIL; 21347741e03eSIan Rogers if (existing == TEST_SKIP) 21357741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 21367741e03eSIan Rogers return latest; 21377741e03eSIan Rogers } 21387741e03eSIan Rogers 21398252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2140945aea22SJiri Olsa { 21417741e03eSIan Rogers int ret = TEST_OK; 2142945aea22SJiri Olsa 21438252e791SIan Rogers for (int i = 0; i < cnt; i++) { 21448252e791SIan Rogers const struct evlist_test *e = &events[i]; 21457741e03eSIan Rogers int test_ret; 2146945aea22SJiri Olsa 21477741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 21487741e03eSIan Rogers test_ret = test_event(e); 21497741e03eSIan Rogers if (test_ret != TEST_OK) { 21507741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 21517741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 21527741e03eSIan Rogers } 2153945aea22SJiri Olsa } 2154945aea22SJiri Olsa 21557741e03eSIan Rogers return ret; 21567741e03eSIan Rogers } 21577741e03eSIan Rogers 21587741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21597741e03eSIan Rogers { 21607741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2161945aea22SJiri Olsa } 2162945aea22SJiri Olsa 2163b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2164945aea22SJiri Olsa { 2165c549aca5SDavid Ahern struct list_head terms; 2166945aea22SJiri Olsa int ret; 2167945aea22SJiri Olsa 2168c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2169945aea22SJiri Olsa 21704929e95aSJiri Olsa /* 21714929e95aSJiri Olsa * The perf_pmu__test_parse_init prepares perf_pmu_events_list 21724929e95aSJiri Olsa * which gets freed in parse_events_terms. 21734929e95aSJiri Olsa */ 21744929e95aSJiri Olsa if (perf_pmu__test_parse_init()) 21754929e95aSJiri Olsa return -1; 21764929e95aSJiri Olsa 2177c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2178945aea22SJiri Olsa if (ret) { 2179945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2180945aea22SJiri Olsa t->str , ret); 2181945aea22SJiri Olsa return ret; 2182945aea22SJiri Olsa } 2183945aea22SJiri Olsa 2184c549aca5SDavid Ahern ret = t->check(&terms); 2185682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2186945aea22SJiri Olsa 2187945aea22SJiri Olsa return ret; 2188945aea22SJiri Olsa } 2189945aea22SJiri Olsa 2190b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2191945aea22SJiri Olsa { 2192945aea22SJiri Olsa int ret = 0; 2193945aea22SJiri Olsa 2194b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2195b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2196945aea22SJiri Olsa 2197945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2198945aea22SJiri Olsa ret = test_term(t); 2199945aea22SJiri Olsa if (ret) 2200945aea22SJiri Olsa break; 2201945aea22SJiri Olsa } 2202945aea22SJiri Olsa 2203945aea22SJiri Olsa return ret; 2204945aea22SJiri Olsa } 2205945aea22SJiri Olsa 22067741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 22077741e03eSIan Rogers { 22087741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 22097741e03eSIan Rogers } 22107741e03eSIan Rogers 2211945aea22SJiri Olsa static int test_pmu(void) 2212945aea22SJiri Olsa { 2213945aea22SJiri Olsa struct stat st; 2214945aea22SJiri Olsa char path[PATH_MAX]; 2215945aea22SJiri Olsa int ret; 2216945aea22SJiri Olsa 2217945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 2218cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 2219945aea22SJiri Olsa 2220945aea22SJiri Olsa ret = stat(path, &st); 2221945aea22SJiri Olsa if (ret) 2222945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 2223945aea22SJiri Olsa return !ret; 2224945aea22SJiri Olsa } 2225945aea22SJiri Olsa 22267741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2227945aea22SJiri Olsa { 2228945aea22SJiri Olsa struct stat st; 2229945aea22SJiri Olsa char path[PATH_MAX]; 2230945aea22SJiri Olsa struct dirent *ent; 2231945aea22SJiri Olsa DIR *dir; 2232945aea22SJiri Olsa int ret; 2233945aea22SJiri Olsa 22347741e03eSIan Rogers if (!test_pmu()) 22357741e03eSIan Rogers return TEST_SKIP; 22367741e03eSIan Rogers 2237945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 2238cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 2239945aea22SJiri Olsa 2240945aea22SJiri Olsa ret = stat(path, &st); 2241945aea22SJiri Olsa if (ret) { 22427741e03eSIan Rogers pr_debug("omitting PMU cpu events tests: %s\n", path); 22437741e03eSIan Rogers return TEST_OK; 2244945aea22SJiri Olsa } 2245945aea22SJiri Olsa 2246945aea22SJiri Olsa dir = opendir(path); 2247945aea22SJiri Olsa if (!dir) { 22487741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 22497741e03eSIan Rogers return TEST_FAIL; 2250945aea22SJiri Olsa } 2251945aea22SJiri Olsa 22527741e03eSIan Rogers ret = TEST_OK; 22537741e03eSIan Rogers while ((ent = readdir(dir))) { 22548252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 22552e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 22567741e03eSIan Rogers int test_ret; 2257945aea22SJiri Olsa 225817a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 225917a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2260945aea22SJiri Olsa continue; 2261945aea22SJiri Olsa 22622e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name); 2263945aea22SJiri Olsa 2264945aea22SJiri Olsa e.name = name; 2265945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2266945aea22SJiri Olsa 22677741e03eSIan Rogers test_ret = test_event(&e); 22687741e03eSIan Rogers if (test_ret != TEST_OK) { 22697741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22707741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22717741e03eSIan Rogers } 2272146edff3SIan Rogers /* 2273146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2274146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2275146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2276146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2277146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2278146edff3SIan Rogers * isn't expected after this. As event names in the config 2279146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2280146edff3SIan Rogers * above. 2281146edff3SIan Rogers */ 2282146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2283146edff3SIan Rogers continue; 2284146edff3SIan Rogers 22852e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 2286ffe59788SKan Liang e.name = name; 2287ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 22887741e03eSIan Rogers test_ret = test_event(&e); 22897741e03eSIan Rogers if (test_ret != TEST_OK) { 22907741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22917741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22927741e03eSIan Rogers } 2293945aea22SJiri Olsa } 2294945aea22SJiri Olsa 2295945aea22SJiri Olsa closedir(dir); 2296945aea22SJiri Olsa return ret; 2297945aea22SJiri Olsa } 2298945aea22SJiri Olsa 22997741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23007741e03eSIan Rogers { 23017741e03eSIan Rogers if (!test_pmu()) 23027741e03eSIan Rogers return TEST_SKIP; 23037741e03eSIan Rogers 23047741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 23057741e03eSIan Rogers } 23067741e03eSIan Rogers 2307c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2308c7a3828dSJin Yao { 2309c7a3828dSJin Yao char path[PATH_MAX]; 2310c7a3828dSJin Yao DIR *dir; 2311c7a3828dSJin Yao struct dirent *dent; 2312c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2313c7a3828dSJin Yao char buf[128]; 2314c7a3828dSJin Yao FILE *file; 2315c7a3828dSJin Yao 2316c7a3828dSJin Yao if (!sysfs) 2317c7a3828dSJin Yao return false; 2318c7a3828dSJin Yao 2319c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2320c7a3828dSJin Yao dir = opendir(path); 2321c7a3828dSJin Yao if (!dir) 2322c7a3828dSJin Yao return false; 2323c7a3828dSJin Yao 2324c7a3828dSJin Yao while ((dent = readdir(dir))) { 2325c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2326c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2327c7a3828dSJin Yao continue; 2328c7a3828dSJin Yao 2329c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2330c7a3828dSJin Yao sysfs, dent->d_name); 2331c7a3828dSJin Yao 2332c7a3828dSJin Yao if (!file_available(path)) 2333c7a3828dSJin Yao continue; 2334c7a3828dSJin Yao 2335c7a3828dSJin Yao file = fopen(path, "r"); 2336c7a3828dSJin Yao if (!file) 2337c7a3828dSJin Yao continue; 2338c7a3828dSJin Yao 2339c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2340c7a3828dSJin Yao fclose(file); 2341c7a3828dSJin Yao continue; 2342c7a3828dSJin Yao } 2343c7a3828dSJin Yao 2344c7a3828dSJin Yao /* Remove the last '\n' */ 2345c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2346c7a3828dSJin Yao 2347c7a3828dSJin Yao fclose(file); 2348c7a3828dSJin Yao *event = strdup(dent->d_name); 2349c7a3828dSJin Yao *alias = strdup(buf); 2350c7a3828dSJin Yao closedir(dir); 2351c7a3828dSJin Yao 2352c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2353c7a3828dSJin Yao free(*event); 2354c7a3828dSJin Yao free(*alias); 2355c7a3828dSJin Yao return false; 2356c7a3828dSJin Yao } 2357c7a3828dSJin Yao 2358c7a3828dSJin Yao return true; 2359c7a3828dSJin Yao } 2360c7a3828dSJin Yao 2361c7a3828dSJin Yao closedir(dir); 2362c7a3828dSJin Yao return false; 2363c7a3828dSJin Yao } 2364c7a3828dSJin Yao 23657741e03eSIan Rogers static int test__hybrid(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23667741e03eSIan Rogers { 23677741e03eSIan Rogers if (!perf_pmu__has_hybrid()) 23687741e03eSIan Rogers return TEST_SKIP; 23697741e03eSIan Rogers 23707741e03eSIan Rogers return test_events(test__hybrid_events, ARRAY_SIZE(test__hybrid_events)); 23717741e03eSIan Rogers } 23727741e03eSIan Rogers 2373c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2374c7a3828dSJin Yao { 2375c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2376c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2377c7a3828dSJin Yao 2378c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2379c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 23807741e03eSIan Rogers return TEST_OK; 2381c7a3828dSJin Yao } 2382c7a3828dSJin Yao 23837741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2384c7a3828dSJin Yao { 23858252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2386c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2387c7a3828dSJin Yao 2388c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2389c7a3828dSJin Yao event, alias); 2390c7a3828dSJin Yao 2391c7a3828dSJin Yao e.name = name; 2392c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2393c7a3828dSJin Yao return test_event(&e); 2394c7a3828dSJin Yao } 2395c7a3828dSJin Yao 23967741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23977741e03eSIan Rogers { 23987741e03eSIan Rogers char *event, *alias; 23997741e03eSIan Rogers int ret; 24007741e03eSIan Rogers 24017741e03eSIan Rogers if (!test_alias(&event, &alias)) 24027741e03eSIan Rogers return TEST_SKIP; 24037741e03eSIan Rogers 24047741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 24057741e03eSIan Rogers 24067741e03eSIan Rogers free(event); 24077741e03eSIan Rogers free(alias); 24087741e03eSIan Rogers return ret; 24097741e03eSIan Rogers } 24107741e03eSIan Rogers 24117741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 24127741e03eSIan Rogers int subtest __maybe_unused) 2413b4a7276cSJohn Garry { 2414b4a7276cSJohn Garry static const char events[][30] = { 2415b4a7276cSJohn Garry "event-hyphen", 2416b4a7276cSJohn Garry "event-two-hyph", 2417b4a7276cSJohn Garry }; 24187741e03eSIan Rogers int ret = TEST_OK; 2419b4a7276cSJohn Garry 24207741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 24217741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 24227741e03eSIan Rogers 24237741e03eSIan Rogers if (test_ret != TEST_OK) { 24247741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 24257741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2426b4a7276cSJohn Garry } 2427b4a7276cSJohn Garry } 2428b4a7276cSJohn Garry 2429b4a7276cSJohn Garry return ret; 2430b4a7276cSJohn Garry } 2431b4a7276cSJohn Garry 24327741e03eSIan Rogers static struct test_case tests__parse_events[] = { 24337741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 24347741e03eSIan Rogers events2, 24357741e03eSIan Rogers "permissions"), 24367741e03eSIan Rogers TEST_CASE_REASON("Test parsing of \"hybrid\" CPU events", 24377741e03eSIan Rogers hybrid, 24387741e03eSIan Rogers "not hybrid"), 24397741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 24407741e03eSIan Rogers pmu_events, 24417741e03eSIan Rogers "permissions"), 24427741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 24437741e03eSIan Rogers pmu_events2, 24447741e03eSIan Rogers "permissions"), 24457741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 24467741e03eSIan Rogers "no aliases in sysfs"), 24477741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 24487741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 24497741e03eSIan Rogers { .name = NULL, } 24507741e03eSIan Rogers }; 2451945aea22SJiri Olsa 24527741e03eSIan Rogers struct test_suite suite__parse_events = { 24537741e03eSIan Rogers .desc = "Parse event definition strings", 24547741e03eSIan Rogers .test_cases = tests__parse_events, 24557741e03eSIan Rogers }; 2456