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" 95a52817eSIan Rogers #include "pmus.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 239854934bSIan Rogers static bool test_config(const struct evsel *evsel, __u64 expected_config) 249854934bSIan Rogers { 259854934bSIan Rogers __u32 type = evsel->core.attr.type; 269854934bSIan Rogers __u64 config = evsel->core.attr.config; 279854934bSIan Rogers 289854934bSIan Rogers if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) { 299854934bSIan Rogers /* 309854934bSIan Rogers * HARDWARE and HW_CACHE events encode the PMU's extended type 319854934bSIan Rogers * in the top 32-bits. Mask in order to ignore. 329854934bSIan Rogers */ 339854934bSIan Rogers config &= PERF_HW_EVENT_MASK; 349854934bSIan Rogers } 359854934bSIan Rogers return config == expected_config; 369854934bSIan Rogers } 379854934bSIan Rogers 38378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 39378ef0f5SIan Rogers 4053fe307dSThomas Richter #if defined(__s390x__) 4153fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 424d39c89fSIngo Molnar * and return success when trace point kvm_s390_create_vm 4353fe307dSThomas Richter * exists. Otherwise this test always fails. 4453fe307dSThomas Richter */ 4553fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 4653fe307dSThomas Richter { 4753fe307dSThomas Richter char *eventfile; 4853fe307dSThomas Richter bool rc = false; 4953fe307dSThomas Richter 5053fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 5153fe307dSThomas Richter 5253fe307dSThomas Richter if (eventfile) { 5353fe307dSThomas Richter DIR *mydir = opendir(eventfile); 5453fe307dSThomas Richter 5553fe307dSThomas Richter if (mydir) { 5653fe307dSThomas Richter rc = true; 5753fe307dSThomas Richter closedir(mydir); 5853fe307dSThomas Richter } 5953fe307dSThomas Richter put_events_file(eventfile); 6053fe307dSThomas Richter } 6153fe307dSThomas Richter 6253fe307dSThomas Richter return rc; 6353fe307dSThomas Richter } 6453fe307dSThomas Richter #endif 6553fe307dSThomas Richter 6663503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 67945aea22SJiri Olsa { 68515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 69945aea22SJiri Olsa 706484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 719d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 73945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 741fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 767741e03eSIan Rogers return TEST_OK; 77945aea22SJiri Olsa } 78945aea22SJiri Olsa 7963503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 80945aea22SJiri Olsa { 8132dcd021SJiri Olsa struct evsel *evsel; 82945aea22SJiri Olsa 836484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 849d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 85945aea22SJiri Olsa 86e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 87945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 881fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 89945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 901fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 91945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 921fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 93945aea22SJiri Olsa } 947741e03eSIan Rogers return TEST_OK; 95945aea22SJiri Olsa } 96378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 97945aea22SJiri Olsa 9863503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 99945aea22SJiri Olsa { 100515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 101945aea22SJiri Olsa 1026484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 1049854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 1057741e03eSIan Rogers return TEST_OK; 106945aea22SJiri Olsa } 107945aea22SJiri Olsa 10863503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 109945aea22SJiri Olsa { 110515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 111945aea22SJiri Olsa 1126484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 1149854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 1157741e03eSIan Rogers return TEST_OK; 116945aea22SJiri Olsa } 117945aea22SJiri Olsa 11863503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 119945aea22SJiri Olsa { 120515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 121945aea22SJiri Olsa 1226484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1249854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 1257741e03eSIan Rogers return TEST_OK; 126945aea22SJiri Olsa } 127945aea22SJiri Olsa 12863503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 129945aea22SJiri Olsa { 130515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 131945aea22SJiri Olsa 1326484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1349854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 135ee4c7588SJiri Olsa /* 13678e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 137ee4c7588SJiri Olsa * while this test executes only parse events method. 138ee4c7588SJiri Olsa */ 139945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1401fc632ceSJiri Olsa 0 == evsel->core.attr.sample_period); 141945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1421fc632ceSJiri Olsa 0 == evsel->core.attr.config1); 143945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 1441fc632ceSJiri Olsa 1 == evsel->core.attr.config2); 1457741e03eSIan Rogers return TEST_OK; 146945aea22SJiri Olsa } 147945aea22SJiri Olsa 14863503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 149945aea22SJiri Olsa { 150515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 151945aea22SJiri Olsa 1526484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1549854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 1557741e03eSIan Rogers return TEST_OK; 156945aea22SJiri Olsa } 157945aea22SJiri Olsa 15863503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 159945aea22SJiri Olsa { 160515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 161945aea22SJiri Olsa 1626484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 1649854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1 << 16)); 1657741e03eSIan Rogers return TEST_OK; 166945aea22SJiri Olsa } 167945aea22SJiri Olsa 16863503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 169945aea22SJiri Olsa { 170515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 171945aea22SJiri Olsa 1726484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1749854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 175945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1761fc632ceSJiri Olsa evsel->core.attr.bp_type); 177945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 1781fc632ceSJiri Olsa evsel->core.attr.bp_len); 1797741e03eSIan Rogers return TEST_OK; 180945aea22SJiri Olsa } 181945aea22SJiri Olsa 18263503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 183945aea22SJiri Olsa { 184515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 185945aea22SJiri Olsa 1866484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1889854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 189945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1901fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 1911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 1927741e03eSIan Rogers return TEST_OK; 193945aea22SJiri Olsa } 194945aea22SJiri Olsa 19563503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 196945aea22SJiri Olsa { 197515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 198945aea22SJiri Olsa 1996484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 200945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2011fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2029854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 203945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2041fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 205945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2061fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2077741e03eSIan Rogers return TEST_OK; 208945aea22SJiri Olsa } 209945aea22SJiri Olsa 21063503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 211945aea22SJiri Olsa { 212515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 213945aea22SJiri Olsa 2146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 215945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2161fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2179854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 218945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2191fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 220945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2211fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2227741e03eSIan Rogers return TEST_OK; 223945aea22SJiri Olsa } 224945aea22SJiri Olsa 22563503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 226945aea22SJiri Olsa { 227515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 228945aea22SJiri Olsa 2296484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 230945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2311fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2329854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 233945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2341fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 235945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2361fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2377741e03eSIan Rogers return TEST_OK; 238945aea22SJiri Olsa } 239945aea22SJiri Olsa 240378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 24163503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 242945aea22SJiri Olsa { 243515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 244945aea22SJiri Olsa 2451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 249945aea22SJiri Olsa 250945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 251945aea22SJiri Olsa } 252945aea22SJiri Olsa 253945aea22SJiri Olsa static int 25463503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 255945aea22SJiri Olsa { 25632dcd021SJiri Olsa struct evsel *evsel; 257945aea22SJiri Olsa 2586484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 259945aea22SJiri Olsa 260e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 261945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 2621fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 263945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 2641fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 2651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 267945aea22SJiri Olsa } 268945aea22SJiri Olsa 269945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 270945aea22SJiri Olsa } 271378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 272945aea22SJiri Olsa 27363503dbaSJiri Olsa static int test__checkevent_raw_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_raw(evlist); 283945aea22SJiri Olsa } 284945aea22SJiri Olsa 28563503dbaSJiri Olsa static int test__checkevent_numeric_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_numeric(evlist); 295945aea22SJiri Olsa } 296945aea22SJiri Olsa 29763503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 298945aea22SJiri Olsa { 299515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 300945aea22SJiri Olsa 3011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 305945aea22SJiri Olsa 306945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 307945aea22SJiri Olsa } 308945aea22SJiri Olsa 30963503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 310945aea22SJiri Olsa { 311515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 312945aea22SJiri Olsa 3131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 315945aea22SJiri Olsa 316945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 317945aea22SJiri Olsa } 318945aea22SJiri Olsa 31963503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 320945aea22SJiri Olsa { 321515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 322945aea22SJiri Olsa 3231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 3241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 325945aea22SJiri Olsa 326945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 327945aea22SJiri Olsa } 328945aea22SJiri Olsa 32963503dbaSJiri Olsa static int test__checkevent_symbolic_alias_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_symbolic_alias(evlist); 339945aea22SJiri Olsa } 340945aea22SJiri Olsa 34163503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 342945aea22SJiri Olsa { 343515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 344945aea22SJiri Olsa 3451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 349945aea22SJiri Olsa 350945aea22SJiri Olsa return test__checkevent_genhw(evlist); 351945aea22SJiri Olsa } 352945aea22SJiri Olsa 35363503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 354a1e12da4SJiri Olsa { 355515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 356a1e12da4SJiri Olsa 3571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 364a1e12da4SJiri Olsa 365a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 366a1e12da4SJiri Olsa } 367a1e12da4SJiri Olsa 36863503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 369a1e12da4SJiri Olsa { 370515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 371a1e12da4SJiri Olsa 3721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 3751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 379a1e12da4SJiri Olsa 380a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 381a1e12da4SJiri Olsa } 382a1e12da4SJiri Olsa 38363503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 384945aea22SJiri Olsa { 385515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 386945aea22SJiri Olsa 387945aea22SJiri Olsa 3881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 392945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3938ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 394945aea22SJiri Olsa 395945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 396945aea22SJiri Olsa } 397945aea22SJiri Olsa 39863503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 399945aea22SJiri Olsa { 400515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 401945aea22SJiri Olsa 4021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 406945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4078ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 408945aea22SJiri Olsa 409945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 410945aea22SJiri Olsa } 411945aea22SJiri Olsa 41263503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 413945aea22SJiri Olsa { 414515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 415945aea22SJiri Olsa 4161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 420945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4218ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 422945aea22SJiri Olsa 423945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 424945aea22SJiri Olsa } 425945aea22SJiri Olsa 42663503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 427945aea22SJiri Olsa { 428515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 429945aea22SJiri Olsa 4301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 434945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4358ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 436945aea22SJiri Olsa 437945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 438945aea22SJiri Olsa } 439945aea22SJiri Olsa 44063503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 441945aea22SJiri Olsa { 442515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 443945aea22SJiri Olsa 4441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 448945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4498ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 450945aea22SJiri Olsa 451945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 452945aea22SJiri Olsa } 453945aea22SJiri Olsa 45463503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 455945aea22SJiri Olsa { 456945aea22SJiri Olsa 457515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 458945aea22SJiri Olsa 4596484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4619854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 10)); 4621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 464204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 465ee4c7588SJiri Olsa /* 46678e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 467ee4c7588SJiri Olsa * while this test executes only parse events method. 468ee4c7588SJiri Olsa */ 4691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 470945aea22SJiri Olsa 4717741e03eSIan Rogers return TEST_OK; 472945aea22SJiri Olsa } 473945aea22SJiri Olsa 474378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 47563503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 476945aea22SJiri Olsa { 477515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 478945aea22SJiri Olsa 4796484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 480945aea22SJiri Olsa 481945aea22SJiri Olsa /* r1 */ 4821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4839854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 4841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 486204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 4871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 491945aea22SJiri Olsa 49243f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 493e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 495945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 4961fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 5001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 502945aea22SJiri Olsa 503945aea22SJiri Olsa /* 1:1:hp */ 504e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 5069854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 5071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 5081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 5091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 5101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 511945aea22SJiri Olsa 5127741e03eSIan Rogers return TEST_OK; 513945aea22SJiri Olsa } 514378ef0f5SIan Rogers #endif 515945aea22SJiri Olsa 51663503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 517945aea22SJiri Olsa { 518515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 519945aea22SJiri Olsa 520945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 5216484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5239854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 5248ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 525945aea22SJiri Olsa 526945aea22SJiri Olsa /* cpu/config=2/u" */ 527e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5286484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5309854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 531945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5328ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 533945aea22SJiri Olsa 5347741e03eSIan Rogers return TEST_OK; 535945aea22SJiri Olsa } 536945aea22SJiri Olsa 53763503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 53871ef150eSKan Liang { 539515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 54071ef150eSKan Liang 54171ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5426484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5449854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 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 55371ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 554e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5569854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 55771ef150eSKan Liang /* 55878e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 55971ef150eSKan Liang * while this test executes only parse events method. 56071ef150eSKan Liang */ 5611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 56227de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 56471ef150eSKan Liang 5657741e03eSIan Rogers return TEST_OK; 56671ef150eSKan Liang } 56771ef150eSKan Liang 56863503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 569945aea22SJiri Olsa { 570515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 571945aea22SJiri Olsa 5726484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5735a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 5745a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 575945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 5761fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 577945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 5781fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5820997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 583945aea22SJiri Olsa 5847741e03eSIan Rogers return TEST_OK; 585945aea22SJiri Olsa } 586945aea22SJiri Olsa 587ffe59788SKan Liang 58863503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 589ffe59788SKan Liang { 590515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 591ffe59788SKan Liang 592ffe59788SKan Liang /* pmu-event:u */ 5936484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 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.exclusive); 602ffe59788SKan Liang 603ffe59788SKan Liang /* cpu/pmu-event/u*/ 604e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6056484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6065a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 6075a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 608ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 6091fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 610ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 6111fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 6121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 6150997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 616ffe59788SKan Liang 6177741e03eSIan Rogers return TEST_OK; 618ffe59788SKan Liang } 619ffe59788SKan Liang 620945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 621945aea22SJiri Olsa { 6226cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 623945aea22SJiri Olsa 624945aea22SJiri Olsa /* config=10 */ 6256cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 626945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 627945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 628945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 629945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 630945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 6314f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 632945aea22SJiri Olsa 633945aea22SJiri Olsa /* config1 */ 6346cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 635945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 636945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 637945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 638945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 639945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6404f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 641945aea22SJiri Olsa 642945aea22SJiri Olsa /* config2=3 */ 6436cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 644945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 645945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 646945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 647945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 648945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 6494f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 650945aea22SJiri Olsa 651204e7c49SRob Herring /* config3=4 */ 652204e7c49SRob Herring term = list_entry(term->list.next, struct parse_events_term, list); 653204e7c49SRob Herring TEST_ASSERT_VAL("wrong type term", 654204e7c49SRob Herring term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); 655204e7c49SRob Herring TEST_ASSERT_VAL("wrong type val", 656204e7c49SRob Herring term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 657204e7c49SRob Herring TEST_ASSERT_VAL("wrong val", term->val.num == 4); 658204e7c49SRob Herring TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); 659204e7c49SRob Herring 660945aea22SJiri Olsa /* umask=1*/ 6616cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 662945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 663945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 664945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 665945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 666945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 667945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 668945aea22SJiri Olsa 6694929e95aSJiri Olsa /* 6704929e95aSJiri Olsa * read 6714929e95aSJiri Olsa * 6724929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 6734929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 6744929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 6754929e95aSJiri Olsa */ 6764929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6774929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 67870c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 6794929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 68070c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 68170c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "read")); 68270c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 6834929e95aSJiri Olsa 6844929e95aSJiri Olsa /* 6854929e95aSJiri Olsa * r0xead 6864929e95aSJiri Olsa * 6874929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 6884929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 6894929e95aSJiri Olsa */ 6904929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6914929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 69270c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 6934929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 69470c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 69570c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead")); 69670c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 6977741e03eSIan Rogers return TEST_OK; 698945aea22SJiri Olsa } 699945aea22SJiri Olsa 70063503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 701945aea22SJiri Olsa { 70232dcd021SJiri Olsa struct evsel *evsel, *leader; 703945aea22SJiri Olsa 7046484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 7059d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 706945aea22SJiri Olsa 707945aea22SJiri Olsa /* instructions:k */ 708515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7109854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 7111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 717c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7185643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7192bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 720a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 721945aea22SJiri Olsa 722945aea22SJiri Olsa /* cycles:upp */ 723e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7259854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 7261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 729945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 733fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7342bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 735a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 736945aea22SJiri Olsa 7377741e03eSIan Rogers return TEST_OK; 738945aea22SJiri Olsa } 739945aea22SJiri Olsa 74063503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 741945aea22SJiri Olsa { 74232dcd021SJiri Olsa struct evsel *evsel, *leader; 743945aea22SJiri Olsa 7446484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7459d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 746945aea22SJiri Olsa 747945aea22SJiri Olsa /* faults + :ku modifier */ 748515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 7509854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 7511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 754943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 757c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7585643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7592bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 760a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 761945aea22SJiri Olsa 762945aea22SJiri Olsa /* cache-references + :u modifier */ 763e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7659854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)); 7661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 772fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7732bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 774a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 775945aea22SJiri Olsa 776945aea22SJiri Olsa /* cycles:k */ 777e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7799854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 7801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 786c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 787a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 788945aea22SJiri Olsa 7897741e03eSIan Rogers return TEST_OK; 790945aea22SJiri Olsa } 791945aea22SJiri Olsa 792378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 79363503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 794945aea22SJiri Olsa { 79532dcd021SJiri Olsa struct evsel *evsel, *leader; 796945aea22SJiri Olsa 7976484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7989d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 799945aea22SJiri Olsa 80043f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 801515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 803945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 8041fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 8051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 8061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 812c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 813945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 814945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 8155643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8162bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 817a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 818945aea22SJiri Olsa 819945aea22SJiri Olsa /* group1 cycles:kppp */ 820e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8229854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 826945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 830fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 831945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8322bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 833a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 834945aea22SJiri Olsa 835945aea22SJiri Olsa /* group2 cycles + G modifier */ 836e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8389854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 845c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 846945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 847945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8485643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8492bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 850a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 851945aea22SJiri Olsa 852945aea22SJiri Olsa /* group2 1:3 + G modifier */ 853e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8559854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 3)); 8561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 862fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8632bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 864a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 865945aea22SJiri Olsa 866945aea22SJiri Olsa /* instructions:u */ 867e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8699854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 8701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 873943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 876c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 877a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 878945aea22SJiri Olsa 8797741e03eSIan Rogers return TEST_OK; 880945aea22SJiri Olsa } 881378ef0f5SIan Rogers #endif 882945aea22SJiri Olsa 88363503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 884945aea22SJiri Olsa { 88532dcd021SJiri Olsa struct evsel *evsel, *leader; 886945aea22SJiri Olsa 8876484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8889d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 889945aea22SJiri Olsa 890945aea22SJiri Olsa /* cycles:u + p */ 891515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8939854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 897945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 901945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 902c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9035643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9042bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 905a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 906945aea22SJiri Olsa 907945aea22SJiri Olsa /* instructions:kp + p */ 908e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9109854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 9111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 9121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 914945aea22SJiri Olsa /* use of precise requires exclude_guest */ 9151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 918fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9192bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 920a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 921945aea22SJiri Olsa 9227741e03eSIan Rogers return TEST_OK; 923945aea22SJiri Olsa } 924945aea22SJiri Olsa 92563503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 926945aea22SJiri Olsa { 92732dcd021SJiri Olsa struct evsel *evsel, *leader; 928945aea22SJiri Olsa 9296484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9309d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 931945aea22SJiri Olsa 932945aea22SJiri Olsa /* cycles + G */ 933515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9359854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 942945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 943c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9445643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 946a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 947945aea22SJiri Olsa 948945aea22SJiri Olsa /* instructions + G */ 949e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9519854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 9521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 958fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9592bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 960a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 961945aea22SJiri Olsa 962945aea22SJiri Olsa /* cycles:G */ 963e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 9641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9659854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 972945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 973c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9745643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9752bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 976a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 977945aea22SJiri Olsa 978945aea22SJiri Olsa /* instructions:G */ 979e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9819854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 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); 9949854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1001c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 1002945aea22SJiri Olsa 10037741e03eSIan Rogers return TEST_OK; 1004945aea22SJiri Olsa } 1005945aea22SJiri Olsa 100663503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 10075a30a99fSJiri Olsa { 100832dcd021SJiri Olsa struct evsel *evsel, *leader; 10095a30a99fSJiri Olsa 10106484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10119d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10125a30a99fSJiri Olsa 10135a30a99fSJiri Olsa /* cycles + :H group modifier */ 1014515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10169854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10235a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1024c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10255643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10262bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10275a30a99fSJiri Olsa 10285a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1029e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10319854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 10321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1038fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10392bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10405a30a99fSJiri Olsa 10417741e03eSIan Rogers return TEST_OK; 10425a30a99fSJiri Olsa } 10435a30a99fSJiri Olsa 104463503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10455a30a99fSJiri Olsa { 104632dcd021SJiri Olsa struct evsel *evsel, *leader; 10475a30a99fSJiri Olsa 10486484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10499d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10505a30a99fSJiri Olsa 10515a30a99fSJiri Olsa /* cycles + :G group modifier */ 1052515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10549854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10615a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1062c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10635643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10642bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10655a30a99fSJiri Olsa 10665a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1067e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10699854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 10701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1076fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10772bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10785a30a99fSJiri Olsa 10797741e03eSIan Rogers return TEST_OK; 10805a30a99fSJiri Olsa } 10815a30a99fSJiri Olsa 108263503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10835a30a99fSJiri Olsa { 108432dcd021SJiri Olsa struct evsel *evsel, *leader; 10855a30a99fSJiri Olsa 10866484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10879d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10885a30a99fSJiri Olsa 10895a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1090515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10929854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10995a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1100c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11015643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11022bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11035a30a99fSJiri Olsa 11045a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1105e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11079854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1114fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11152bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11165a30a99fSJiri Olsa 11177741e03eSIan Rogers return TEST_OK; 11185a30a99fSJiri Olsa } 11195a30a99fSJiri Olsa 112063503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11215a30a99fSJiri Olsa { 112232dcd021SJiri Olsa struct evsel *evsel, *leader; 11235a30a99fSJiri Olsa 11246484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11259d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 11265a30a99fSJiri Olsa 11275a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1128515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11309854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11375a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1138c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11395643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11402bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11415a30a99fSJiri Olsa 11425a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1143e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11459854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1152fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11532bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11545a30a99fSJiri Olsa 11557741e03eSIan Rogers return TEST_OK; 11565a30a99fSJiri Olsa } 11575a30a99fSJiri Olsa 115863503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1159a9f93f97SJiri Olsa { 116032dcd021SJiri Olsa struct evsel *evsel, *leader; 1161a9f93f97SJiri Olsa 11626484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1163a9f93f97SJiri Olsa 1164a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1165515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11679854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1174a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1175fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1176a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1177a9f93f97SJiri Olsa 1178a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1179e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11819854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1188fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1189a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1190a9f93f97SJiri Olsa 1191a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1192e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11949854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 11951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1201a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1202fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1203a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1204a9f93f97SJiri Olsa 12057741e03eSIan Rogers return TEST_OK; 1206a9f93f97SJiri Olsa } 1207a9f93f97SJiri Olsa 120863503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1209a9f93f97SJiri Olsa { 121032dcd021SJiri Olsa struct evsel *evsel, *leader; 1211a9f93f97SJiri Olsa 12126484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1213a9f93f97SJiri Olsa 1214a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1215515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12179854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 12181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1224a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1225fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1226a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1227a9f93f97SJiri Olsa 1228a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1229e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12319854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 12321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1238a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1239fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1240a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1241a9f93f97SJiri Olsa 12427741e03eSIan Rogers return TEST_OK; 1243a9f93f97SJiri Olsa } 1244a9f93f97SJiri Olsa 124563503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1246c9ee780fSMichael Ellerman { 1247515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1248c9ee780fSMichael Ellerman 12491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1254c9ee780fSMichael Ellerman 1255c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1256c9ee780fSMichael Ellerman } 1257c9ee780fSMichael Ellerman 125863503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1259c9ee780fSMichael Ellerman { 126032dcd021SJiri Olsa struct evsel *evsel, *leader; 1261c9ee780fSMichael Ellerman 12626484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1263c9ee780fSMichael Ellerman 1264c9ee780fSMichael Ellerman /* cycles - group leader */ 1265515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12679854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1268c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1269fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1271c9ee780fSMichael Ellerman 1272c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1273e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12759854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1277c9ee780fSMichael Ellerman 1278c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1279e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12809854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 12811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1282c9ee780fSMichael Ellerman 12837741e03eSIan Rogers return TEST_OK; 1284c9ee780fSMichael Ellerman } 1285c9ee780fSMichael Ellerman 12860997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 12870997a266SAndi Kleen { 12880997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 12890997a266SAndi Kleen 12900997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12910997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12920997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12930997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12940997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 12950997a266SAndi Kleen 12960997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 12970997a266SAndi Kleen } 12980997a266SAndi Kleen 12990997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 13000997a266SAndi Kleen { 13010997a266SAndi Kleen struct evsel *evsel, *leader; 13020997a266SAndi Kleen 13030997a266SAndi Kleen TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 13040997a266SAndi Kleen 13050997a266SAndi Kleen /* cycles - group leader */ 13060997a266SAndi Kleen evsel = leader = evlist__first(evlist); 13070997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13089854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 13090997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1310fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13110997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13120997a266SAndi Kleen 13130997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 13140997a266SAndi Kleen evsel = evsel__next(evsel); 13150997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13169854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13170997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13180997a266SAndi Kleen 13190997a266SAndi Kleen /* branch-misses - ditto */ 13200997a266SAndi Kleen evsel = evsel__next(evsel); 13219854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 13220997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13230997a266SAndi Kleen 13247741e03eSIan Rogers return TEST_OK; 13250997a266SAndi Kleen } 132663503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1327ec32398cSJacob Shin { 1328515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1329ec32398cSJacob Shin 13306484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13329854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1333ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13341fc632ceSJiri Olsa evsel->core.attr.bp_type); 1335ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13361fc632ceSJiri Olsa evsel->core.attr.bp_len); 1337ec32398cSJacob Shin 13387741e03eSIan Rogers return TEST_OK; 1339ec32398cSJacob Shin } 1340ec32398cSJacob Shin 134163503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1342ec32398cSJacob Shin { 1343515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1344ec32398cSJacob Shin 13456484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13479854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1348ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13491fc632ceSJiri Olsa evsel->core.attr.bp_type); 1350ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13511fc632ceSJiri Olsa evsel->core.attr.bp_len); 1352ec32398cSJacob Shin 13537741e03eSIan Rogers return TEST_OK; 1354ec32398cSJacob Shin } 1355ec32398cSJacob Shin 1356ec32398cSJacob Shin static int 135763503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1358ec32398cSJacob Shin { 1359515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1360ec32398cSJacob Shin 13611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1365ec32398cSJacob Shin 1366ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1367ec32398cSJacob Shin } 1368ec32398cSJacob Shin 136963503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1370ddd83c97SJiri Olsa { 1371515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1372ddd83c97SJiri Olsa 13736484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 13759854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK)); 13767741e03eSIan Rogers return TEST_OK; 1377ddd83c97SJiri Olsa } 1378ddd83c97SJiri Olsa 137963503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 138010bf358aSWang Nan { 1381515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 138210bf358aSWang Nan 1383ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn")); 13847741e03eSIan Rogers return TEST_OK; 138510bf358aSWang Nan } 138610bf358aSWang Nan 138763503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 138810bf358aSWang Nan { 1389515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139010bf358aSWang Nan 1391ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu")); 13927741e03eSIan Rogers return TEST_OK; 139310bf358aSWang Nan } 139410bf358aSWang Nan 139563503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 139610bf358aSWang Nan { 1397515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139810bf358aSWang Nan 1399ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu")); 14007741e03eSIan Rogers return TEST_OK; 140110bf358aSWang Nan } 140210bf358aSWang Nan 140363503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 140443d0b978SWang Nan { 1405515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 140643d0b978SWang Nan 1407ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu")); 14084a7c4eafSIan Rogers return test__checkevent_genhw(evlist); 140943d0b978SWang Nan } 141010bf358aSWang Nan 14118f8c1068SIan Rogers static bool test__pmu_cpu_valid(void) 14128f8c1068SIan Rogers { 14138f8c1068SIan Rogers return !!perf_pmu__find("cpu"); 14148f8c1068SIan Rogers } 14158f8c1068SIan Rogers 141616ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 141716ddcfbfSJiri Olsa { 141816ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 141916ddcfbfSJiri Olsa } 142016ddcfbfSJiri Olsa 142163503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1422b3f58c8dSArnaldo Carvalho de Melo { 1423515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1424b3f58c8dSArnaldo Carvalho de Melo 1425ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u")); 14267741e03eSIan Rogers return TEST_OK; 1427b3f58c8dSArnaldo Carvalho de Melo } 1428b3f58c8dSArnaldo Carvalho de Melo 142963503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 143006dc5bf2SAlexey Budankov { 1431515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 143206dc5bf2SAlexey Budankov 14339854934bSIan Rogers TEST_ASSERT_VAL("wrong complex name parsing", 14349854934bSIan Rogers evsel__name_is(evsel, 14359854934bSIan Rogers "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks")); 14367741e03eSIan Rogers return TEST_OK; 143706dc5bf2SAlexey Budankov } 143806dc5bf2SAlexey Budankov 14393a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 14403a6c51e4SJiri Olsa { 14413a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 14423a6c51e4SJiri Olsa 14433a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14443a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14459854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 14467741e03eSIan Rogers return TEST_OK; 14473a6c51e4SJiri Olsa } 14483a6c51e4SJiri Olsa 144963503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1450714a92d8SJiri Olsa { 1451515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1452714a92d8SJiri Olsa 14531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14549854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 14551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14567741e03eSIan Rogers return TEST_OK; 1457714a92d8SJiri Olsa } 1458714a92d8SJiri Olsa 145963503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1460714a92d8SJiri Olsa { 1461515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1462714a92d8SJiri Olsa 14631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14649854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 14651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 14667741e03eSIan Rogers return TEST_OK; 1467714a92d8SJiri Olsa } 1468714a92d8SJiri Olsa 1469378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 147082ce75d9SJiri Olsa static int count_tracepoints(void) 147182ce75d9SJiri Olsa { 147282ce75d9SJiri Olsa struct dirent *events_ent; 147382ce75d9SJiri Olsa DIR *events_dir; 147482ce75d9SJiri Olsa int cnt = 0; 147582ce75d9SJiri Olsa 14767014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 147782ce75d9SJiri Olsa 147882ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 147982ce75d9SJiri Olsa 148082ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 148125a7d914SArnaldo Carvalho de Melo char *sys_path; 148282ce75d9SJiri Olsa struct dirent *sys_ent; 148382ce75d9SJiri Olsa DIR *sys_dir; 148482ce75d9SJiri Olsa 148582ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 148682ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 148782ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 148882ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 148982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 149082ce75d9SJiri Olsa continue; 149182ce75d9SJiri Olsa 149225a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 149325a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 149482ce75d9SJiri Olsa 149582ce75d9SJiri Olsa sys_dir = opendir(sys_path); 149682ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 149782ce75d9SJiri Olsa 149882ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 149982ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 150082ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 150182ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 150282ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 150382ce75d9SJiri Olsa continue; 150482ce75d9SJiri Olsa 150582ce75d9SJiri Olsa cnt++; 150682ce75d9SJiri Olsa } 150782ce75d9SJiri Olsa 150882ce75d9SJiri Olsa closedir(sys_dir); 150925a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 151082ce75d9SJiri Olsa } 151182ce75d9SJiri Olsa 151282ce75d9SJiri Olsa closedir(events_dir); 151382ce75d9SJiri Olsa return cnt; 151482ce75d9SJiri Olsa } 151582ce75d9SJiri Olsa 151663503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 151782ce75d9SJiri Olsa { 151882ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 15196484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 152082ce75d9SJiri Olsa 152182ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 152282ce75d9SJiri Olsa } 1523378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 152482ce75d9SJiri Olsa 152523b6339bSArnaldo Carvalho de Melo struct evlist_test { 1526945aea22SJiri Olsa const char *name; 152716ddcfbfSJiri Olsa bool (*valid)(void); 152863503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1529945aea22SJiri Olsa }; 1530945aea22SJiri Olsa 15318252e791SIan Rogers static const struct evlist_test test__events[] = { 1532378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1533615b8f99SAlexander Yarygin { 153443f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1535945aea22SJiri Olsa .check = test__checkevent_tracepoint, 15368252e791SIan Rogers /* 0 */ 1537945aea22SJiri Olsa }, 1538615b8f99SAlexander Yarygin { 1539945aea22SJiri Olsa .name = "syscalls:*", 1540945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 15418252e791SIan Rogers /* 1 */ 1542945aea22SJiri Olsa }, 1543378ef0f5SIan Rogers #endif 1544615b8f99SAlexander Yarygin { 1545945aea22SJiri Olsa .name = "r1a", 1546945aea22SJiri Olsa .check = test__checkevent_raw, 15478252e791SIan Rogers /* 2 */ 1548945aea22SJiri Olsa }, 1549615b8f99SAlexander Yarygin { 1550945aea22SJiri Olsa .name = "1:1", 1551945aea22SJiri Olsa .check = test__checkevent_numeric, 15528252e791SIan Rogers /* 3 */ 1553945aea22SJiri Olsa }, 1554615b8f99SAlexander Yarygin { 1555945aea22SJiri Olsa .name = "instructions", 1556945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 15578252e791SIan Rogers /* 4 */ 1558945aea22SJiri Olsa }, 1559615b8f99SAlexander Yarygin { 1560945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1561945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 15628252e791SIan Rogers /* 5 */ 1563945aea22SJiri Olsa }, 1564615b8f99SAlexander Yarygin { 1565945aea22SJiri Olsa .name = "faults", 1566945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 15678252e791SIan Rogers /* 6 */ 1568945aea22SJiri Olsa }, 1569615b8f99SAlexander Yarygin { 1570945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1571945aea22SJiri Olsa .check = test__checkevent_genhw, 15728252e791SIan Rogers /* 7 */ 1573945aea22SJiri Olsa }, 1574615b8f99SAlexander Yarygin { 1575945aea22SJiri Olsa .name = "mem:0", 1576945aea22SJiri Olsa .check = test__checkevent_breakpoint, 15778252e791SIan Rogers /* 8 */ 1578945aea22SJiri Olsa }, 1579615b8f99SAlexander Yarygin { 1580945aea22SJiri Olsa .name = "mem:0:x", 1581945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 15828252e791SIan Rogers /* 9 */ 1583945aea22SJiri Olsa }, 1584615b8f99SAlexander Yarygin { 1585945aea22SJiri Olsa .name = "mem:0:r", 1586945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 15878252e791SIan Rogers /* 0 */ 1588945aea22SJiri Olsa }, 1589615b8f99SAlexander Yarygin { 1590945aea22SJiri Olsa .name = "mem:0:w", 1591945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 15928252e791SIan Rogers /* 1 */ 1593945aea22SJiri Olsa }, 1594378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1595615b8f99SAlexander Yarygin { 159643f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1597945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 15988252e791SIan Rogers /* 2 */ 1599945aea22SJiri Olsa }, 1600615b8f99SAlexander Yarygin { 1601945aea22SJiri Olsa .name = "syscalls:*:u", 1602945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 16038252e791SIan Rogers /* 3 */ 1604945aea22SJiri Olsa }, 1605378ef0f5SIan Rogers #endif 1606615b8f99SAlexander Yarygin { 1607945aea22SJiri Olsa .name = "r1a:kp", 1608945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 16098252e791SIan Rogers /* 4 */ 1610945aea22SJiri Olsa }, 1611615b8f99SAlexander Yarygin { 1612945aea22SJiri Olsa .name = "1:1:hp", 1613945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 16148252e791SIan Rogers /* 5 */ 1615945aea22SJiri Olsa }, 1616615b8f99SAlexander Yarygin { 1617945aea22SJiri Olsa .name = "instructions:h", 1618945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 16198252e791SIan Rogers /* 6 */ 1620945aea22SJiri Olsa }, 1621615b8f99SAlexander Yarygin { 1622945aea22SJiri Olsa .name = "faults:u", 1623945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 16248252e791SIan Rogers /* 7 */ 1625945aea22SJiri Olsa }, 1626615b8f99SAlexander Yarygin { 1627945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1628945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 16298252e791SIan Rogers /* 8 */ 1630945aea22SJiri Olsa }, 1631615b8f99SAlexander Yarygin { 1632945aea22SJiri Olsa .name = "mem:0:u", 1633945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 16348252e791SIan Rogers /* 9 */ 1635945aea22SJiri Olsa }, 1636615b8f99SAlexander Yarygin { 1637945aea22SJiri Olsa .name = "mem:0:x:k", 1638945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 16398252e791SIan Rogers /* 0 */ 1640945aea22SJiri Olsa }, 1641615b8f99SAlexander Yarygin { 1642945aea22SJiri Olsa .name = "mem:0:r:hp", 1643945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 16448252e791SIan Rogers /* 1 */ 1645945aea22SJiri Olsa }, 1646615b8f99SAlexander Yarygin { 1647945aea22SJiri Olsa .name = "mem:0:w:up", 1648945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 16498252e791SIan Rogers /* 2 */ 1650945aea22SJiri Olsa }, 1651378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1652615b8f99SAlexander Yarygin { 165343f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1654945aea22SJiri Olsa .check = test__checkevent_list, 16558252e791SIan Rogers /* 3 */ 1656945aea22SJiri Olsa }, 1657378ef0f5SIan Rogers #endif 1658615b8f99SAlexander Yarygin { 1659945aea22SJiri Olsa .name = "instructions:G", 1660945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 16618252e791SIan Rogers /* 4 */ 1662945aea22SJiri Olsa }, 1663615b8f99SAlexander Yarygin { 1664945aea22SJiri Olsa .name = "instructions:H", 1665945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 16668252e791SIan Rogers /* 5 */ 1667945aea22SJiri Olsa }, 1668615b8f99SAlexander Yarygin { 1669945aea22SJiri Olsa .name = "mem:0:rw", 1670945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 16718252e791SIan Rogers /* 6 */ 1672945aea22SJiri Olsa }, 1673615b8f99SAlexander Yarygin { 1674945aea22SJiri Olsa .name = "mem:0:rw:kp", 1675945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 16768252e791SIan Rogers /* 7 */ 1677945aea22SJiri Olsa }, 1678615b8f99SAlexander Yarygin { 1679945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1680945aea22SJiri Olsa .check = test__group1, 16818252e791SIan Rogers /* 8 */ 1682945aea22SJiri Olsa }, 1683615b8f99SAlexander Yarygin { 1684945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1685945aea22SJiri Olsa .check = test__group2, 16868252e791SIan Rogers /* 9 */ 1687945aea22SJiri Olsa }, 1688378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1689615b8f99SAlexander Yarygin { 169043f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1691945aea22SJiri Olsa .check = test__group3, 16928252e791SIan Rogers /* 0 */ 1693945aea22SJiri Olsa }, 1694378ef0f5SIan Rogers #endif 1695615b8f99SAlexander Yarygin { 1696945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1697945aea22SJiri Olsa .check = test__group4, 16988252e791SIan Rogers /* 1 */ 1699945aea22SJiri Olsa }, 1700615b8f99SAlexander Yarygin { 1701945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1702945aea22SJiri Olsa .check = test__group5, 17038252e791SIan Rogers /* 2 */ 1704945aea22SJiri Olsa }, 1705378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1706615b8f99SAlexander Yarygin { 170782ce75d9SJiri Olsa .name = "*:*", 170882ce75d9SJiri Olsa .check = test__all_tracepoints, 17098252e791SIan Rogers /* 3 */ 171082ce75d9SJiri Olsa }, 1711378ef0f5SIan Rogers #endif 1712615b8f99SAlexander Yarygin { 17135a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 17145a30a99fSJiri Olsa .check = test__group_gh1, 17158252e791SIan Rogers /* 4 */ 17165a30a99fSJiri Olsa }, 1717615b8f99SAlexander Yarygin { 17185a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 17195a30a99fSJiri Olsa .check = test__group_gh2, 17208252e791SIan Rogers /* 5 */ 17215a30a99fSJiri Olsa }, 1722615b8f99SAlexander Yarygin { 17235a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 17245a30a99fSJiri Olsa .check = test__group_gh3, 17258252e791SIan Rogers /* 6 */ 17265a30a99fSJiri Olsa }, 1727615b8f99SAlexander Yarygin { 17285a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 17295a30a99fSJiri Olsa .check = test__group_gh4, 17308252e791SIan Rogers /* 7 */ 17315a30a99fSJiri Olsa }, 1732615b8f99SAlexander Yarygin { 1733a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1734a9f93f97SJiri Olsa .check = test__leader_sample1, 17358252e791SIan Rogers /* 8 */ 1736a9f93f97SJiri Olsa }, 1737615b8f99SAlexander Yarygin { 1738a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1739a9f93f97SJiri Olsa .check = test__leader_sample2, 17408252e791SIan Rogers /* 9 */ 1741a9f93f97SJiri Olsa }, 1742615b8f99SAlexander Yarygin { 1743c9ee780fSMichael Ellerman .name = "instructions:uDp", 1744c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 17458252e791SIan Rogers /* 0 */ 1746c9ee780fSMichael Ellerman }, 1747615b8f99SAlexander Yarygin { 1748c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1749c9ee780fSMichael Ellerman .check = test__pinned_group, 17508252e791SIan Rogers /* 1 */ 1751c9ee780fSMichael Ellerman }, 1752ec32398cSJacob Shin { 1753ec32398cSJacob Shin .name = "mem:0/1", 1754ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 17558252e791SIan Rogers /* 2 */ 1756ec32398cSJacob Shin }, 1757ec32398cSJacob Shin { 1758ec32398cSJacob Shin .name = "mem:0/2:w", 1759ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 17608252e791SIan Rogers /* 3 */ 1761ec32398cSJacob Shin }, 1762ec32398cSJacob Shin { 1763ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1764ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 17658252e791SIan Rogers /* 4 */ 1766ec32398cSJacob Shin }, 1767378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 1768c0bc8c6dSAlexander Yarygin { 1769c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1770c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 177153fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 17728252e791SIan Rogers /* 0 */ 1773c0bc8c6dSAlexander Yarygin }, 1774c0bc8c6dSAlexander Yarygin #endif 1775a1e12da4SJiri Olsa { 1776a1e12da4SJiri Olsa .name = "instructions:I", 1777a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 17788252e791SIan Rogers /* 5 */ 1779a1e12da4SJiri Olsa }, 1780a1e12da4SJiri Olsa { 1781a1e12da4SJiri Olsa .name = "instructions:kIG", 1782a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 17838252e791SIan Rogers /* 6 */ 1784a1e12da4SJiri Olsa }, 1785ddd83c97SJiri Olsa { 1786ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1787ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 17888252e791SIan Rogers /* 7 */ 1789ddd83c97SJiri Olsa }, 179010bf358aSWang Nan { 179110bf358aSWang Nan .name = "instructions/name=insn/", 179210bf358aSWang Nan .check = test__checkevent_config_symbol, 17938252e791SIan Rogers /* 8 */ 179410bf358aSWang Nan }, 179510bf358aSWang Nan { 179610bf358aSWang Nan .name = "r1234/name=rawpmu/", 179710bf358aSWang Nan .check = test__checkevent_config_raw, 17988252e791SIan Rogers /* 9 */ 179910bf358aSWang Nan }, 180010bf358aSWang Nan { 180110bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 180210bf358aSWang Nan .check = test__checkevent_config_num, 18038252e791SIan Rogers /* 0 */ 180410bf358aSWang Nan }, 180543d0b978SWang Nan { 180643d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 180743d0b978SWang Nan .check = test__checkevent_config_cache, 18088252e791SIan Rogers /* 1 */ 180943d0b978SWang Nan }, 1810b3f58c8dSArnaldo Carvalho de Melo { 1811b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 181216ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1813b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 18148252e791SIan Rogers /* 2 */ 1815b3f58c8dSArnaldo Carvalho de Melo }, 181606dc5bf2SAlexey Budankov { 181706dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 181806dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 18198252e791SIan Rogers /* 3 */ 1820714a92d8SJiri Olsa }, 1821714a92d8SJiri Olsa { 1822714a92d8SJiri Olsa .name = "cycles//u", 1823714a92d8SJiri Olsa .check = test__sym_event_slash, 18248252e791SIan Rogers /* 4 */ 1825714a92d8SJiri Olsa }, 1826714a92d8SJiri Olsa { 1827714a92d8SJiri Olsa .name = "cycles:k", 1828714a92d8SJiri Olsa .check = test__sym_event_dc, 18298252e791SIan Rogers /* 5 */ 18300997a266SAndi Kleen }, 18310997a266SAndi Kleen { 18320997a266SAndi Kleen .name = "instructions:uep", 18330997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 18348252e791SIan Rogers /* 6 */ 18350997a266SAndi Kleen }, 18360997a266SAndi Kleen { 18370997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 18380997a266SAndi Kleen .check = test__exclusive_group, 18398252e791SIan Rogers /* 7 */ 18400997a266SAndi Kleen }, 1841945aea22SJiri Olsa }; 1842945aea22SJiri Olsa 18438252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 1844615b8f99SAlexander Yarygin { 1845945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 18468f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 1847945aea22SJiri Olsa .check = test__checkevent_pmu, 18488252e791SIan Rogers /* 0 */ 1849945aea22SJiri Olsa }, 1850615b8f99SAlexander Yarygin { 1851945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 18528f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 1853945aea22SJiri Olsa .check = test__checkevent_pmu_name, 18548252e791SIan Rogers /* 1 */ 1855945aea22SJiri Olsa }, 185671ef150eSKan Liang { 185771ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 18588f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 185971ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 18608252e791SIan Rogers /* 2 */ 186171ef150eSKan Liang }, 186206dc5bf2SAlexey Budankov { 1863a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 18648f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 186506dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 18668252e791SIan Rogers /* 3 */ 18673a6c51e4SJiri Olsa }, 18683a6c51e4SJiri Olsa { 18693a6c51e4SJiri Olsa .name = "software/r1a/", 18703a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 18718252e791SIan Rogers /* 4 */ 18723a6c51e4SJiri Olsa }, 1873c33cdf54SJiri Olsa { 1874c33cdf54SJiri Olsa .name = "software/r0x1a/", 1875c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 18768252e791SIan Rogers /* 5 */ 1877c33cdf54SJiri Olsa }, 1878*6fd1e519SIan Rogers { 1879*6fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/", 1880*6fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 1881*6fd1e519SIan Rogers .check = test__checkevent_genhw, 1882*6fd1e519SIan Rogers /* 6 */ 1883*6fd1e519SIan Rogers }, 1884*6fd1e519SIan Rogers { 1885*6fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/kp", 1886*6fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 1887*6fd1e519SIan Rogers .check = test__checkevent_genhw_modifier, 1888*6fd1e519SIan Rogers /* 7 */ 1889*6fd1e519SIan Rogers }, 1890*6fd1e519SIan Rogers { 1891*6fd1e519SIan Rogers .name = "cpu/L1-dcache-misses,name=cachepmu/", 1892*6fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 1893*6fd1e519SIan Rogers .check = test__checkevent_config_cache, 1894*6fd1e519SIan Rogers /* 8 */ 1895*6fd1e519SIan Rogers }, 1896945aea22SJiri Olsa }; 1897945aea22SJiri Olsa 189823b6339bSArnaldo Carvalho de Melo struct terms_test { 1899945aea22SJiri Olsa const char *str; 1900945aea22SJiri Olsa int (*check)(struct list_head *terms); 1901945aea22SJiri Olsa }; 1902945aea22SJiri Olsa 1903b58eca40SIan Rogers static const struct terms_test test__terms[] = { 1904945aea22SJiri Olsa [0] = { 1905204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 1906945aea22SJiri Olsa .check = test__checkterms_simple, 1907945aea22SJiri Olsa }, 1908945aea22SJiri Olsa }; 1909945aea22SJiri Olsa 19108252e791SIan Rogers static int test_event(const struct evlist_test *e) 1911945aea22SJiri Olsa { 1912a910e466SIan Rogers struct parse_events_error err; 191363503dbaSJiri Olsa struct evlist *evlist; 1914945aea22SJiri Olsa int ret; 1915945aea22SJiri Olsa 191616ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 19177741e03eSIan Rogers pr_debug("... SKIP\n"); 19187741e03eSIan Rogers return TEST_OK; 191916ddcfbfSJiri Olsa } 192016ddcfbfSJiri Olsa 19210f98b11cSJiri Olsa evlist = evlist__new(); 19227741e03eSIan Rogers if (evlist == NULL) { 19237741e03eSIan Rogers pr_err("Failed allocation"); 19247741e03eSIan Rogers return TEST_FAIL; 19257741e03eSIan Rogers } 192607eafd4eSIan Rogers parse_events_error__init(&err); 1927933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 1928945aea22SJiri Olsa if (ret) { 1929933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 1930933ccf20SJiri Olsa e->name, ret, err.str); 19316c191289SIan Rogers parse_events_error__print(&err, e->name); 19327741e03eSIan Rogers ret = TEST_FAIL; 19337741e03eSIan Rogers if (strstr(err.str, "can't access trace events")) 19347741e03eSIan Rogers ret = TEST_SKIP; 19352d4352c0SArnaldo Carvalho de Melo } else { 19362d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 1937945aea22SJiri Olsa } 193807eafd4eSIan Rogers parse_events_error__exit(&err); 1939c12995a5SJiri Olsa evlist__delete(evlist); 1940945aea22SJiri Olsa 1941945aea22SJiri Olsa return ret; 1942945aea22SJiri Olsa } 1943945aea22SJiri Olsa 1944b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 1945b4a7276cSJohn Garry { 1946b4a7276cSJohn Garry struct parse_events_error err; 1947b4a7276cSJohn Garry struct evlist *evlist; 1948b4a7276cSJohn Garry int ret; 1949b4a7276cSJohn Garry 1950b4a7276cSJohn Garry evlist = evlist__new(); 1951b4a7276cSJohn Garry if (!evlist) 1952b4a7276cSJohn Garry return -ENOMEM; 1953b4a7276cSJohn Garry 1954b4a7276cSJohn Garry parse_events_error__init(&err); 1955a4c7d7c5SIan Rogers ret = __parse_events(evlist, str, &err, &perf_pmu__fake, /*warn_if_reordered=*/true); 1956b4a7276cSJohn Garry if (ret) { 1957b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 1958b4a7276cSJohn Garry str, ret, err.str); 1959b4a7276cSJohn Garry parse_events_error__print(&err, str); 1960b4a7276cSJohn Garry } 1961b4a7276cSJohn Garry 1962b4a7276cSJohn Garry parse_events_error__exit(&err); 1963b4a7276cSJohn Garry evlist__delete(evlist); 1964b4a7276cSJohn Garry 1965b4a7276cSJohn Garry return ret; 1966b4a7276cSJohn Garry } 1967b4a7276cSJohn Garry 19687741e03eSIan Rogers static int combine_test_results(int existing, int latest) 19697741e03eSIan Rogers { 19707741e03eSIan Rogers if (existing == TEST_FAIL) 19717741e03eSIan Rogers return TEST_FAIL; 19727741e03eSIan Rogers if (existing == TEST_SKIP) 19737741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 19747741e03eSIan Rogers return latest; 19757741e03eSIan Rogers } 19767741e03eSIan Rogers 19778252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 1978945aea22SJiri Olsa { 19797741e03eSIan Rogers int ret = TEST_OK; 1980945aea22SJiri Olsa 19818252e791SIan Rogers for (int i = 0; i < cnt; i++) { 19828252e791SIan Rogers const struct evlist_test *e = &events[i]; 19837741e03eSIan Rogers int test_ret; 1984945aea22SJiri Olsa 19857741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 19867741e03eSIan Rogers test_ret = test_event(e); 19877741e03eSIan Rogers if (test_ret != TEST_OK) { 19887741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 19897741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 19907741e03eSIan Rogers } 1991945aea22SJiri Olsa } 1992945aea22SJiri Olsa 19937741e03eSIan Rogers return ret; 19947741e03eSIan Rogers } 19957741e03eSIan Rogers 19967741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 19977741e03eSIan Rogers { 19987741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 1999945aea22SJiri Olsa } 2000945aea22SJiri Olsa 2001b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2002945aea22SJiri Olsa { 2003c549aca5SDavid Ahern struct list_head terms; 2004945aea22SJiri Olsa int ret; 2005945aea22SJiri Olsa 2006c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2007945aea22SJiri Olsa 2008c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2009945aea22SJiri Olsa if (ret) { 2010945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2011945aea22SJiri Olsa t->str , ret); 2012945aea22SJiri Olsa return ret; 2013945aea22SJiri Olsa } 2014945aea22SJiri Olsa 2015c549aca5SDavid Ahern ret = t->check(&terms); 2016682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2017945aea22SJiri Olsa 2018945aea22SJiri Olsa return ret; 2019945aea22SJiri Olsa } 2020945aea22SJiri Olsa 2021b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2022945aea22SJiri Olsa { 2023945aea22SJiri Olsa int ret = 0; 2024945aea22SJiri Olsa 2025b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2026b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2027945aea22SJiri Olsa 2028945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2029945aea22SJiri Olsa ret = test_term(t); 2030945aea22SJiri Olsa if (ret) 2031945aea22SJiri Olsa break; 2032945aea22SJiri Olsa } 2033945aea22SJiri Olsa 2034945aea22SJiri Olsa return ret; 2035945aea22SJiri Olsa } 2036945aea22SJiri Olsa 20377741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 20387741e03eSIan Rogers { 20397741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 20407741e03eSIan Rogers } 20417741e03eSIan Rogers 20427741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2043945aea22SJiri Olsa { 20445a52817eSIan Rogers struct perf_pmu *pmu; 20455a52817eSIan Rogers int ret = TEST_OK; 20465a52817eSIan Rogers 20475a52817eSIan Rogers if (list_empty(&pmus)) 20485a52817eSIan Rogers perf_pmu__scan(NULL); 20495a52817eSIan Rogers 20505a52817eSIan Rogers perf_pmus__for_each_pmu(pmu) { 2051945aea22SJiri Olsa struct stat st; 2052945aea22SJiri Olsa char path[PATH_MAX]; 2053945aea22SJiri Olsa struct dirent *ent; 2054945aea22SJiri Olsa DIR *dir; 20555a52817eSIan Rogers int err; 2056945aea22SJiri Olsa 20575a52817eSIan Rogers snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/", 20585a52817eSIan Rogers sysfs__mountpoint(), pmu->name); 20597741e03eSIan Rogers 20605a52817eSIan Rogers err = stat(path, &st); 20615a52817eSIan Rogers if (err) { 20625a52817eSIan Rogers pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path); 20635a52817eSIan Rogers continue; 2064945aea22SJiri Olsa } 2065945aea22SJiri Olsa 2066945aea22SJiri Olsa dir = opendir(path); 2067945aea22SJiri Olsa if (!dir) { 20687741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 20695a52817eSIan Rogers ret = combine_test_results(ret, TEST_SKIP); 20705a52817eSIan Rogers continue; 2071945aea22SJiri Olsa } 2072945aea22SJiri Olsa 20737741e03eSIan Rogers while ((ent = readdir(dir))) { 20748252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 20752e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 20767741e03eSIan Rogers int test_ret; 2077945aea22SJiri Olsa 207817a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 207917a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2080945aea22SJiri Olsa continue; 2081945aea22SJiri Olsa 20825a52817eSIan Rogers snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name); 2083945aea22SJiri Olsa 2084945aea22SJiri Olsa e.name = name; 2085945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2086945aea22SJiri Olsa 20877741e03eSIan Rogers test_ret = test_event(&e); 20887741e03eSIan Rogers if (test_ret != TEST_OK) { 20897741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 20907741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 20917741e03eSIan Rogers } 20925a52817eSIan Rogers 20935a52817eSIan Rogers if (!is_pmu_core(pmu->name)) 20945a52817eSIan Rogers continue; 20955a52817eSIan Rogers 2096146edff3SIan Rogers /* 2097146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2098146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2099146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2100146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2101146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2102146edff3SIan Rogers * isn't expected after this. As event names in the config 2103146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2104146edff3SIan Rogers * above. 2105146edff3SIan Rogers */ 2106146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2107146edff3SIan Rogers continue; 2108146edff3SIan Rogers 21095a52817eSIan Rogers snprintf(name, sizeof(name), "%s:u,%s/event=%s/u", 21105a52817eSIan Rogers ent->d_name, pmu->name, ent->d_name); 2111ffe59788SKan Liang e.name = name; 2112ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 21137741e03eSIan Rogers test_ret = test_event(&e); 21147741e03eSIan Rogers if (test_ret != TEST_OK) { 21157741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 21167741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 21177741e03eSIan Rogers } 2118945aea22SJiri Olsa } 2119945aea22SJiri Olsa 2120945aea22SJiri Olsa closedir(dir); 21215a52817eSIan Rogers } 2122945aea22SJiri Olsa return ret; 2123945aea22SJiri Olsa } 2124945aea22SJiri Olsa 21257741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21267741e03eSIan Rogers { 21277741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 21287741e03eSIan Rogers } 21297741e03eSIan Rogers 2130c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2131c7a3828dSJin Yao { 2132c7a3828dSJin Yao char path[PATH_MAX]; 2133c7a3828dSJin Yao DIR *dir; 2134c7a3828dSJin Yao struct dirent *dent; 2135c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2136c7a3828dSJin Yao char buf[128]; 2137c7a3828dSJin Yao FILE *file; 2138c7a3828dSJin Yao 2139c7a3828dSJin Yao if (!sysfs) 2140c7a3828dSJin Yao return false; 2141c7a3828dSJin Yao 2142c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2143c7a3828dSJin Yao dir = opendir(path); 2144c7a3828dSJin Yao if (!dir) 2145c7a3828dSJin Yao return false; 2146c7a3828dSJin Yao 2147c7a3828dSJin Yao while ((dent = readdir(dir))) { 2148c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2149c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2150c7a3828dSJin Yao continue; 2151c7a3828dSJin Yao 2152c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2153c7a3828dSJin Yao sysfs, dent->d_name); 2154c7a3828dSJin Yao 2155c7a3828dSJin Yao if (!file_available(path)) 2156c7a3828dSJin Yao continue; 2157c7a3828dSJin Yao 2158c7a3828dSJin Yao file = fopen(path, "r"); 2159c7a3828dSJin Yao if (!file) 2160c7a3828dSJin Yao continue; 2161c7a3828dSJin Yao 2162c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2163c7a3828dSJin Yao fclose(file); 2164c7a3828dSJin Yao continue; 2165c7a3828dSJin Yao } 2166c7a3828dSJin Yao 2167c7a3828dSJin Yao /* Remove the last '\n' */ 2168c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2169c7a3828dSJin Yao 2170c7a3828dSJin Yao fclose(file); 2171c7a3828dSJin Yao *event = strdup(dent->d_name); 2172c7a3828dSJin Yao *alias = strdup(buf); 2173c7a3828dSJin Yao closedir(dir); 2174c7a3828dSJin Yao 2175c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2176c7a3828dSJin Yao free(*event); 2177c7a3828dSJin Yao free(*alias); 2178c7a3828dSJin Yao return false; 2179c7a3828dSJin Yao } 2180c7a3828dSJin Yao 2181c7a3828dSJin Yao return true; 2182c7a3828dSJin Yao } 2183c7a3828dSJin Yao 2184c7a3828dSJin Yao closedir(dir); 2185c7a3828dSJin Yao return false; 2186c7a3828dSJin Yao } 2187c7a3828dSJin Yao 2188c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2189c7a3828dSJin Yao { 2190c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2191c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2192c7a3828dSJin Yao 2193c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2194c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 21957741e03eSIan Rogers return TEST_OK; 2196c7a3828dSJin Yao } 2197c7a3828dSJin Yao 21987741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2199c7a3828dSJin Yao { 22008252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2201c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2202c7a3828dSJin Yao 2203c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2204c7a3828dSJin Yao event, alias); 2205c7a3828dSJin Yao 2206c7a3828dSJin Yao e.name = name; 2207c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2208c7a3828dSJin Yao return test_event(&e); 2209c7a3828dSJin Yao } 2210c7a3828dSJin Yao 22117741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 22127741e03eSIan Rogers { 22137741e03eSIan Rogers char *event, *alias; 22147741e03eSIan Rogers int ret; 22157741e03eSIan Rogers 22167741e03eSIan Rogers if (!test_alias(&event, &alias)) 22177741e03eSIan Rogers return TEST_SKIP; 22187741e03eSIan Rogers 22197741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 22207741e03eSIan Rogers 22217741e03eSIan Rogers free(event); 22227741e03eSIan Rogers free(alias); 22237741e03eSIan Rogers return ret; 22247741e03eSIan Rogers } 22257741e03eSIan Rogers 22267741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 22277741e03eSIan Rogers int subtest __maybe_unused) 2228b4a7276cSJohn Garry { 2229b4a7276cSJohn Garry static const char events[][30] = { 2230b4a7276cSJohn Garry "event-hyphen", 2231b4a7276cSJohn Garry "event-two-hyph", 2232b4a7276cSJohn Garry }; 22337741e03eSIan Rogers int ret = TEST_OK; 2234b4a7276cSJohn Garry 22357741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 22367741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 22377741e03eSIan Rogers 22387741e03eSIan Rogers if (test_ret != TEST_OK) { 22397741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 22407741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2241b4a7276cSJohn Garry } 2242b4a7276cSJohn Garry } 2243b4a7276cSJohn Garry 2244b4a7276cSJohn Garry return ret; 2245b4a7276cSJohn Garry } 2246b4a7276cSJohn Garry 22477741e03eSIan Rogers static struct test_case tests__parse_events[] = { 22487741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 22497741e03eSIan Rogers events2, 22507741e03eSIan Rogers "permissions"), 22517741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 22527741e03eSIan Rogers pmu_events, 22537741e03eSIan Rogers "permissions"), 22547741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 22557741e03eSIan Rogers pmu_events2, 22567741e03eSIan Rogers "permissions"), 22577741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 22587741e03eSIan Rogers "no aliases in sysfs"), 22597741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 22607741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 22617741e03eSIan Rogers { .name = NULL, } 22627741e03eSIan Rogers }; 2263945aea22SJiri Olsa 22647741e03eSIan Rogers struct test_suite suite__parse_events = { 22657741e03eSIan Rogers .desc = "Parse event definition strings", 22667741e03eSIan Rogers .test_cases = tests__parse_events, 22677741e03eSIan Rogers }; 2268