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" 8*f2a39fe8SArnaldo Carvalho de Melo #include "pmu.h" 92690c730SNamhyung Kim #include "util.h" 1076b31a29SArnaldo Carvalho de Melo #include <dirent.h> 11a43783aeSArnaldo Carvalho de Melo #include <errno.h> 127a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h> 137a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h> 147a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h> 15877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h> 16f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h> 1720a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h> 18945aea22SJiri Olsa 19945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 20945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 21945aea22SJiri Olsa 2253fe307dSThomas Richter #if defined(__s390x__) 2353fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 2453fe307dSThomas Richter * and retun success when trace point kvm_s390_create_vm 2553fe307dSThomas Richter * exists. Otherwise this test always fails. 2653fe307dSThomas Richter */ 2753fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 2853fe307dSThomas Richter { 2953fe307dSThomas Richter char *eventfile; 3053fe307dSThomas Richter bool rc = false; 3153fe307dSThomas Richter 3253fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 3353fe307dSThomas Richter 3453fe307dSThomas Richter if (eventfile) { 3553fe307dSThomas Richter DIR *mydir = opendir(eventfile); 3653fe307dSThomas Richter 3753fe307dSThomas Richter if (mydir) { 3853fe307dSThomas Richter rc = true; 3953fe307dSThomas Richter closedir(mydir); 4053fe307dSThomas Richter } 4153fe307dSThomas Richter put_events_file(eventfile); 4253fe307dSThomas Richter } 4353fe307dSThomas Richter 4453fe307dSThomas Richter return rc; 4553fe307dSThomas Richter } 4653fe307dSThomas Richter #endif 4753fe307dSThomas Richter 4863503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 49945aea22SJiri Olsa { 5032dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 51945aea22SJiri Olsa 526484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 538d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 55945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 561fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 58945aea22SJiri Olsa return 0; 59945aea22SJiri Olsa } 60945aea22SJiri Olsa 6163503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 62945aea22SJiri Olsa { 6332dcd021SJiri Olsa struct evsel *evsel; 64945aea22SJiri Olsa 656484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 668d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 67945aea22SJiri Olsa 68e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 69945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 701fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 71945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 721fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 73945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 741fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 75945aea22SJiri Olsa } 76945aea22SJiri Olsa return 0; 77945aea22SJiri Olsa } 78945aea22SJiri Olsa 7963503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 80945aea22SJiri Olsa { 8132dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 82945aea22SJiri Olsa 836484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 86945aea22SJiri Olsa return 0; 87945aea22SJiri Olsa } 88945aea22SJiri Olsa 8963503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 90945aea22SJiri Olsa { 9132dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 92945aea22SJiri Olsa 936484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 96945aea22SJiri Olsa return 0; 97945aea22SJiri Olsa } 98945aea22SJiri Olsa 9963503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 100945aea22SJiri Olsa { 10132dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 102945aea22SJiri Olsa 1036484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 105945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1061fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 107945aea22SJiri Olsa return 0; 108945aea22SJiri Olsa } 109945aea22SJiri Olsa 11063503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 111945aea22SJiri Olsa { 11232dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 113945aea22SJiri Olsa 1146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 116945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1171fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 118ee4c7588SJiri Olsa /* 119ee4c7588SJiri Olsa * The period value gets configured within perf_evlist__config, 120ee4c7588SJiri Olsa * while this test executes only parse events method. 121ee4c7588SJiri Olsa */ 122945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1231fc632ceSJiri Olsa 0 == evsel->core.attr.sample_period); 124945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1251fc632ceSJiri Olsa 0 == evsel->core.attr.config1); 126945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 1271fc632ceSJiri Olsa 1 == evsel->core.attr.config2); 128945aea22SJiri Olsa return 0; 129945aea22SJiri Olsa } 130945aea22SJiri Olsa 13163503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 132945aea22SJiri Olsa { 13332dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 134945aea22SJiri Olsa 1356484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 137945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1381fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 139945aea22SJiri Olsa return 0; 140945aea22SJiri Olsa } 141945aea22SJiri Olsa 14263503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 143945aea22SJiri Olsa { 14432dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 145945aea22SJiri Olsa 1466484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 1481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config); 149945aea22SJiri Olsa return 0; 150945aea22SJiri Olsa } 151945aea22SJiri Olsa 15263503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 153945aea22SJiri Olsa { 15432dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 155945aea22SJiri Olsa 1566484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 159945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1601fc632ceSJiri Olsa evsel->core.attr.bp_type); 161945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 1621fc632ceSJiri Olsa evsel->core.attr.bp_len); 163945aea22SJiri Olsa return 0; 164945aea22SJiri Olsa } 165945aea22SJiri Olsa 16663503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 167945aea22SJiri Olsa { 16832dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 169945aea22SJiri Olsa 1706484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 173945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1741fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 1751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 176945aea22SJiri Olsa return 0; 177945aea22SJiri Olsa } 178945aea22SJiri Olsa 17963503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 180945aea22SJiri Olsa { 18132dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 182945aea22SJiri Olsa 1836484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 184945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1851fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 187945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1881fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 189945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 1901fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 191945aea22SJiri Olsa return 0; 192945aea22SJiri Olsa } 193945aea22SJiri Olsa 19463503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 195945aea22SJiri Olsa { 19632dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 197945aea22SJiri Olsa 1986484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 199945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2001fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 202945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2031fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 204945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2051fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 206945aea22SJiri Olsa return 0; 207945aea22SJiri Olsa } 208945aea22SJiri Olsa 20963503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 210945aea22SJiri Olsa { 21132dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 212945aea22SJiri Olsa 2136484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 214945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2151fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 217945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2181fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 219945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2201fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 221945aea22SJiri Olsa return 0; 222945aea22SJiri Olsa } 223945aea22SJiri Olsa 22463503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 225945aea22SJiri Olsa { 22632dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 227945aea22SJiri Olsa 2281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 232945aea22SJiri Olsa 233945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 234945aea22SJiri Olsa } 235945aea22SJiri Olsa 236945aea22SJiri Olsa static int 23763503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 238945aea22SJiri Olsa { 23932dcd021SJiri Olsa struct evsel *evsel; 240945aea22SJiri Olsa 2416484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 242945aea22SJiri Olsa 243e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 244945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 2451fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 246945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 2471fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 2481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 250945aea22SJiri Olsa } 251945aea22SJiri Olsa 252945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 253945aea22SJiri Olsa } 254945aea22SJiri Olsa 25563503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 256945aea22SJiri Olsa { 25732dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 258945aea22SJiri Olsa 2591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 263945aea22SJiri Olsa 264945aea22SJiri Olsa return test__checkevent_raw(evlist); 265945aea22SJiri Olsa } 266945aea22SJiri Olsa 26763503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist) 268945aea22SJiri Olsa { 26932dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 270945aea22SJiri Olsa 2711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 275945aea22SJiri Olsa 276945aea22SJiri Olsa return test__checkevent_numeric(evlist); 277945aea22SJiri Olsa } 278945aea22SJiri Olsa 27963503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 280945aea22SJiri Olsa { 28132dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 282945aea22SJiri Olsa 2831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 287945aea22SJiri Olsa 288945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 289945aea22SJiri Olsa } 290945aea22SJiri Olsa 29163503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 292945aea22SJiri Olsa { 29332dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 294945aea22SJiri Olsa 2951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 2961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 297945aea22SJiri Olsa 298945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 299945aea22SJiri Olsa } 300945aea22SJiri Olsa 30163503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 302945aea22SJiri Olsa { 30332dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 304945aea22SJiri Olsa 3051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 3061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 307945aea22SJiri Olsa 308945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 309945aea22SJiri Olsa } 310945aea22SJiri Olsa 31163503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 312945aea22SJiri Olsa { 31332dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 314945aea22SJiri Olsa 3151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 319945aea22SJiri Olsa 320945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 321945aea22SJiri Olsa } 322945aea22SJiri Olsa 32363503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 324945aea22SJiri Olsa { 32532dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 326945aea22SJiri Olsa 3271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 331945aea22SJiri Olsa 332945aea22SJiri Olsa return test__checkevent_genhw(evlist); 333945aea22SJiri Olsa } 334945aea22SJiri Olsa 33563503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 336a1e12da4SJiri Olsa { 33732dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 338a1e12da4SJiri Olsa 3391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 346a1e12da4SJiri Olsa 347a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 348a1e12da4SJiri Olsa } 349a1e12da4SJiri Olsa 35063503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 351a1e12da4SJiri Olsa { 35232dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 353a1e12da4SJiri Olsa 3541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 3571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 361a1e12da4SJiri Olsa 362a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 363a1e12da4SJiri Olsa } 364a1e12da4SJiri Olsa 36563503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 366945aea22SJiri Olsa { 36732dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 368945aea22SJiri Olsa 369945aea22SJiri Olsa 3701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 374945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 375945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:u")); 376945aea22SJiri Olsa 377945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 378945aea22SJiri Olsa } 379945aea22SJiri Olsa 38063503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 381945aea22SJiri Olsa { 38232dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 383945aea22SJiri Olsa 3841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 388945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 389945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:x:k")); 390945aea22SJiri Olsa 391945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 392945aea22SJiri Olsa } 393945aea22SJiri Olsa 39463503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 395945aea22SJiri Olsa { 39632dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 397945aea22SJiri Olsa 3981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 402945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 403945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:r:hp")); 404945aea22SJiri Olsa 405945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 406945aea22SJiri Olsa } 407945aea22SJiri Olsa 40863503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 409945aea22SJiri Olsa { 41032dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 411945aea22SJiri Olsa 4121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 416945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 417945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:w:up")); 418945aea22SJiri Olsa 419945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 420945aea22SJiri Olsa } 421945aea22SJiri Olsa 42263503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 423945aea22SJiri Olsa { 42432dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 425945aea22SJiri Olsa 4261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 430945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 431945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp")); 432945aea22SJiri Olsa 433945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 434945aea22SJiri Olsa } 435945aea22SJiri Olsa 43663503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 437945aea22SJiri Olsa { 438945aea22SJiri Olsa 43932dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 440945aea22SJiri Olsa 4416484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->core.attr.config); 4441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 446ee4c7588SJiri Olsa /* 447ee4c7588SJiri Olsa * The period value gets configured within perf_evlist__config, 448ee4c7588SJiri Olsa * while this test executes only parse events method. 449ee4c7588SJiri Olsa */ 4501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 451945aea22SJiri Olsa 452945aea22SJiri Olsa return 0; 453945aea22SJiri Olsa } 454945aea22SJiri Olsa 45563503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 456945aea22SJiri Olsa { 45732dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 458945aea22SJiri Olsa 4596484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 460945aea22SJiri Olsa 461945aea22SJiri Olsa /* r1 */ 4621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 4661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 470945aea22SJiri Olsa 47143f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 472945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 4731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 474945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 4751fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 481945aea22SJiri Olsa 482945aea22SJiri Olsa /* 1:1:hp */ 483945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 4841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 4851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 490945aea22SJiri Olsa 491945aea22SJiri Olsa return 0; 492945aea22SJiri Olsa } 493945aea22SJiri Olsa 49463503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 495945aea22SJiri Olsa { 49632dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 497945aea22SJiri Olsa 498945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 4996484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 502945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); 503945aea22SJiri Olsa 504945aea22SJiri Olsa /* cpu/config=2/u" */ 505945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 5066484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 509945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 510945aea22SJiri Olsa !strcmp(perf_evsel__name(evsel), "cpu/config=2/u")); 511945aea22SJiri Olsa 512945aea22SJiri Olsa return 0; 513945aea22SJiri Olsa } 514945aea22SJiri Olsa 51563503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 51671ef150eSKan Liang { 51732dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 51871ef150eSKan Liang 51971ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5206484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 52371ef150eSKan Liang /* 52471ef150eSKan Liang * The period, time and callgraph value gets configured 52571ef150eSKan Liang * within perf_evlist__config, 52671ef150eSKan Liang * while this test executes only parse events method. 52771ef150eSKan Liang */ 5281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 52927de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 53171ef150eSKan Liang 53271ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 53371ef150eSKan Liang evsel = perf_evsel__next(evsel); 5341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 53671ef150eSKan Liang /* 53771ef150eSKan Liang * The period, time and callgraph value gets configured 53871ef150eSKan Liang * within perf_evlist__config, 53971ef150eSKan Liang * while this test executes only parse events method. 54071ef150eSKan Liang */ 5411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 54227de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 54471ef150eSKan Liang 54571ef150eSKan Liang return 0; 54671ef150eSKan Liang } 54771ef150eSKan Liang 54863503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 549945aea22SJiri Olsa { 55032dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 551945aea22SJiri Olsa 5526484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 554945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 5551fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 556945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 5571fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 561945aea22SJiri Olsa 562945aea22SJiri Olsa return 0; 563945aea22SJiri Olsa } 564945aea22SJiri Olsa 565ffe59788SKan Liang 56663503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 567ffe59788SKan Liang { 56832dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 569ffe59788SKan Liang 570ffe59788SKan Liang /* pmu-event:u */ 5716484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 572ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5731fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 574ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5751fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 579ffe59788SKan Liang 580ffe59788SKan Liang /* cpu/pmu-event/u*/ 581ffe59788SKan Liang evsel = perf_evsel__next(evsel); 5826484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 584ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5851fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 586ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5871fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 591ffe59788SKan Liang 592ffe59788SKan Liang return 0; 593ffe59788SKan Liang } 594ffe59788SKan Liang 595945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 596945aea22SJiri Olsa { 5976cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 598945aea22SJiri Olsa 599945aea22SJiri Olsa /* config=10 */ 6006cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 601945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 602945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 603945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 604945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 605945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 606945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 607945aea22SJiri Olsa 608945aea22SJiri Olsa /* config1 */ 6096cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 610945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 611945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 612945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 613945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 614945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 615945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 616945aea22SJiri Olsa 617945aea22SJiri Olsa /* config2=3 */ 6186cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 619945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 620945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 621945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 622945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 623945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 624945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 625945aea22SJiri Olsa 626945aea22SJiri Olsa /* umask=1*/ 6276cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 628945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 629945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 630945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 631945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 632945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 633945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 634945aea22SJiri Olsa 635945aea22SJiri Olsa return 0; 636945aea22SJiri Olsa } 637945aea22SJiri Olsa 63863503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 639945aea22SJiri Olsa { 64032dcd021SJiri Olsa struct evsel *evsel, *leader; 641945aea22SJiri Olsa 6426484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6438d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 644945aea22SJiri Olsa 645945aea22SJiri Olsa /* instructions:k */ 646945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 6471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 648945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6491fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 6501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 6541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 656823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 6575643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 6588d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 659a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 660945aea22SJiri Olsa 661945aea22SJiri Olsa /* cycles:upp */ 662945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 6631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 664945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6651fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 6661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 6671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 6681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 669945aea22SJiri Olsa /* use of precise requires exclude_guest */ 6701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 6711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 673945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 6748d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 675a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 676945aea22SJiri Olsa 677945aea22SJiri Olsa return 0; 678945aea22SJiri Olsa } 679945aea22SJiri Olsa 68063503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 681945aea22SJiri Olsa { 68232dcd021SJiri Olsa struct evsel *evsel, *leader; 683945aea22SJiri Olsa 6846484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 6858d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 686945aea22SJiri Olsa 687945aea22SJiri Olsa /* faults + :ku modifier */ 688945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 6891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 690945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6911fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 6921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 6931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 6961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 698823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 6995643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7008d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 701a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 702945aea22SJiri Olsa 703945aea22SJiri Olsa /* cache-references + :u modifier */ 704945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 7051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 706945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7071fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config); 7081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 714945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7158d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 716a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 717945aea22SJiri Olsa 718945aea22SJiri Olsa /* cycles:k */ 719945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 7201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 721945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7221fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 729823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 730a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 731945aea22SJiri Olsa 732945aea22SJiri Olsa return 0; 733945aea22SJiri Olsa } 734945aea22SJiri Olsa 73563503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 736945aea22SJiri Olsa { 73732dcd021SJiri Olsa struct evsel *evsel, *leader; 738945aea22SJiri Olsa 7396484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7408d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 741945aea22SJiri Olsa 74243f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 743945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 7441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 745945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 7461fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 7471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 7481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 7511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 754823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 755945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 756945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 7575643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7588d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 759a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 760945aea22SJiri Olsa 761945aea22SJiri Olsa /* group1 cycles:kppp */ 762945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 7631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 764945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7651fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 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); 769945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 773945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 774945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 7758d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 776a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 777945aea22SJiri Olsa 778945aea22SJiri Olsa /* group2 cycles + G modifier */ 779945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 7801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 781945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7821fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 7861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 7881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 789823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 790945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 791945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 7925643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7938d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 794a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 795945aea22SJiri Olsa 796945aea22SJiri Olsa /* group2 1:3 + G modifier */ 797945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 7981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 7991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config); 8001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 806945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8078d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 808a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 809945aea22SJiri Olsa 810945aea22SJiri Olsa /* instructions:u */ 811945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 8121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 813945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8141fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 821823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 822a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 823945aea22SJiri Olsa 824945aea22SJiri Olsa return 0; 825945aea22SJiri Olsa } 826945aea22SJiri Olsa 82763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 828945aea22SJiri Olsa { 82932dcd021SJiri Olsa struct evsel *evsel, *leader; 830945aea22SJiri Olsa 8316484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8328d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 833945aea22SJiri Olsa 834945aea22SJiri Olsa /* cycles:u + p */ 835945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 8361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 837945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8381fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 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); 842945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 846945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 847823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 8485643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8498d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 850a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 851945aea22SJiri Olsa 852945aea22SJiri Olsa /* instructions:kp + p */ 853945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 8541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 855945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8561fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 860945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 864945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8658d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 866a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 867945aea22SJiri Olsa 868945aea22SJiri Olsa return 0; 869945aea22SJiri Olsa } 870945aea22SJiri Olsa 87163503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 872945aea22SJiri Olsa { 87332dcd021SJiri Olsa struct evsel *evsel, *leader; 874945aea22SJiri Olsa 8756484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 8768d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 877945aea22SJiri Olsa 878945aea22SJiri Olsa /* cycles + G */ 879945aea22SJiri Olsa evsel = leader = perf_evlist__first(evlist); 8801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 881945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8821fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 889945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 890823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 8915643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8928d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 893a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 894945aea22SJiri Olsa 895945aea22SJiri Olsa /* instructions + G */ 896945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 8971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 898945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8991fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 906945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9078d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 908a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 909945aea22SJiri Olsa 910945aea22SJiri Olsa /* cycles:G */ 911945aea22SJiri Olsa evsel = leader = perf_evsel__next(evsel); 9121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 913945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9141fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 921945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 922823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 9235643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9248d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 925a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 926945aea22SJiri Olsa 927945aea22SJiri Olsa /* instructions:G */ 928945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 9291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 930945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9311fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 938945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9398d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 940945aea22SJiri Olsa 941945aea22SJiri Olsa /* cycles */ 942945aea22SJiri Olsa evsel = perf_evsel__next(evsel); 9431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 944945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9451fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 952823254edSNamhyung Kim TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 953945aea22SJiri Olsa 954945aea22SJiri Olsa return 0; 955945aea22SJiri Olsa } 956945aea22SJiri Olsa 95763503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 9585a30a99fSJiri Olsa { 95932dcd021SJiri Olsa struct evsel *evsel, *leader; 9605a30a99fSJiri Olsa 9616484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 9625a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 9635a30a99fSJiri Olsa 9645a30a99fSJiri Olsa /* cycles + :H group modifier */ 9655a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 9661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9675a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9681fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 9755a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 9765a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 9775643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9785a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 9795a30a99fSJiri Olsa 9805a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 9815a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 9821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9835a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9841fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 9851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 9915a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9925a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 9935a30a99fSJiri Olsa 9945a30a99fSJiri Olsa return 0; 9955a30a99fSJiri Olsa } 9965a30a99fSJiri Olsa 99763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 9985a30a99fSJiri Olsa { 99932dcd021SJiri Olsa struct evsel *evsel, *leader; 10005a30a99fSJiri Olsa 10016484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10025a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10035a30a99fSJiri Olsa 10045a30a99fSJiri Olsa /* cycles + :G group modifier */ 10055a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 10061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10075a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10081fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10155a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 10165a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 10175643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10185a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 10195a30a99fSJiri Olsa 10205a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 10215a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 10221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10235a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10241fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10315a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10325a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 10335a30a99fSJiri Olsa 10345a30a99fSJiri Olsa return 0; 10355a30a99fSJiri Olsa } 10365a30a99fSJiri Olsa 103763503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10385a30a99fSJiri Olsa { 103932dcd021SJiri Olsa struct evsel *evsel, *leader; 10405a30a99fSJiri Olsa 10416484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10425a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10435a30a99fSJiri Olsa 10445a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 10455a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 10461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10475a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10481fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10555a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 10565a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 10575643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10585a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 10595a30a99fSJiri Olsa 10605a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 10615a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 10621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10635a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10641fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10715a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10725a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 10735a30a99fSJiri Olsa 10745a30a99fSJiri Olsa return 0; 10755a30a99fSJiri Olsa } 10765a30a99fSJiri Olsa 107763503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 10785a30a99fSJiri Olsa { 107932dcd021SJiri Olsa struct evsel *evsel, *leader; 10805a30a99fSJiri Olsa 10816484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10825a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10835a30a99fSJiri Olsa 10845a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 10855a30a99fSJiri Olsa evsel = leader = perf_evlist__first(evlist); 10861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10875a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10881fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10955a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 10965a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); 10975643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10985a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); 10995a30a99fSJiri Olsa 11005a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 11015a30a99fSJiri Olsa evsel = perf_evsel__next(evsel); 11021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11035a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11041fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11115a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11125a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); 11135a30a99fSJiri Olsa 11145a30a99fSJiri Olsa return 0; 11155a30a99fSJiri Olsa } 11165a30a99fSJiri Olsa 111763503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1118a9f93f97SJiri Olsa { 111932dcd021SJiri Olsa struct evsel *evsel, *leader; 1120a9f93f97SJiri Olsa 11216484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1122a9f93f97SJiri Olsa 1123a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1124a9f93f97SJiri Olsa evsel = leader = perf_evlist__first(evlist); 11251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1126a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11271fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1134a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1135a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1136a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1137a9f93f97SJiri Olsa 1138a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1139a9f93f97SJiri Olsa evsel = perf_evsel__next(evsel); 11401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1141a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11421fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1149a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1150a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1151a9f93f97SJiri Olsa 1152a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1153a9f93f97SJiri Olsa evsel = perf_evsel__next(evsel); 11541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1155a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11561fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 11571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1163a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1164a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1165a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1166a9f93f97SJiri Olsa 1167a9f93f97SJiri Olsa return 0; 1168a9f93f97SJiri Olsa } 1169a9f93f97SJiri Olsa 117063503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1171a9f93f97SJiri Olsa { 117232dcd021SJiri Olsa struct evsel *evsel, *leader; 1173a9f93f97SJiri Olsa 11746484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1175a9f93f97SJiri Olsa 1176a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1177a9f93f97SJiri Olsa evsel = leader = perf_evlist__first(evlist); 11781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1179a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11801fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 11811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1187a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1188a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1189a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1190a9f93f97SJiri Olsa 1191a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1192a9f93f97SJiri Olsa evsel = perf_evsel__next(evsel); 11931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1194a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11951fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 11961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1202a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1203a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1204a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1205a9f93f97SJiri Olsa 1206a9f93f97SJiri Olsa return 0; 1207a9f93f97SJiri Olsa } 1208a9f93f97SJiri Olsa 120963503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1210c9ee780fSMichael Ellerman { 121132dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 1212c9ee780fSMichael Ellerman 12131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1218c9ee780fSMichael Ellerman 1219c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1220c9ee780fSMichael Ellerman } 1221c9ee780fSMichael Ellerman 122263503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1223c9ee780fSMichael Ellerman { 122432dcd021SJiri Olsa struct evsel *evsel, *leader; 1225c9ee780fSMichael Ellerman 12266484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1227c9ee780fSMichael Ellerman 1228c9ee780fSMichael Ellerman /* cycles - group leader */ 1229c9ee780fSMichael Ellerman evsel = leader = perf_evlist__first(evlist); 12301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1231c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12321fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1233c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1234c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 12351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1236c9ee780fSMichael Ellerman 1237c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1238c9ee780fSMichael Ellerman evsel = perf_evsel__next(evsel); 12391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1240c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12411fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 12421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1243c9ee780fSMichael Ellerman 1244c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1245c9ee780fSMichael Ellerman evsel = perf_evsel__next(evsel); 1246c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12471fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1249c9ee780fSMichael Ellerman 1250c9ee780fSMichael Ellerman return 0; 1251c9ee780fSMichael Ellerman } 1252c9ee780fSMichael Ellerman 125363503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1254ec32398cSJacob Shin { 125532dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 1256ec32398cSJacob Shin 12576484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 12581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 12591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1260ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 12611fc632ceSJiri Olsa evsel->core.attr.bp_type); 1262ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 12631fc632ceSJiri Olsa evsel->core.attr.bp_len); 1264ec32398cSJacob Shin 1265ec32398cSJacob Shin return 0; 1266ec32398cSJacob Shin } 1267ec32398cSJacob Shin 126863503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1269ec32398cSJacob Shin { 127032dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 1271ec32398cSJacob Shin 12726484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 12731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 12741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1275ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 12761fc632ceSJiri Olsa evsel->core.attr.bp_type); 1277ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 12781fc632ceSJiri Olsa evsel->core.attr.bp_len); 1279ec32398cSJacob Shin 1280ec32398cSJacob Shin return 0; 1281ec32398cSJacob Shin } 1282ec32398cSJacob Shin 1283ec32398cSJacob Shin static int 128463503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1285ec32398cSJacob Shin { 128632dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 1287ec32398cSJacob Shin 12881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1292ec32398cSJacob Shin 1293ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1294ec32398cSJacob Shin } 1295ec32398cSJacob Shin 129663503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1297ddd83c97SJiri Olsa { 129832dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 1299ddd83c97SJiri Olsa 13006484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1302ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong config", 13031fc632ceSJiri Olsa PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config); 1304ddd83c97SJiri Olsa return 0; 1305ddd83c97SJiri Olsa } 1306ddd83c97SJiri Olsa 130763503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 130810bf358aSWang Nan { 130932dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 131010bf358aSWang Nan 131110bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0); 131210bf358aSWang Nan return 0; 131310bf358aSWang Nan } 131410bf358aSWang Nan 131563503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 131610bf358aSWang Nan { 131732dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 131810bf358aSWang Nan 131910bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0); 132010bf358aSWang Nan return 0; 132110bf358aSWang Nan } 132210bf358aSWang Nan 132363503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 132410bf358aSWang Nan { 132532dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 132610bf358aSWang Nan 132710bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0); 132810bf358aSWang Nan return 0; 132910bf358aSWang Nan } 133010bf358aSWang Nan 133163503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 133243d0b978SWang Nan { 133332dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 133443d0b978SWang Nan 133543d0b978SWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0); 133643d0b978SWang Nan return 0; 133743d0b978SWang Nan } 133810bf358aSWang Nan 133916ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 134016ddcfbfSJiri Olsa { 134116ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 134216ddcfbfSJiri Olsa } 134316ddcfbfSJiri Olsa 134463503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1345b3f58c8dSArnaldo Carvalho de Melo { 134632dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 1347b3f58c8dSArnaldo Carvalho de Melo 1348b3f58c8dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0); 1349b3f58c8dSArnaldo Carvalho de Melo return 0; 1350b3f58c8dSArnaldo Carvalho de Melo } 1351b3f58c8dSArnaldo Carvalho de Melo 135263503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 135306dc5bf2SAlexey Budankov { 135432dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 135506dc5bf2SAlexey Budankov 135606dc5bf2SAlexey Budankov TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0); 135706dc5bf2SAlexey Budankov return 0; 135806dc5bf2SAlexey Budankov } 135906dc5bf2SAlexey Budankov 136063503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1361714a92d8SJiri Olsa { 136232dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 1363714a92d8SJiri Olsa 13641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 13651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 13661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 1367714a92d8SJiri Olsa return 0; 1368714a92d8SJiri Olsa } 1369714a92d8SJiri Olsa 137063503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1371714a92d8SJiri Olsa { 137232dcd021SJiri Olsa struct evsel *evsel = perf_evlist__first(evlist); 1373714a92d8SJiri Olsa 13741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 13751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 13761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 1377714a92d8SJiri Olsa return 0; 1378714a92d8SJiri Olsa } 1379714a92d8SJiri Olsa 138082ce75d9SJiri Olsa static int count_tracepoints(void) 138182ce75d9SJiri Olsa { 138282ce75d9SJiri Olsa struct dirent *events_ent; 138382ce75d9SJiri Olsa DIR *events_dir; 138482ce75d9SJiri Olsa int cnt = 0; 138582ce75d9SJiri Olsa 13867014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 138782ce75d9SJiri Olsa 138882ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 138982ce75d9SJiri Olsa 139082ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 139125a7d914SArnaldo Carvalho de Melo char *sys_path; 139282ce75d9SJiri Olsa struct dirent *sys_ent; 139382ce75d9SJiri Olsa DIR *sys_dir; 139482ce75d9SJiri Olsa 139582ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 139682ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 139782ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 139882ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 139982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 140082ce75d9SJiri Olsa continue; 140182ce75d9SJiri Olsa 140225a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 140325a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 140482ce75d9SJiri Olsa 140582ce75d9SJiri Olsa sys_dir = opendir(sys_path); 140682ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 140782ce75d9SJiri Olsa 140882ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 140982ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 141082ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 141182ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 141282ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 141382ce75d9SJiri Olsa continue; 141482ce75d9SJiri Olsa 141582ce75d9SJiri Olsa cnt++; 141682ce75d9SJiri Olsa } 141782ce75d9SJiri Olsa 141882ce75d9SJiri Olsa closedir(sys_dir); 141925a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 142082ce75d9SJiri Olsa } 142182ce75d9SJiri Olsa 142282ce75d9SJiri Olsa closedir(events_dir); 142382ce75d9SJiri Olsa return cnt; 142482ce75d9SJiri Olsa } 142582ce75d9SJiri Olsa 142663503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 142782ce75d9SJiri Olsa { 142882ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 14296484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 143082ce75d9SJiri Olsa 143182ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 143282ce75d9SJiri Olsa } 143382ce75d9SJiri Olsa 143423b6339bSArnaldo Carvalho de Melo struct evlist_test { 1435945aea22SJiri Olsa const char *name; 1436945aea22SJiri Olsa __u32 type; 1437615b8f99SAlexander Yarygin const int id; 143816ddcfbfSJiri Olsa bool (*valid)(void); 143963503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1440945aea22SJiri Olsa }; 1441945aea22SJiri Olsa 144223b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = { 1443615b8f99SAlexander Yarygin { 144443f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1445945aea22SJiri Olsa .check = test__checkevent_tracepoint, 1446615b8f99SAlexander Yarygin .id = 0, 1447945aea22SJiri Olsa }, 1448615b8f99SAlexander Yarygin { 1449945aea22SJiri Olsa .name = "syscalls:*", 1450945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 1451615b8f99SAlexander Yarygin .id = 1, 1452945aea22SJiri Olsa }, 1453615b8f99SAlexander Yarygin { 1454945aea22SJiri Olsa .name = "r1a", 1455945aea22SJiri Olsa .check = test__checkevent_raw, 1456615b8f99SAlexander Yarygin .id = 2, 1457945aea22SJiri Olsa }, 1458615b8f99SAlexander Yarygin { 1459945aea22SJiri Olsa .name = "1:1", 1460945aea22SJiri Olsa .check = test__checkevent_numeric, 1461615b8f99SAlexander Yarygin .id = 3, 1462945aea22SJiri Olsa }, 1463615b8f99SAlexander Yarygin { 1464945aea22SJiri Olsa .name = "instructions", 1465945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 1466615b8f99SAlexander Yarygin .id = 4, 1467945aea22SJiri Olsa }, 1468615b8f99SAlexander Yarygin { 1469945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1470945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 1471615b8f99SAlexander Yarygin .id = 5, 1472945aea22SJiri Olsa }, 1473615b8f99SAlexander Yarygin { 1474945aea22SJiri Olsa .name = "faults", 1475945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 1476615b8f99SAlexander Yarygin .id = 6, 1477945aea22SJiri Olsa }, 1478615b8f99SAlexander Yarygin { 1479945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1480945aea22SJiri Olsa .check = test__checkevent_genhw, 1481615b8f99SAlexander Yarygin .id = 7, 1482945aea22SJiri Olsa }, 1483615b8f99SAlexander Yarygin { 1484945aea22SJiri Olsa .name = "mem:0", 1485945aea22SJiri Olsa .check = test__checkevent_breakpoint, 1486615b8f99SAlexander Yarygin .id = 8, 1487945aea22SJiri Olsa }, 1488615b8f99SAlexander Yarygin { 1489945aea22SJiri Olsa .name = "mem:0:x", 1490945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 1491615b8f99SAlexander Yarygin .id = 9, 1492945aea22SJiri Olsa }, 1493615b8f99SAlexander Yarygin { 1494945aea22SJiri Olsa .name = "mem:0:r", 1495945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 1496615b8f99SAlexander Yarygin .id = 10, 1497945aea22SJiri Olsa }, 1498615b8f99SAlexander Yarygin { 1499945aea22SJiri Olsa .name = "mem:0:w", 1500945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 1501615b8f99SAlexander Yarygin .id = 11, 1502945aea22SJiri Olsa }, 1503615b8f99SAlexander Yarygin { 150443f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1505945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 1506615b8f99SAlexander Yarygin .id = 12, 1507945aea22SJiri Olsa }, 1508615b8f99SAlexander Yarygin { 1509945aea22SJiri Olsa .name = "syscalls:*:u", 1510945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 1511615b8f99SAlexander Yarygin .id = 13, 1512945aea22SJiri Olsa }, 1513615b8f99SAlexander Yarygin { 1514945aea22SJiri Olsa .name = "r1a:kp", 1515945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 1516615b8f99SAlexander Yarygin .id = 14, 1517945aea22SJiri Olsa }, 1518615b8f99SAlexander Yarygin { 1519945aea22SJiri Olsa .name = "1:1:hp", 1520945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 1521615b8f99SAlexander Yarygin .id = 15, 1522945aea22SJiri Olsa }, 1523615b8f99SAlexander Yarygin { 1524945aea22SJiri Olsa .name = "instructions:h", 1525945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 1526615b8f99SAlexander Yarygin .id = 16, 1527945aea22SJiri Olsa }, 1528615b8f99SAlexander Yarygin { 1529945aea22SJiri Olsa .name = "faults:u", 1530945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 1531615b8f99SAlexander Yarygin .id = 17, 1532945aea22SJiri Olsa }, 1533615b8f99SAlexander Yarygin { 1534945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1535945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 1536615b8f99SAlexander Yarygin .id = 18, 1537945aea22SJiri Olsa }, 1538615b8f99SAlexander Yarygin { 1539945aea22SJiri Olsa .name = "mem:0:u", 1540945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 1541615b8f99SAlexander Yarygin .id = 19, 1542945aea22SJiri Olsa }, 1543615b8f99SAlexander Yarygin { 1544945aea22SJiri Olsa .name = "mem:0:x:k", 1545945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 1546615b8f99SAlexander Yarygin .id = 20, 1547945aea22SJiri Olsa }, 1548615b8f99SAlexander Yarygin { 1549945aea22SJiri Olsa .name = "mem:0:r:hp", 1550945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 1551615b8f99SAlexander Yarygin .id = 21, 1552945aea22SJiri Olsa }, 1553615b8f99SAlexander Yarygin { 1554945aea22SJiri Olsa .name = "mem:0:w:up", 1555945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 1556615b8f99SAlexander Yarygin .id = 22, 1557945aea22SJiri Olsa }, 1558615b8f99SAlexander Yarygin { 155943f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1560945aea22SJiri Olsa .check = test__checkevent_list, 1561615b8f99SAlexander Yarygin .id = 23, 1562945aea22SJiri Olsa }, 1563615b8f99SAlexander Yarygin { 1564945aea22SJiri Olsa .name = "instructions:G", 1565945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 1566615b8f99SAlexander Yarygin .id = 24, 1567945aea22SJiri Olsa }, 1568615b8f99SAlexander Yarygin { 1569945aea22SJiri Olsa .name = "instructions:H", 1570945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 1571615b8f99SAlexander Yarygin .id = 25, 1572945aea22SJiri Olsa }, 1573615b8f99SAlexander Yarygin { 1574945aea22SJiri Olsa .name = "mem:0:rw", 1575945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 1576615b8f99SAlexander Yarygin .id = 26, 1577945aea22SJiri Olsa }, 1578615b8f99SAlexander Yarygin { 1579945aea22SJiri Olsa .name = "mem:0:rw:kp", 1580945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 1581615b8f99SAlexander Yarygin .id = 27, 1582945aea22SJiri Olsa }, 1583615b8f99SAlexander Yarygin { 1584945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1585945aea22SJiri Olsa .check = test__group1, 1586615b8f99SAlexander Yarygin .id = 28, 1587945aea22SJiri Olsa }, 1588615b8f99SAlexander Yarygin { 1589945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1590945aea22SJiri Olsa .check = test__group2, 1591615b8f99SAlexander Yarygin .id = 29, 1592945aea22SJiri Olsa }, 1593615b8f99SAlexander Yarygin { 159443f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1595945aea22SJiri Olsa .check = test__group3, 1596615b8f99SAlexander Yarygin .id = 30, 1597945aea22SJiri Olsa }, 1598615b8f99SAlexander Yarygin { 1599945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1600945aea22SJiri Olsa .check = test__group4, 1601615b8f99SAlexander Yarygin .id = 31, 1602945aea22SJiri Olsa }, 1603615b8f99SAlexander Yarygin { 1604945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1605945aea22SJiri Olsa .check = test__group5, 1606615b8f99SAlexander Yarygin .id = 32, 1607945aea22SJiri Olsa }, 1608615b8f99SAlexander Yarygin { 160982ce75d9SJiri Olsa .name = "*:*", 161082ce75d9SJiri Olsa .check = test__all_tracepoints, 1611615b8f99SAlexander Yarygin .id = 33, 161282ce75d9SJiri Olsa }, 1613615b8f99SAlexander Yarygin { 16145a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 16155a30a99fSJiri Olsa .check = test__group_gh1, 1616615b8f99SAlexander Yarygin .id = 34, 16175a30a99fSJiri Olsa }, 1618615b8f99SAlexander Yarygin { 16195a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 16205a30a99fSJiri Olsa .check = test__group_gh2, 1621615b8f99SAlexander Yarygin .id = 35, 16225a30a99fSJiri Olsa }, 1623615b8f99SAlexander Yarygin { 16245a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 16255a30a99fSJiri Olsa .check = test__group_gh3, 1626615b8f99SAlexander Yarygin .id = 36, 16275a30a99fSJiri Olsa }, 1628615b8f99SAlexander Yarygin { 16295a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 16305a30a99fSJiri Olsa .check = test__group_gh4, 1631615b8f99SAlexander Yarygin .id = 37, 16325a30a99fSJiri Olsa }, 1633615b8f99SAlexander Yarygin { 1634a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1635a9f93f97SJiri Olsa .check = test__leader_sample1, 1636615b8f99SAlexander Yarygin .id = 38, 1637a9f93f97SJiri Olsa }, 1638615b8f99SAlexander Yarygin { 1639a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1640a9f93f97SJiri Olsa .check = test__leader_sample2, 1641615b8f99SAlexander Yarygin .id = 39, 1642a9f93f97SJiri Olsa }, 1643615b8f99SAlexander Yarygin { 1644c9ee780fSMichael Ellerman .name = "instructions:uDp", 1645c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 1646615b8f99SAlexander Yarygin .id = 40, 1647c9ee780fSMichael Ellerman }, 1648615b8f99SAlexander Yarygin { 1649c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1650c9ee780fSMichael Ellerman .check = test__pinned_group, 1651615b8f99SAlexander Yarygin .id = 41, 1652c9ee780fSMichael Ellerman }, 1653ec32398cSJacob Shin { 1654ec32398cSJacob Shin .name = "mem:0/1", 1655ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 1656ec32398cSJacob Shin .id = 42, 1657ec32398cSJacob Shin }, 1658ec32398cSJacob Shin { 1659ec32398cSJacob Shin .name = "mem:0/2:w", 1660ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 1661ec32398cSJacob Shin .id = 43, 1662ec32398cSJacob Shin }, 1663ec32398cSJacob Shin { 1664ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1665ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 1666ec32398cSJacob Shin .id = 44 1667ec32398cSJacob Shin }, 1668c0bc8c6dSAlexander Yarygin #if defined(__s390x__) 1669c0bc8c6dSAlexander Yarygin { 1670c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1671c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 167253fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 1673c0bc8c6dSAlexander Yarygin .id = 100, 1674c0bc8c6dSAlexander Yarygin }, 1675c0bc8c6dSAlexander Yarygin #endif 1676a1e12da4SJiri Olsa { 1677a1e12da4SJiri Olsa .name = "instructions:I", 1678a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 1679a1e12da4SJiri Olsa .id = 45, 1680a1e12da4SJiri Olsa }, 1681a1e12da4SJiri Olsa { 1682a1e12da4SJiri Olsa .name = "instructions:kIG", 1683a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 1684a1e12da4SJiri Olsa .id = 46, 1685a1e12da4SJiri Olsa }, 1686ddd83c97SJiri Olsa { 1687ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1688ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 1689ddd83c97SJiri Olsa .id = 47, 1690ddd83c97SJiri Olsa }, 169110bf358aSWang Nan { 169210bf358aSWang Nan .name = "instructions/name=insn/", 169310bf358aSWang Nan .check = test__checkevent_config_symbol, 169410bf358aSWang Nan .id = 48, 169510bf358aSWang Nan }, 169610bf358aSWang Nan { 169710bf358aSWang Nan .name = "r1234/name=rawpmu/", 169810bf358aSWang Nan .check = test__checkevent_config_raw, 169910bf358aSWang Nan .id = 49, 170010bf358aSWang Nan }, 170110bf358aSWang Nan { 170210bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 170310bf358aSWang Nan .check = test__checkevent_config_num, 170410bf358aSWang Nan .id = 50, 170510bf358aSWang Nan }, 170643d0b978SWang Nan { 170743d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 170843d0b978SWang Nan .check = test__checkevent_config_cache, 170943d0b978SWang Nan .id = 51, 171043d0b978SWang Nan }, 1711b3f58c8dSArnaldo Carvalho de Melo { 1712b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 171316ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1714b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 1715b3f58c8dSArnaldo Carvalho de Melo .id = 52, 1716b3f58c8dSArnaldo Carvalho de Melo }, 171706dc5bf2SAlexey Budankov { 171806dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 171906dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 172006dc5bf2SAlexey Budankov .id = 53 1721714a92d8SJiri Olsa }, 1722714a92d8SJiri Olsa { 1723714a92d8SJiri Olsa .name = "cycles//u", 1724714a92d8SJiri Olsa .check = test__sym_event_slash, 1725714a92d8SJiri Olsa .id = 54, 1726714a92d8SJiri Olsa }, 1727714a92d8SJiri Olsa { 1728714a92d8SJiri Olsa .name = "cycles:k", 1729714a92d8SJiri Olsa .check = test__sym_event_dc, 1730714a92d8SJiri Olsa .id = 55, 173106dc5bf2SAlexey Budankov } 1732945aea22SJiri Olsa }; 1733945aea22SJiri Olsa 173423b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = { 1735615b8f99SAlexander Yarygin { 1736945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1737945aea22SJiri Olsa .check = test__checkevent_pmu, 1738615b8f99SAlexander Yarygin .id = 0, 1739945aea22SJiri Olsa }, 1740615b8f99SAlexander Yarygin { 1741945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1742945aea22SJiri Olsa .check = test__checkevent_pmu_name, 1743615b8f99SAlexander Yarygin .id = 1, 1744945aea22SJiri Olsa }, 174571ef150eSKan Liang { 174671ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 174771ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 174871ef150eSKan Liang .id = 2, 174971ef150eSKan Liang }, 175006dc5bf2SAlexey Budankov { 1751a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 175206dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 175306dc5bf2SAlexey Budankov .id = 3, 175406dc5bf2SAlexey Budankov } 1755945aea22SJiri Olsa }; 1756945aea22SJiri Olsa 175723b6339bSArnaldo Carvalho de Melo struct terms_test { 1758945aea22SJiri Olsa const char *str; 1759945aea22SJiri Olsa __u32 type; 1760945aea22SJiri Olsa int (*check)(struct list_head *terms); 1761945aea22SJiri Olsa }; 1762945aea22SJiri Olsa 176323b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = { 1764945aea22SJiri Olsa [0] = { 1765945aea22SJiri Olsa .str = "config=10,config1,config2=3,umask=1", 1766945aea22SJiri Olsa .check = test__checkterms_simple, 1767945aea22SJiri Olsa }, 1768945aea22SJiri Olsa }; 1769945aea22SJiri Olsa 177023b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e) 1771945aea22SJiri Olsa { 1772933ccf20SJiri Olsa struct parse_events_error err = { .idx = 0, }; 177363503dbaSJiri Olsa struct evlist *evlist; 1774945aea22SJiri Olsa int ret; 1775945aea22SJiri Olsa 177616ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 177716ddcfbfSJiri Olsa pr_debug("... SKIP"); 177816ddcfbfSJiri Olsa return 0; 177916ddcfbfSJiri Olsa } 178016ddcfbfSJiri Olsa 17810f98b11cSJiri Olsa evlist = evlist__new(); 1782945aea22SJiri Olsa if (evlist == NULL) 1783945aea22SJiri Olsa return -ENOMEM; 1784945aea22SJiri Olsa 1785933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 1786945aea22SJiri Olsa if (ret) { 1787933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 1788933ccf20SJiri Olsa e->name, ret, err.str); 1789933ccf20SJiri Olsa parse_events_print_error(&err, e->name); 17902d4352c0SArnaldo Carvalho de Melo } else { 17912d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 1792945aea22SJiri Olsa } 1793945aea22SJiri Olsa 1794c12995a5SJiri Olsa evlist__delete(evlist); 1795945aea22SJiri Olsa 1796945aea22SJiri Olsa return ret; 1797945aea22SJiri Olsa } 1798945aea22SJiri Olsa 179923b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt) 1800945aea22SJiri Olsa { 1801945aea22SJiri Olsa int ret1, ret2 = 0; 1802945aea22SJiri Olsa unsigned i; 1803945aea22SJiri Olsa 1804945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 180523b6339bSArnaldo Carvalho de Melo struct evlist_test *e = &events[i]; 1806945aea22SJiri Olsa 180716ddcfbfSJiri Olsa pr_debug("running test %d '%s'", e->id, e->name); 1808945aea22SJiri Olsa ret1 = test_event(e); 1809945aea22SJiri Olsa if (ret1) 1810945aea22SJiri Olsa ret2 = ret1; 181116ddcfbfSJiri Olsa pr_debug("\n"); 1812945aea22SJiri Olsa } 1813945aea22SJiri Olsa 1814945aea22SJiri Olsa return ret2; 1815945aea22SJiri Olsa } 1816945aea22SJiri Olsa 181723b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t) 1818945aea22SJiri Olsa { 1819c549aca5SDavid Ahern struct list_head terms; 1820945aea22SJiri Olsa int ret; 1821945aea22SJiri Olsa 1822c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 1823945aea22SJiri Olsa 1824c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 1825945aea22SJiri Olsa if (ret) { 1826945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 1827945aea22SJiri Olsa t->str , ret); 1828945aea22SJiri Olsa return ret; 1829945aea22SJiri Olsa } 1830945aea22SJiri Olsa 1831c549aca5SDavid Ahern ret = t->check(&terms); 1832682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 1833945aea22SJiri Olsa 1834945aea22SJiri Olsa return ret; 1835945aea22SJiri Olsa } 1836945aea22SJiri Olsa 183723b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt) 1838945aea22SJiri Olsa { 1839945aea22SJiri Olsa int ret = 0; 1840945aea22SJiri Olsa unsigned i; 1841945aea22SJiri Olsa 1842945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 184323b6339bSArnaldo Carvalho de Melo struct terms_test *t = &terms[i]; 1844945aea22SJiri Olsa 1845945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 1846945aea22SJiri Olsa ret = test_term(t); 1847945aea22SJiri Olsa if (ret) 1848945aea22SJiri Olsa break; 1849945aea22SJiri Olsa } 1850945aea22SJiri Olsa 1851945aea22SJiri Olsa return ret; 1852945aea22SJiri Olsa } 1853945aea22SJiri Olsa 1854945aea22SJiri Olsa static int test_pmu(void) 1855945aea22SJiri Olsa { 1856945aea22SJiri Olsa struct stat st; 1857945aea22SJiri Olsa char path[PATH_MAX]; 1858945aea22SJiri Olsa int ret; 1859945aea22SJiri Olsa 1860945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1861cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 1862945aea22SJiri Olsa 1863945aea22SJiri Olsa ret = stat(path, &st); 1864945aea22SJiri Olsa if (ret) 1865945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 1866945aea22SJiri Olsa return !ret; 1867945aea22SJiri Olsa } 1868945aea22SJiri Olsa 1869945aea22SJiri Olsa static int test_pmu_events(void) 1870945aea22SJiri Olsa { 1871945aea22SJiri Olsa struct stat st; 1872945aea22SJiri Olsa char path[PATH_MAX]; 1873945aea22SJiri Olsa struct dirent *ent; 1874945aea22SJiri Olsa DIR *dir; 1875945aea22SJiri Olsa int ret; 1876945aea22SJiri Olsa 1877945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1878cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 1879945aea22SJiri Olsa 1880945aea22SJiri Olsa ret = stat(path, &st); 1881945aea22SJiri Olsa if (ret) { 1882a895d57dSMasanari Iida pr_debug("omitting PMU cpu events tests\n"); 1883945aea22SJiri Olsa return 0; 1884945aea22SJiri Olsa } 1885945aea22SJiri Olsa 1886945aea22SJiri Olsa dir = opendir(path); 1887945aea22SJiri Olsa if (!dir) { 1888945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 1889945aea22SJiri Olsa return -1; 1890945aea22SJiri Olsa } 1891945aea22SJiri Olsa 1892945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 189316ddcfbfSJiri Olsa struct evlist_test e = { .id = 0, }; 18942e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 1895945aea22SJiri Olsa 189617a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 189717a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 1898945aea22SJiri Olsa continue; 1899945aea22SJiri Olsa 19002e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name); 1901945aea22SJiri Olsa 1902945aea22SJiri Olsa e.name = name; 1903945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 1904945aea22SJiri Olsa 1905945aea22SJiri Olsa ret = test_event(&e); 1906ffe59788SKan Liang if (ret) 1907ffe59788SKan Liang break; 19082e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 1909ffe59788SKan Liang e.name = name; 1910ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 1911ffe59788SKan Liang ret = test_event(&e); 1912945aea22SJiri Olsa } 1913945aea22SJiri Olsa 1914945aea22SJiri Olsa closedir(dir); 1915945aea22SJiri Olsa return ret; 1916945aea22SJiri Olsa } 1917945aea22SJiri Olsa 191881f17c90SArnaldo Carvalho de Melo int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused) 1919945aea22SJiri Olsa { 1920945aea22SJiri Olsa int ret1, ret2 = 0; 1921945aea22SJiri Olsa 1922945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 1923945aea22SJiri Olsa do { \ 1924945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 1925945aea22SJiri Olsa if (!ret2) \ 1926945aea22SJiri Olsa ret2 = ret1; \ 1927945aea22SJiri Olsa } while (0) 1928945aea22SJiri Olsa 1929945aea22SJiri Olsa TEST_EVENTS(test__events); 1930945aea22SJiri Olsa 1931945aea22SJiri Olsa if (test_pmu()) 1932945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 1933945aea22SJiri Olsa 1934945aea22SJiri Olsa if (test_pmu()) { 1935945aea22SJiri Olsa int ret = test_pmu_events(); 1936945aea22SJiri Olsa if (ret) 1937945aea22SJiri Olsa return ret; 1938945aea22SJiri Olsa } 1939945aea22SJiri Olsa 1940945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 1941945aea22SJiri Olsa if (!ret2) 1942945aea22SJiri Olsa ret2 = ret1; 1943945aea22SJiri Olsa 1944945aea22SJiri Olsa return ret2; 1945945aea22SJiri Olsa } 1946