1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2945aea22SJiri Olsa #include "parse-events.h" 3945aea22SJiri Olsa #include "evsel.h" 4945aea22SJiri Olsa #include "evlist.h" 5cd0cfad7SBorislav Petkov #include <api/fs/fs.h> 6c81251e8SJiri Olsa #include "tests.h" 784f5d36fSJiri Olsa #include "debug.h" 8f2a39fe8SArnaldo Carvalho de Melo #include "pmu.h" 9490e9a8fSJin Yao #include "pmu-hybrid.h" 1076b31a29SArnaldo Carvalho de Melo #include <dirent.h> 11a43783aeSArnaldo Carvalho de Melo #include <errno.h> 12*c7a3828dSJin Yao #include "fncache.h" 137a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h> 147a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h> 157a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h> 16877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h> 17f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h> 1820a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h> 19945aea22SJiri Olsa 20945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 21945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 22945aea22SJiri Olsa 2353fe307dSThomas Richter #if defined(__s390x__) 2453fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 254d39c89fSIngo Molnar * and return success when trace point kvm_s390_create_vm 2653fe307dSThomas Richter * exists. Otherwise this test always fails. 2753fe307dSThomas Richter */ 2853fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 2953fe307dSThomas Richter { 3053fe307dSThomas Richter char *eventfile; 3153fe307dSThomas Richter bool rc = false; 3253fe307dSThomas Richter 3353fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 3453fe307dSThomas Richter 3553fe307dSThomas Richter if (eventfile) { 3653fe307dSThomas Richter DIR *mydir = opendir(eventfile); 3753fe307dSThomas Richter 3853fe307dSThomas Richter if (mydir) { 3953fe307dSThomas Richter rc = true; 4053fe307dSThomas Richter closedir(mydir); 4153fe307dSThomas Richter } 4253fe307dSThomas Richter put_events_file(eventfile); 4353fe307dSThomas Richter } 4453fe307dSThomas Richter 4553fe307dSThomas Richter return rc; 4653fe307dSThomas Richter } 4753fe307dSThomas Richter #endif 4853fe307dSThomas Richter 4963503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 50945aea22SJiri Olsa { 51515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 52945aea22SJiri Olsa 536484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 543a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups); 551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 56945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 571fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 59945aea22SJiri Olsa return 0; 60945aea22SJiri Olsa } 61945aea22SJiri Olsa 6263503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 63945aea22SJiri Olsa { 6432dcd021SJiri Olsa struct evsel *evsel; 65945aea22SJiri Olsa 666484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 673a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups); 68945aea22SJiri Olsa 69e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 70945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 711fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 72945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 731fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 74945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 751fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 76945aea22SJiri Olsa } 77945aea22SJiri Olsa return 0; 78945aea22SJiri Olsa } 79945aea22SJiri Olsa 8063503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 81945aea22SJiri Olsa { 82515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 83945aea22SJiri Olsa 846484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 87945aea22SJiri Olsa return 0; 88945aea22SJiri Olsa } 89945aea22SJiri Olsa 9063503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 91945aea22SJiri Olsa { 92515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 93945aea22SJiri Olsa 946484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 97945aea22SJiri Olsa return 0; 98945aea22SJiri Olsa } 99945aea22SJiri Olsa 10063503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 101945aea22SJiri Olsa { 102515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 103945aea22SJiri Olsa 1046484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 106945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1071fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 108945aea22SJiri Olsa return 0; 109945aea22SJiri Olsa } 110945aea22SJiri Olsa 11163503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 112945aea22SJiri Olsa { 113515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 114945aea22SJiri Olsa 1156484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 117945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1181fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 119ee4c7588SJiri Olsa /* 12078e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 121ee4c7588SJiri Olsa * while this test executes only parse events method. 122ee4c7588SJiri Olsa */ 123945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1241fc632ceSJiri Olsa 0 == evsel->core.attr.sample_period); 125945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1261fc632ceSJiri Olsa 0 == evsel->core.attr.config1); 127945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 1281fc632ceSJiri Olsa 1 == evsel->core.attr.config2); 129945aea22SJiri Olsa return 0; 130945aea22SJiri Olsa } 131945aea22SJiri Olsa 13263503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 133945aea22SJiri Olsa { 134515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 135945aea22SJiri Olsa 1366484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 138945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1391fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 140945aea22SJiri Olsa return 0; 141945aea22SJiri Olsa } 142945aea22SJiri Olsa 14363503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 144945aea22SJiri Olsa { 145515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 146945aea22SJiri Olsa 1476484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 1491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config); 150945aea22SJiri Olsa return 0; 151945aea22SJiri Olsa } 152945aea22SJiri Olsa 15363503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 154945aea22SJiri Olsa { 155515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 156945aea22SJiri Olsa 1576484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 160945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1611fc632ceSJiri Olsa evsel->core.attr.bp_type); 162945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 1631fc632ceSJiri Olsa evsel->core.attr.bp_len); 164945aea22SJiri Olsa return 0; 165945aea22SJiri Olsa } 166945aea22SJiri Olsa 16763503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 168945aea22SJiri Olsa { 169515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 170945aea22SJiri Olsa 1716484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 174945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1751fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 1761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 177945aea22SJiri Olsa return 0; 178945aea22SJiri Olsa } 179945aea22SJiri Olsa 18063503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 181945aea22SJiri Olsa { 182515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 183945aea22SJiri Olsa 1846484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 185945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1861fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 188945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1891fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 190945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 1911fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 192945aea22SJiri Olsa return 0; 193945aea22SJiri Olsa } 194945aea22SJiri Olsa 19563503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 196945aea22SJiri Olsa { 197515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 198945aea22SJiri Olsa 1996484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 200945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2011fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 203945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2041fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 205945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2061fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 207945aea22SJiri Olsa return 0; 208945aea22SJiri Olsa } 209945aea22SJiri Olsa 21063503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 211945aea22SJiri Olsa { 212515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 213945aea22SJiri Olsa 2146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 215945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2161fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 218945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2191fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 220945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2211fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 222945aea22SJiri Olsa return 0; 223945aea22SJiri Olsa } 224945aea22SJiri Olsa 22563503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 226945aea22SJiri Olsa { 227515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 228945aea22SJiri Olsa 2291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 233945aea22SJiri Olsa 234945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 235945aea22SJiri Olsa } 236945aea22SJiri Olsa 237945aea22SJiri Olsa static int 23863503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 239945aea22SJiri Olsa { 24032dcd021SJiri Olsa struct evsel *evsel; 241945aea22SJiri Olsa 2426484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 243945aea22SJiri Olsa 244e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 245945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 2461fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 247945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 2481fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 2491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 251945aea22SJiri Olsa } 252945aea22SJiri Olsa 253945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 254945aea22SJiri Olsa } 255945aea22SJiri Olsa 25663503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 257945aea22SJiri Olsa { 258515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 259945aea22SJiri Olsa 2601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 264945aea22SJiri Olsa 265945aea22SJiri Olsa return test__checkevent_raw(evlist); 266945aea22SJiri Olsa } 267945aea22SJiri Olsa 26863503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist) 269945aea22SJiri Olsa { 270515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 271945aea22SJiri Olsa 2721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 276945aea22SJiri Olsa 277945aea22SJiri Olsa return test__checkevent_numeric(evlist); 278945aea22SJiri Olsa } 279945aea22SJiri Olsa 28063503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 281945aea22SJiri Olsa { 282515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 283945aea22SJiri Olsa 2841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 288945aea22SJiri Olsa 289945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 290945aea22SJiri Olsa } 291945aea22SJiri Olsa 29263503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 293945aea22SJiri Olsa { 294515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 295945aea22SJiri Olsa 2961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 2971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 298945aea22SJiri Olsa 299945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 300945aea22SJiri Olsa } 301945aea22SJiri Olsa 30263503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 303945aea22SJiri Olsa { 304515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 305945aea22SJiri Olsa 3061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 3071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 308945aea22SJiri Olsa 309945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 310945aea22SJiri Olsa } 311945aea22SJiri Olsa 31263503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 313945aea22SJiri Olsa { 314515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 315945aea22SJiri Olsa 3161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 320945aea22SJiri Olsa 321945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 322945aea22SJiri Olsa } 323945aea22SJiri Olsa 32463503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 325945aea22SJiri Olsa { 326515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 327945aea22SJiri Olsa 3281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 332945aea22SJiri Olsa 333945aea22SJiri Olsa return test__checkevent_genhw(evlist); 334945aea22SJiri Olsa } 335945aea22SJiri Olsa 33663503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 337a1e12da4SJiri Olsa { 338515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 339a1e12da4SJiri Olsa 3401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 347a1e12da4SJiri Olsa 348a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 349a1e12da4SJiri Olsa } 350a1e12da4SJiri Olsa 35163503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 352a1e12da4SJiri Olsa { 353515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 354a1e12da4SJiri Olsa 3551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 3581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 362a1e12da4SJiri Olsa 363a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 364a1e12da4SJiri Olsa } 365a1e12da4SJiri Olsa 36663503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 367945aea22SJiri Olsa { 368515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 369945aea22SJiri Olsa 370945aea22SJiri Olsa 3711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 375945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3768ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 377945aea22SJiri Olsa 378945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 379945aea22SJiri Olsa } 380945aea22SJiri Olsa 38163503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 382945aea22SJiri Olsa { 383515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 384945aea22SJiri Olsa 3851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 389945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3908ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 391945aea22SJiri Olsa 392945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 393945aea22SJiri Olsa } 394945aea22SJiri Olsa 39563503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 396945aea22SJiri Olsa { 397515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 398945aea22SJiri Olsa 3991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 403945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4048ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 405945aea22SJiri Olsa 406945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 407945aea22SJiri Olsa } 408945aea22SJiri Olsa 40963503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 410945aea22SJiri Olsa { 411515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 412945aea22SJiri Olsa 4131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 417945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4188ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 419945aea22SJiri Olsa 420945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 421945aea22SJiri Olsa } 422945aea22SJiri Olsa 42363503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 424945aea22SJiri Olsa { 425515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 426945aea22SJiri Olsa 4271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 431945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4328ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 433945aea22SJiri Olsa 434945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 435945aea22SJiri Olsa } 436945aea22SJiri Olsa 43763503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 438945aea22SJiri Olsa { 439945aea22SJiri Olsa 440515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 441945aea22SJiri Olsa 4426484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->core.attr.config); 4451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 447ee4c7588SJiri Olsa /* 44878e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 449ee4c7588SJiri Olsa * while this test executes only parse events method. 450ee4c7588SJiri Olsa */ 4511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 452945aea22SJiri Olsa 453945aea22SJiri Olsa return 0; 454945aea22SJiri Olsa } 455945aea22SJiri Olsa 45663503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 457945aea22SJiri Olsa { 458515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 459945aea22SJiri Olsa 4606484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 461945aea22SJiri Olsa 462945aea22SJiri Olsa /* r1 */ 4631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 4671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 471945aea22SJiri Olsa 47243f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 473e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 475945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 4761fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 482945aea22SJiri Olsa 483945aea22SJiri Olsa /* 1:1:hp */ 484e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 4861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 491945aea22SJiri Olsa 492945aea22SJiri Olsa return 0; 493945aea22SJiri Olsa } 494945aea22SJiri Olsa 49563503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 496945aea22SJiri Olsa { 497515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 498945aea22SJiri Olsa 499945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 5006484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 5038ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 504945aea22SJiri Olsa 505945aea22SJiri Olsa /* cpu/config=2/u" */ 506e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5076484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 510945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5118ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 512945aea22SJiri Olsa 513945aea22SJiri Olsa return 0; 514945aea22SJiri Olsa } 515945aea22SJiri Olsa 51663503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 51771ef150eSKan Liang { 518515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 51971ef150eSKan Liang 52071ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5216484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 52471ef150eSKan Liang /* 52578e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within 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/ */ 533e470daeaSArnaldo Carvalho de Melo evsel = 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 /* 53778e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 53871ef150eSKan Liang * while this test executes only parse events method. 53971ef150eSKan Liang */ 5401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 54127de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 54371ef150eSKan Liang 54471ef150eSKan Liang return 0; 54571ef150eSKan Liang } 54671ef150eSKan Liang 54763503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 548945aea22SJiri Olsa { 549515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 550945aea22SJiri Olsa 5516484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 553945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 5541fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 555945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 5561fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5600997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 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 { 568515dbe48SJiri Olsa struct evsel *evsel = 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); 5790997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 580ffe59788SKan Liang 581ffe59788SKan Liang /* cpu/pmu-event/u*/ 582e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5836484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 585ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5861fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 587ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5881fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5920997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 593ffe59788SKan Liang 594ffe59788SKan Liang return 0; 595ffe59788SKan Liang } 596ffe59788SKan Liang 597945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 598945aea22SJiri Olsa { 5996cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 600945aea22SJiri Olsa 601945aea22SJiri Olsa /* config=10 */ 6026cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 603945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 604945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 605945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 606945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 607945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 608945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 609945aea22SJiri Olsa 610945aea22SJiri Olsa /* config1 */ 6116cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 612945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 613945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 614945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 615945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 616945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 617945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 618945aea22SJiri Olsa 619945aea22SJiri Olsa /* config2=3 */ 6206cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 621945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 622945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 623945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 624945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 625945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 626945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 627945aea22SJiri Olsa 628945aea22SJiri Olsa /* umask=1*/ 6296cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 630945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 631945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 632945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 633945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 634945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 635945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 636945aea22SJiri Olsa 6374929e95aSJiri Olsa /* 6384929e95aSJiri Olsa * read 6394929e95aSJiri Olsa * 6404929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 6414929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 6424929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 6434929e95aSJiri Olsa */ 6444929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6454929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6464929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 6474929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6484929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6494929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6504929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read")); 6514929e95aSJiri Olsa 6524929e95aSJiri Olsa /* 6534929e95aSJiri Olsa * r0xead 6544929e95aSJiri Olsa * 6554929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 6564929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 6574929e95aSJiri Olsa */ 6584929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6594929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6604929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 6614929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6624929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6634929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 0xead); 6644929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 665945aea22SJiri Olsa return 0; 666945aea22SJiri Olsa } 667945aea22SJiri Olsa 66863503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 669945aea22SJiri Olsa { 67032dcd021SJiri Olsa struct evsel *evsel, *leader; 671945aea22SJiri Olsa 6726484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6733a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 674945aea22SJiri Olsa 675945aea22SJiri Olsa /* instructions:k */ 676515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 6771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 678945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6791fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 6801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 6841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 686c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 6875643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 6882bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 689a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 690945aea22SJiri Olsa 691945aea22SJiri Olsa /* cycles:upp */ 692e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 694945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6951fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 6961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 6971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 6981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 699945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 703fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7042bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 705a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 706945aea22SJiri Olsa 707945aea22SJiri Olsa return 0; 708945aea22SJiri Olsa } 709945aea22SJiri Olsa 71063503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 711945aea22SJiri Olsa { 71232dcd021SJiri Olsa struct evsel *evsel, *leader; 713945aea22SJiri Olsa 7146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7153a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 716945aea22SJiri Olsa 717945aea22SJiri Olsa /* faults + :ku modifier */ 718515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 720945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7211fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 7221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 725943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 728c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7295643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7302bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 731a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 732945aea22SJiri Olsa 733945aea22SJiri Olsa /* cache-references + :u modifier */ 734e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 736945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7371fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config); 7381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 744fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 746a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 747945aea22SJiri Olsa 748945aea22SJiri Olsa /* cycles:k */ 749e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 751945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7521fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 759c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 760a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 761945aea22SJiri Olsa 762945aea22SJiri Olsa return 0; 763945aea22SJiri Olsa } 764945aea22SJiri Olsa 76563503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 766945aea22SJiri Olsa { 76732dcd021SJiri Olsa struct evsel *evsel, *leader; 768945aea22SJiri Olsa 7696484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7703a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups); 771945aea22SJiri Olsa 77243f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 773515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 775945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 7761fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 7771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 7781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 7811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 784c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 785945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 786945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 7875643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7882bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 789a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 790945aea22SJiri Olsa 791945aea22SJiri Olsa /* group1 cycles:kppp */ 792e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 794945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7951fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 799945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 803fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 804945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8052bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 806a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 807945aea22SJiri Olsa 808945aea22SJiri Olsa /* group2 cycles + G modifier */ 809e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 811945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8121fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 819c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 820945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 821945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8225643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8232bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 824a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 825945aea22SJiri Olsa 826945aea22SJiri Olsa /* group2 1:3 + G modifier */ 827e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config); 8301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 836fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8372bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 838a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 839945aea22SJiri Olsa 840945aea22SJiri Olsa /* instructions:u */ 841e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 843945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8441fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 848943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 851c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 852a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 853945aea22SJiri Olsa 854945aea22SJiri Olsa return 0; 855945aea22SJiri Olsa } 856945aea22SJiri Olsa 85763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 858945aea22SJiri Olsa { 85932dcd021SJiri Olsa struct evsel *evsel, *leader; 860945aea22SJiri Olsa 8616484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8623a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 863945aea22SJiri Olsa 864945aea22SJiri Olsa /* cycles:u + p */ 865515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 867945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8681fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 872945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 876945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 877c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8785643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8792bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 880a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 881945aea22SJiri Olsa 882945aea22SJiri Olsa /* instructions:kp + p */ 883e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 885945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8861fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 890945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 894fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8952bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 896a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 897945aea22SJiri Olsa 898945aea22SJiri Olsa return 0; 899945aea22SJiri Olsa } 900945aea22SJiri Olsa 90163503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 902945aea22SJiri Olsa { 90332dcd021SJiri Olsa struct evsel *evsel, *leader; 904945aea22SJiri Olsa 9056484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9063a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups); 907945aea22SJiri Olsa 908945aea22SJiri Olsa /* cycles + G */ 909515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 911945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9121fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 919945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 920c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9215643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9222bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 923a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 924945aea22SJiri Olsa 925945aea22SJiri Olsa /* instructions + G */ 926e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 928945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9291fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 936fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9372bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 938a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 939945aea22SJiri Olsa 940945aea22SJiri Olsa /* cycles:G */ 941e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 9421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 943945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9441fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 951945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 952c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9535643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9542bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 955a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 956945aea22SJiri Olsa 957945aea22SJiri Olsa /* instructions:G */ 958e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 960945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9611fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 968fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9692bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 970945aea22SJiri Olsa 971945aea22SJiri Olsa /* cycles */ 972e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 974945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9751fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 982c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 983945aea22SJiri Olsa 984945aea22SJiri Olsa return 0; 985945aea22SJiri Olsa } 986945aea22SJiri Olsa 98763503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 9885a30a99fSJiri Olsa { 98932dcd021SJiri Olsa struct evsel *evsel, *leader; 9905a30a99fSJiri Olsa 9916484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 9923a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 9935a30a99fSJiri Olsa 9945a30a99fSJiri Olsa /* cycles + :H group modifier */ 995515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9975a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9981fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10055a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1006c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10075643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10082bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10095a30a99fSJiri Olsa 10105a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1011e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10135a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10141fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1021fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10222bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10235a30a99fSJiri Olsa 10245a30a99fSJiri Olsa return 0; 10255a30a99fSJiri Olsa } 10265a30a99fSJiri Olsa 102763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10285a30a99fSJiri Olsa { 102932dcd021SJiri Olsa struct evsel *evsel, *leader; 10305a30a99fSJiri Olsa 10316484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10323a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 10335a30a99fSJiri Olsa 10345a30a99fSJiri Olsa /* cycles + :G group modifier */ 1035515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10375a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10381fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10455a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1046c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10475643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10482bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10495a30a99fSJiri Olsa 10505a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1051e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10535a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10541fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1061fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10622bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10635a30a99fSJiri Olsa 10645a30a99fSJiri Olsa return 0; 10655a30a99fSJiri Olsa } 10665a30a99fSJiri Olsa 106763503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10685a30a99fSJiri Olsa { 106932dcd021SJiri Olsa struct evsel *evsel, *leader; 10705a30a99fSJiri Olsa 10716484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10723a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 10735a30a99fSJiri Olsa 10745a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1075515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10775a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10781fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10855a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1086c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10875643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10882bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10895a30a99fSJiri Olsa 10905a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1091e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10935a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10941fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1101fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11022bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11035a30a99fSJiri Olsa 11045a30a99fSJiri Olsa return 0; 11055a30a99fSJiri Olsa } 11065a30a99fSJiri Olsa 110763503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11085a30a99fSJiri Olsa { 110932dcd021SJiri Olsa struct evsel *evsel, *leader; 11105a30a99fSJiri Olsa 11116484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11123a683120SJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); 11135a30a99fSJiri Olsa 11145a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1115515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11175a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11181fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11255a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1126c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11275643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11282bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11295a30a99fSJiri Olsa 11305a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1131e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11335a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11341fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1141fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11422bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11435a30a99fSJiri Olsa 11445a30a99fSJiri Olsa return 0; 11455a30a99fSJiri Olsa } 11465a30a99fSJiri Olsa 114763503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1148a9f93f97SJiri Olsa { 114932dcd021SJiri Olsa struct evsel *evsel, *leader; 1150a9f93f97SJiri Olsa 11516484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1152a9f93f97SJiri Olsa 1153a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1154515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1156a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11571fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1164a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1165fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1166a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1167a9f93f97SJiri Olsa 1168a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1169e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1171a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11721fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1179fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1180a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1181a9f93f97SJiri Olsa 1182a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1183e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1185a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11861fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 11871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1193a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1194fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1195a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1196a9f93f97SJiri Olsa 1197a9f93f97SJiri Olsa return 0; 1198a9f93f97SJiri Olsa } 1199a9f93f97SJiri Olsa 120063503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1201a9f93f97SJiri Olsa { 120232dcd021SJiri Olsa struct evsel *evsel, *leader; 1203a9f93f97SJiri Olsa 12046484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1205a9f93f97SJiri Olsa 1206a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1207515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1209a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12101fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 12111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1217a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1218fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1219a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1220a9f93f97SJiri Olsa 1221a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1222e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1224a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12251fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1232a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1233fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1234a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1235a9f93f97SJiri Olsa 1236a9f93f97SJiri Olsa return 0; 1237a9f93f97SJiri Olsa } 1238a9f93f97SJiri Olsa 123963503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1240c9ee780fSMichael Ellerman { 1241515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1242c9ee780fSMichael Ellerman 12431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1248c9ee780fSMichael Ellerman 1249c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1250c9ee780fSMichael Ellerman } 1251c9ee780fSMichael Ellerman 125263503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1253c9ee780fSMichael Ellerman { 125432dcd021SJiri Olsa struct evsel *evsel, *leader; 1255c9ee780fSMichael Ellerman 12566484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1257c9ee780fSMichael Ellerman 1258c9ee780fSMichael Ellerman /* cycles - group leader */ 1259515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1261c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12621fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1263c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1264fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1266c9ee780fSMichael Ellerman 1267c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1268e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1270c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12711fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 12721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1273c9ee780fSMichael Ellerman 1274c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1275e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 1276c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12771fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1279c9ee780fSMichael Ellerman 1280c9ee780fSMichael Ellerman return 0; 1281c9ee780fSMichael Ellerman } 1282c9ee780fSMichael Ellerman 12830997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 12840997a266SAndi Kleen { 12850997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 12860997a266SAndi Kleen 12870997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12880997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12890997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12900997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12910997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 12920997a266SAndi Kleen 12930997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 12940997a266SAndi Kleen } 12950997a266SAndi Kleen 12960997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 12970997a266SAndi Kleen { 12980997a266SAndi Kleen struct evsel *evsel, *leader; 12990997a266SAndi Kleen 13000997a266SAndi Kleen TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 13010997a266SAndi Kleen 13020997a266SAndi Kleen /* cycles - group leader */ 13030997a266SAndi Kleen evsel = leader = evlist__first(evlist); 13040997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13050997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13060997a266SAndi Kleen PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 13070997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1308fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13090997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13100997a266SAndi Kleen 13110997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 13120997a266SAndi Kleen evsel = evsel__next(evsel); 13130997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13140997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13150997a266SAndi Kleen PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 13160997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13170997a266SAndi Kleen 13180997a266SAndi Kleen /* branch-misses - ditto */ 13190997a266SAndi Kleen evsel = evsel__next(evsel); 13200997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13210997a266SAndi Kleen PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 13220997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13230997a266SAndi Kleen 13240997a266SAndi Kleen return 0; 13250997a266SAndi Kleen } 132663503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1327ec32398cSJacob Shin { 1328515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1329ec32398cSJacob Shin 13306484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1333ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13341fc632ceSJiri Olsa evsel->core.attr.bp_type); 1335ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13361fc632ceSJiri Olsa evsel->core.attr.bp_len); 1337ec32398cSJacob Shin 1338ec32398cSJacob Shin return 0; 1339ec32398cSJacob Shin } 1340ec32398cSJacob Shin 134163503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1342ec32398cSJacob Shin { 1343515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1344ec32398cSJacob Shin 13456484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1348ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13491fc632ceSJiri Olsa evsel->core.attr.bp_type); 1350ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13511fc632ceSJiri Olsa evsel->core.attr.bp_len); 1352ec32398cSJacob Shin 1353ec32398cSJacob Shin return 0; 1354ec32398cSJacob Shin } 1355ec32398cSJacob Shin 1356ec32398cSJacob Shin static int 135763503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1358ec32398cSJacob Shin { 1359515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1360ec32398cSJacob Shin 13611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1365ec32398cSJacob Shin 1366ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1367ec32398cSJacob Shin } 1368ec32398cSJacob Shin 136963503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1370ddd83c97SJiri Olsa { 1371515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1372ddd83c97SJiri Olsa 13736484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1375ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong config", 13761fc632ceSJiri Olsa PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config); 1377ddd83c97SJiri Olsa return 0; 1378ddd83c97SJiri Olsa } 1379ddd83c97SJiri Olsa 138063503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 138110bf358aSWang Nan { 1382515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 138310bf358aSWang Nan 138410bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0); 138510bf358aSWang Nan return 0; 138610bf358aSWang Nan } 138710bf358aSWang Nan 138863503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 138910bf358aSWang Nan { 1390515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139110bf358aSWang Nan 139210bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0); 139310bf358aSWang Nan return 0; 139410bf358aSWang Nan } 139510bf358aSWang Nan 139663503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 139710bf358aSWang Nan { 1398515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139910bf358aSWang Nan 140010bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0); 140110bf358aSWang Nan return 0; 140210bf358aSWang Nan } 140310bf358aSWang Nan 140463503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 140543d0b978SWang Nan { 1406515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 140743d0b978SWang Nan 140843d0b978SWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0); 140943d0b978SWang Nan return 0; 141043d0b978SWang Nan } 141110bf358aSWang Nan 141216ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 141316ddcfbfSJiri Olsa { 141416ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 141516ddcfbfSJiri Olsa } 141616ddcfbfSJiri Olsa 141763503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1418b3f58c8dSArnaldo Carvalho de Melo { 1419515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1420b3f58c8dSArnaldo Carvalho de Melo 1421b3f58c8dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0); 1422b3f58c8dSArnaldo Carvalho de Melo return 0; 1423b3f58c8dSArnaldo Carvalho de Melo } 1424b3f58c8dSArnaldo Carvalho de Melo 142563503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 142606dc5bf2SAlexey Budankov { 1427515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 142806dc5bf2SAlexey Budankov 142906dc5bf2SAlexey Budankov TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0); 143006dc5bf2SAlexey Budankov return 0; 143106dc5bf2SAlexey Budankov } 143206dc5bf2SAlexey Budankov 14333a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 14343a6c51e4SJiri Olsa { 14353a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 14363a6c51e4SJiri Olsa 14373a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14383a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14393a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 14403a6c51e4SJiri Olsa return 0; 14413a6c51e4SJiri Olsa } 14423a6c51e4SJiri Olsa 144363503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1444714a92d8SJiri Olsa { 1445515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1446714a92d8SJiri Olsa 14471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 1450714a92d8SJiri Olsa return 0; 1451714a92d8SJiri Olsa } 1452714a92d8SJiri Olsa 145363503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1454714a92d8SJiri Olsa { 1455515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1456714a92d8SJiri Olsa 14571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 1460714a92d8SJiri Olsa return 0; 1461714a92d8SJiri Olsa } 1462714a92d8SJiri Olsa 146382ce75d9SJiri Olsa static int count_tracepoints(void) 146482ce75d9SJiri Olsa { 146582ce75d9SJiri Olsa struct dirent *events_ent; 146682ce75d9SJiri Olsa DIR *events_dir; 146782ce75d9SJiri Olsa int cnt = 0; 146882ce75d9SJiri Olsa 14697014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 147082ce75d9SJiri Olsa 147182ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 147282ce75d9SJiri Olsa 147382ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 147425a7d914SArnaldo Carvalho de Melo char *sys_path; 147582ce75d9SJiri Olsa struct dirent *sys_ent; 147682ce75d9SJiri Olsa DIR *sys_dir; 147782ce75d9SJiri Olsa 147882ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 147982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 148082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 148182ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 148282ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 148382ce75d9SJiri Olsa continue; 148482ce75d9SJiri Olsa 148525a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 148625a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 148782ce75d9SJiri Olsa 148882ce75d9SJiri Olsa sys_dir = opendir(sys_path); 148982ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 149082ce75d9SJiri Olsa 149182ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 149282ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 149382ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 149482ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 149582ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 149682ce75d9SJiri Olsa continue; 149782ce75d9SJiri Olsa 149882ce75d9SJiri Olsa cnt++; 149982ce75d9SJiri Olsa } 150082ce75d9SJiri Olsa 150182ce75d9SJiri Olsa closedir(sys_dir); 150225a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 150382ce75d9SJiri Olsa } 150482ce75d9SJiri Olsa 150582ce75d9SJiri Olsa closedir(events_dir); 150682ce75d9SJiri Olsa return cnt; 150782ce75d9SJiri Olsa } 150882ce75d9SJiri Olsa 150963503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 151082ce75d9SJiri Olsa { 151182ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 15126484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 151382ce75d9SJiri Olsa 151482ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 151582ce75d9SJiri Olsa } 151682ce75d9SJiri Olsa 15172541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist) 15182541cb63SJin Yao { 15192541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 15202541cb63SJin Yao 15212541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15222541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15232541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 15242541cb63SJin Yao return 0; 15252541cb63SJin Yao } 15262541cb63SJin Yao 15272541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist) 15282541cb63SJin Yao { 15292541cb63SJin Yao struct evsel *evsel, *leader; 15302541cb63SJin Yao 15312541cb63SJin Yao evsel = leader = evlist__first(evlist); 15322541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15332541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15342541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1535fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15362541cb63SJin Yao 15372541cb63SJin Yao evsel = evsel__next(evsel); 15382541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15392541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config); 1540fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15412541cb63SJin Yao return 0; 15422541cb63SJin Yao } 15432541cb63SJin Yao 15442541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist) 15452541cb63SJin Yao { 15462541cb63SJin Yao struct evsel *evsel, *leader; 15472541cb63SJin Yao 15482541cb63SJin Yao evsel = leader = evlist__first(evlist); 15492541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15502541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1551fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15522541cb63SJin Yao 15532541cb63SJin Yao evsel = evsel__next(evsel); 15542541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15552541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1556fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15572541cb63SJin Yao return 0; 15582541cb63SJin Yao } 15592541cb63SJin Yao 15602541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist) 15612541cb63SJin Yao { 15622541cb63SJin Yao struct evsel *evsel, *leader; 15632541cb63SJin Yao 15642541cb63SJin Yao evsel = leader = evlist__first(evlist); 15652541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15662541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15672541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1568fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15692541cb63SJin Yao 15702541cb63SJin Yao evsel = evsel__next(evsel); 15712541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1572fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15732541cb63SJin Yao return 0; 15742541cb63SJin Yao } 15752541cb63SJin Yao 15762541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist) 15772541cb63SJin Yao { 15782541cb63SJin Yao struct evsel *evsel, *leader; 15792541cb63SJin Yao 15802541cb63SJin Yao evsel = leader = evlist__first(evlist); 15812541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15822541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15832541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1584fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15852541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 15862541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 15872541cb63SJin Yao 15882541cb63SJin Yao evsel = evsel__next(evsel); 15892541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15902541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config); 1591fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15922541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 15932541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 15942541cb63SJin Yao return 0; 15952541cb63SJin Yao } 15962541cb63SJin Yao 15972541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist) 15982541cb63SJin Yao { 15992541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16002541cb63SJin Yao 1601490e9a8fSJin Yao if (!perf_pmu__hybrid_mounted("cpu_atom")) { 1602490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1603490e9a8fSJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 1604490e9a8fSJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 1605490e9a8fSJin Yao return 0; 1606490e9a8fSJin Yao } 1607490e9a8fSJin Yao 16082541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 16092541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16102541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16112541cb63SJin Yao 16122541cb63SJin Yao /* The type of second event is randome value */ 16132541cb63SJin Yao evsel = evsel__next(evsel); 16142541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16152541cb63SJin Yao return 0; 16162541cb63SJin Yao } 16172541cb63SJin Yao 16182541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist) 16192541cb63SJin Yao { 16202541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16212541cb63SJin Yao 16222541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16232541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16242541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16252541cb63SJin Yao return 0; 16262541cb63SJin Yao } 16272541cb63SJin Yao 16282541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist) 16292541cb63SJin Yao { 16302541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16312541cb63SJin Yao 1632490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16332541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 16342541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff)); 16352541cb63SJin Yao return 0; 16362541cb63SJin Yao } 16372541cb63SJin Yao 163823b6339bSArnaldo Carvalho de Melo struct evlist_test { 1639945aea22SJiri Olsa const char *name; 1640945aea22SJiri Olsa __u32 type; 1641615b8f99SAlexander Yarygin const int id; 164216ddcfbfSJiri Olsa bool (*valid)(void); 164363503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1644945aea22SJiri Olsa }; 1645945aea22SJiri Olsa 164623b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = { 1647615b8f99SAlexander Yarygin { 164843f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1649945aea22SJiri Olsa .check = test__checkevent_tracepoint, 1650615b8f99SAlexander Yarygin .id = 0, 1651945aea22SJiri Olsa }, 1652615b8f99SAlexander Yarygin { 1653945aea22SJiri Olsa .name = "syscalls:*", 1654945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 1655615b8f99SAlexander Yarygin .id = 1, 1656945aea22SJiri Olsa }, 1657615b8f99SAlexander Yarygin { 1658945aea22SJiri Olsa .name = "r1a", 1659945aea22SJiri Olsa .check = test__checkevent_raw, 1660615b8f99SAlexander Yarygin .id = 2, 1661945aea22SJiri Olsa }, 1662615b8f99SAlexander Yarygin { 1663945aea22SJiri Olsa .name = "1:1", 1664945aea22SJiri Olsa .check = test__checkevent_numeric, 1665615b8f99SAlexander Yarygin .id = 3, 1666945aea22SJiri Olsa }, 1667615b8f99SAlexander Yarygin { 1668945aea22SJiri Olsa .name = "instructions", 1669945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 1670615b8f99SAlexander Yarygin .id = 4, 1671945aea22SJiri Olsa }, 1672615b8f99SAlexander Yarygin { 1673945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1674945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 1675615b8f99SAlexander Yarygin .id = 5, 1676945aea22SJiri Olsa }, 1677615b8f99SAlexander Yarygin { 1678945aea22SJiri Olsa .name = "faults", 1679945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 1680615b8f99SAlexander Yarygin .id = 6, 1681945aea22SJiri Olsa }, 1682615b8f99SAlexander Yarygin { 1683945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1684945aea22SJiri Olsa .check = test__checkevent_genhw, 1685615b8f99SAlexander Yarygin .id = 7, 1686945aea22SJiri Olsa }, 1687615b8f99SAlexander Yarygin { 1688945aea22SJiri Olsa .name = "mem:0", 1689945aea22SJiri Olsa .check = test__checkevent_breakpoint, 1690615b8f99SAlexander Yarygin .id = 8, 1691945aea22SJiri Olsa }, 1692615b8f99SAlexander Yarygin { 1693945aea22SJiri Olsa .name = "mem:0:x", 1694945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 1695615b8f99SAlexander Yarygin .id = 9, 1696945aea22SJiri Olsa }, 1697615b8f99SAlexander Yarygin { 1698945aea22SJiri Olsa .name = "mem:0:r", 1699945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 1700615b8f99SAlexander Yarygin .id = 10, 1701945aea22SJiri Olsa }, 1702615b8f99SAlexander Yarygin { 1703945aea22SJiri Olsa .name = "mem:0:w", 1704945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 1705615b8f99SAlexander Yarygin .id = 11, 1706945aea22SJiri Olsa }, 1707615b8f99SAlexander Yarygin { 170843f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1709945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 1710615b8f99SAlexander Yarygin .id = 12, 1711945aea22SJiri Olsa }, 1712615b8f99SAlexander Yarygin { 1713945aea22SJiri Olsa .name = "syscalls:*:u", 1714945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 1715615b8f99SAlexander Yarygin .id = 13, 1716945aea22SJiri Olsa }, 1717615b8f99SAlexander Yarygin { 1718945aea22SJiri Olsa .name = "r1a:kp", 1719945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 1720615b8f99SAlexander Yarygin .id = 14, 1721945aea22SJiri Olsa }, 1722615b8f99SAlexander Yarygin { 1723945aea22SJiri Olsa .name = "1:1:hp", 1724945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 1725615b8f99SAlexander Yarygin .id = 15, 1726945aea22SJiri Olsa }, 1727615b8f99SAlexander Yarygin { 1728945aea22SJiri Olsa .name = "instructions:h", 1729945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 1730615b8f99SAlexander Yarygin .id = 16, 1731945aea22SJiri Olsa }, 1732615b8f99SAlexander Yarygin { 1733945aea22SJiri Olsa .name = "faults:u", 1734945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 1735615b8f99SAlexander Yarygin .id = 17, 1736945aea22SJiri Olsa }, 1737615b8f99SAlexander Yarygin { 1738945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1739945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 1740615b8f99SAlexander Yarygin .id = 18, 1741945aea22SJiri Olsa }, 1742615b8f99SAlexander Yarygin { 1743945aea22SJiri Olsa .name = "mem:0:u", 1744945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 1745615b8f99SAlexander Yarygin .id = 19, 1746945aea22SJiri Olsa }, 1747615b8f99SAlexander Yarygin { 1748945aea22SJiri Olsa .name = "mem:0:x:k", 1749945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 1750615b8f99SAlexander Yarygin .id = 20, 1751945aea22SJiri Olsa }, 1752615b8f99SAlexander Yarygin { 1753945aea22SJiri Olsa .name = "mem:0:r:hp", 1754945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 1755615b8f99SAlexander Yarygin .id = 21, 1756945aea22SJiri Olsa }, 1757615b8f99SAlexander Yarygin { 1758945aea22SJiri Olsa .name = "mem:0:w:up", 1759945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 1760615b8f99SAlexander Yarygin .id = 22, 1761945aea22SJiri Olsa }, 1762615b8f99SAlexander Yarygin { 176343f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1764945aea22SJiri Olsa .check = test__checkevent_list, 1765615b8f99SAlexander Yarygin .id = 23, 1766945aea22SJiri Olsa }, 1767615b8f99SAlexander Yarygin { 1768945aea22SJiri Olsa .name = "instructions:G", 1769945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 1770615b8f99SAlexander Yarygin .id = 24, 1771945aea22SJiri Olsa }, 1772615b8f99SAlexander Yarygin { 1773945aea22SJiri Olsa .name = "instructions:H", 1774945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 1775615b8f99SAlexander Yarygin .id = 25, 1776945aea22SJiri Olsa }, 1777615b8f99SAlexander Yarygin { 1778945aea22SJiri Olsa .name = "mem:0:rw", 1779945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 1780615b8f99SAlexander Yarygin .id = 26, 1781945aea22SJiri Olsa }, 1782615b8f99SAlexander Yarygin { 1783945aea22SJiri Olsa .name = "mem:0:rw:kp", 1784945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 1785615b8f99SAlexander Yarygin .id = 27, 1786945aea22SJiri Olsa }, 1787615b8f99SAlexander Yarygin { 1788945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1789945aea22SJiri Olsa .check = test__group1, 1790615b8f99SAlexander Yarygin .id = 28, 1791945aea22SJiri Olsa }, 1792615b8f99SAlexander Yarygin { 1793945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1794945aea22SJiri Olsa .check = test__group2, 1795615b8f99SAlexander Yarygin .id = 29, 1796945aea22SJiri Olsa }, 1797615b8f99SAlexander Yarygin { 179843f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1799945aea22SJiri Olsa .check = test__group3, 1800615b8f99SAlexander Yarygin .id = 30, 1801945aea22SJiri Olsa }, 1802615b8f99SAlexander Yarygin { 1803945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1804945aea22SJiri Olsa .check = test__group4, 1805615b8f99SAlexander Yarygin .id = 31, 1806945aea22SJiri Olsa }, 1807615b8f99SAlexander Yarygin { 1808945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1809945aea22SJiri Olsa .check = test__group5, 1810615b8f99SAlexander Yarygin .id = 32, 1811945aea22SJiri Olsa }, 1812615b8f99SAlexander Yarygin { 181382ce75d9SJiri Olsa .name = "*:*", 181482ce75d9SJiri Olsa .check = test__all_tracepoints, 1815615b8f99SAlexander Yarygin .id = 33, 181682ce75d9SJiri Olsa }, 1817615b8f99SAlexander Yarygin { 18185a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 18195a30a99fSJiri Olsa .check = test__group_gh1, 1820615b8f99SAlexander Yarygin .id = 34, 18215a30a99fSJiri Olsa }, 1822615b8f99SAlexander Yarygin { 18235a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 18245a30a99fSJiri Olsa .check = test__group_gh2, 1825615b8f99SAlexander Yarygin .id = 35, 18265a30a99fSJiri Olsa }, 1827615b8f99SAlexander Yarygin { 18285a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 18295a30a99fSJiri Olsa .check = test__group_gh3, 1830615b8f99SAlexander Yarygin .id = 36, 18315a30a99fSJiri Olsa }, 1832615b8f99SAlexander Yarygin { 18335a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 18345a30a99fSJiri Olsa .check = test__group_gh4, 1835615b8f99SAlexander Yarygin .id = 37, 18365a30a99fSJiri Olsa }, 1837615b8f99SAlexander Yarygin { 1838a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1839a9f93f97SJiri Olsa .check = test__leader_sample1, 1840615b8f99SAlexander Yarygin .id = 38, 1841a9f93f97SJiri Olsa }, 1842615b8f99SAlexander Yarygin { 1843a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1844a9f93f97SJiri Olsa .check = test__leader_sample2, 1845615b8f99SAlexander Yarygin .id = 39, 1846a9f93f97SJiri Olsa }, 1847615b8f99SAlexander Yarygin { 1848c9ee780fSMichael Ellerman .name = "instructions:uDp", 1849c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 1850615b8f99SAlexander Yarygin .id = 40, 1851c9ee780fSMichael Ellerman }, 1852615b8f99SAlexander Yarygin { 1853c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1854c9ee780fSMichael Ellerman .check = test__pinned_group, 1855615b8f99SAlexander Yarygin .id = 41, 1856c9ee780fSMichael Ellerman }, 1857ec32398cSJacob Shin { 1858ec32398cSJacob Shin .name = "mem:0/1", 1859ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 1860ec32398cSJacob Shin .id = 42, 1861ec32398cSJacob Shin }, 1862ec32398cSJacob Shin { 1863ec32398cSJacob Shin .name = "mem:0/2:w", 1864ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 1865ec32398cSJacob Shin .id = 43, 1866ec32398cSJacob Shin }, 1867ec32398cSJacob Shin { 1868ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1869ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 1870ec32398cSJacob Shin .id = 44 1871ec32398cSJacob Shin }, 1872c0bc8c6dSAlexander Yarygin #if defined(__s390x__) 1873c0bc8c6dSAlexander Yarygin { 1874c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1875c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 187653fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 1877c0bc8c6dSAlexander Yarygin .id = 100, 1878c0bc8c6dSAlexander Yarygin }, 1879c0bc8c6dSAlexander Yarygin #endif 1880a1e12da4SJiri Olsa { 1881a1e12da4SJiri Olsa .name = "instructions:I", 1882a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 1883a1e12da4SJiri Olsa .id = 45, 1884a1e12da4SJiri Olsa }, 1885a1e12da4SJiri Olsa { 1886a1e12da4SJiri Olsa .name = "instructions:kIG", 1887a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 1888a1e12da4SJiri Olsa .id = 46, 1889a1e12da4SJiri Olsa }, 1890ddd83c97SJiri Olsa { 1891ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1892ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 1893ddd83c97SJiri Olsa .id = 47, 1894ddd83c97SJiri Olsa }, 189510bf358aSWang Nan { 189610bf358aSWang Nan .name = "instructions/name=insn/", 189710bf358aSWang Nan .check = test__checkevent_config_symbol, 189810bf358aSWang Nan .id = 48, 189910bf358aSWang Nan }, 190010bf358aSWang Nan { 190110bf358aSWang Nan .name = "r1234/name=rawpmu/", 190210bf358aSWang Nan .check = test__checkevent_config_raw, 190310bf358aSWang Nan .id = 49, 190410bf358aSWang Nan }, 190510bf358aSWang Nan { 190610bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 190710bf358aSWang Nan .check = test__checkevent_config_num, 190810bf358aSWang Nan .id = 50, 190910bf358aSWang Nan }, 191043d0b978SWang Nan { 191143d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 191243d0b978SWang Nan .check = test__checkevent_config_cache, 191343d0b978SWang Nan .id = 51, 191443d0b978SWang Nan }, 1915b3f58c8dSArnaldo Carvalho de Melo { 1916b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 191716ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1918b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 1919b3f58c8dSArnaldo Carvalho de Melo .id = 52, 1920b3f58c8dSArnaldo Carvalho de Melo }, 192106dc5bf2SAlexey Budankov { 192206dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 192306dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 192406dc5bf2SAlexey Budankov .id = 53 1925714a92d8SJiri Olsa }, 1926714a92d8SJiri Olsa { 1927714a92d8SJiri Olsa .name = "cycles//u", 1928714a92d8SJiri Olsa .check = test__sym_event_slash, 1929714a92d8SJiri Olsa .id = 54, 1930714a92d8SJiri Olsa }, 1931714a92d8SJiri Olsa { 1932714a92d8SJiri Olsa .name = "cycles:k", 1933714a92d8SJiri Olsa .check = test__sym_event_dc, 1934714a92d8SJiri Olsa .id = 55, 19350997a266SAndi Kleen }, 19360997a266SAndi Kleen { 19370997a266SAndi Kleen .name = "instructions:uep", 19380997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 19390997a266SAndi Kleen .id = 56, 19400997a266SAndi Kleen }, 19410997a266SAndi Kleen { 19420997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 19430997a266SAndi Kleen .check = test__exclusive_group, 19440997a266SAndi Kleen .id = 57, 19450997a266SAndi Kleen }, 1946945aea22SJiri Olsa }; 1947945aea22SJiri Olsa 194823b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = { 1949615b8f99SAlexander Yarygin { 1950945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1951945aea22SJiri Olsa .check = test__checkevent_pmu, 1952615b8f99SAlexander Yarygin .id = 0, 1953945aea22SJiri Olsa }, 1954615b8f99SAlexander Yarygin { 1955945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1956945aea22SJiri Olsa .check = test__checkevent_pmu_name, 1957615b8f99SAlexander Yarygin .id = 1, 1958945aea22SJiri Olsa }, 195971ef150eSKan Liang { 196071ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 196171ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 196271ef150eSKan Liang .id = 2, 196371ef150eSKan Liang }, 196406dc5bf2SAlexey Budankov { 1965a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 196606dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 196706dc5bf2SAlexey Budankov .id = 3, 19683a6c51e4SJiri Olsa }, 19693a6c51e4SJiri Olsa { 19703a6c51e4SJiri Olsa .name = "software/r1a/", 19713a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 19723a6c51e4SJiri Olsa .id = 4, 19733a6c51e4SJiri Olsa }, 1974c33cdf54SJiri Olsa { 1975c33cdf54SJiri Olsa .name = "software/r0x1a/", 1976c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 1977c33cdf54SJiri Olsa .id = 4, 1978c33cdf54SJiri Olsa }, 1979945aea22SJiri Olsa }; 1980945aea22SJiri Olsa 198123b6339bSArnaldo Carvalho de Melo struct terms_test { 1982945aea22SJiri Olsa const char *str; 1983945aea22SJiri Olsa __u32 type; 1984945aea22SJiri Olsa int (*check)(struct list_head *terms); 1985945aea22SJiri Olsa }; 1986945aea22SJiri Olsa 198723b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = { 1988945aea22SJiri Olsa [0] = { 19894929e95aSJiri Olsa .str = "config=10,config1,config2=3,umask=1,read,r0xead", 1990945aea22SJiri Olsa .check = test__checkterms_simple, 1991945aea22SJiri Olsa }, 1992945aea22SJiri Olsa }; 1993945aea22SJiri Olsa 19942541cb63SJin Yao static struct evlist_test test__hybrid_events[] = { 19952541cb63SJin Yao { 19962541cb63SJin Yao .name = "cpu_core/cpu-cycles/", 19972541cb63SJin Yao .check = test__hybrid_hw_event_with_pmu, 19982541cb63SJin Yao .id = 0, 19992541cb63SJin Yao }, 20002541cb63SJin Yao { 20012541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu_core/instructions/}", 20022541cb63SJin Yao .check = test__hybrid_hw_group_event, 20032541cb63SJin Yao .id = 1, 20042541cb63SJin Yao }, 20052541cb63SJin Yao { 20062541cb63SJin Yao .name = "{cpu-clock,cpu_core/cpu-cycles/}", 20072541cb63SJin Yao .check = test__hybrid_sw_hw_group_event, 20082541cb63SJin Yao .id = 2, 20092541cb63SJin Yao }, 20102541cb63SJin Yao { 20112541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu-clock}", 20122541cb63SJin Yao .check = test__hybrid_hw_sw_group_event, 20132541cb63SJin Yao .id = 3, 20142541cb63SJin Yao }, 20152541cb63SJin Yao { 20162541cb63SJin Yao .name = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}", 20172541cb63SJin Yao .check = test__hybrid_group_modifier1, 20182541cb63SJin Yao .id = 4, 20192541cb63SJin Yao }, 20202541cb63SJin Yao { 20212541cb63SJin Yao .name = "r1a", 20222541cb63SJin Yao .check = test__hybrid_raw1, 20232541cb63SJin Yao .id = 5, 20242541cb63SJin Yao }, 20252541cb63SJin Yao { 20262541cb63SJin Yao .name = "cpu_core/r1a/", 20272541cb63SJin Yao .check = test__hybrid_raw2, 20282541cb63SJin Yao .id = 6, 20292541cb63SJin Yao }, 20302541cb63SJin Yao { 20312541cb63SJin Yao .name = "cpu_core/config=10,config1,config2=3,period=1000/u", 20322541cb63SJin Yao .check = test__checkevent_pmu, 20332541cb63SJin Yao .id = 7, 20342541cb63SJin Yao }, 20352541cb63SJin Yao { 2036490e9a8fSJin Yao .name = "cpu_core/LLC-loads/", 20372541cb63SJin Yao .check = test__hybrid_cache_event, 20382541cb63SJin Yao .id = 8, 20392541cb63SJin Yao }, 20402541cb63SJin Yao }; 20412541cb63SJin Yao 204223b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e) 2043945aea22SJiri Olsa { 2044a910e466SIan Rogers struct parse_events_error err; 204563503dbaSJiri Olsa struct evlist *evlist; 2046945aea22SJiri Olsa int ret; 2047945aea22SJiri Olsa 2048a910e466SIan Rogers bzero(&err, sizeof(err)); 204916ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 205016ddcfbfSJiri Olsa pr_debug("... SKIP"); 205116ddcfbfSJiri Olsa return 0; 205216ddcfbfSJiri Olsa } 205316ddcfbfSJiri Olsa 20540f98b11cSJiri Olsa evlist = evlist__new(); 2055945aea22SJiri Olsa if (evlist == NULL) 2056945aea22SJiri Olsa return -ENOMEM; 2057945aea22SJiri Olsa 2058933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2059945aea22SJiri Olsa if (ret) { 2060933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2061933ccf20SJiri Olsa e->name, ret, err.str); 2062933ccf20SJiri Olsa parse_events_print_error(&err, e->name); 20632d4352c0SArnaldo Carvalho de Melo } else { 20642d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2065945aea22SJiri Olsa } 2066945aea22SJiri Olsa 2067c12995a5SJiri Olsa evlist__delete(evlist); 2068945aea22SJiri Olsa 2069945aea22SJiri Olsa return ret; 2070945aea22SJiri Olsa } 2071945aea22SJiri Olsa 207223b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt) 2073945aea22SJiri Olsa { 2074945aea22SJiri Olsa int ret1, ret2 = 0; 2075945aea22SJiri Olsa unsigned i; 2076945aea22SJiri Olsa 2077945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 207823b6339bSArnaldo Carvalho de Melo struct evlist_test *e = &events[i]; 2079945aea22SJiri Olsa 208016ddcfbfSJiri Olsa pr_debug("running test %d '%s'", e->id, e->name); 2081945aea22SJiri Olsa ret1 = test_event(e); 2082945aea22SJiri Olsa if (ret1) 2083945aea22SJiri Olsa ret2 = ret1; 208416ddcfbfSJiri Olsa pr_debug("\n"); 2085945aea22SJiri Olsa } 2086945aea22SJiri Olsa 2087945aea22SJiri Olsa return ret2; 2088945aea22SJiri Olsa } 2089945aea22SJiri Olsa 209023b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t) 2091945aea22SJiri Olsa { 2092c549aca5SDavid Ahern struct list_head terms; 2093945aea22SJiri Olsa int ret; 2094945aea22SJiri Olsa 2095c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2096945aea22SJiri Olsa 20974929e95aSJiri Olsa /* 20984929e95aSJiri Olsa * The perf_pmu__test_parse_init prepares perf_pmu_events_list 20994929e95aSJiri Olsa * which gets freed in parse_events_terms. 21004929e95aSJiri Olsa */ 21014929e95aSJiri Olsa if (perf_pmu__test_parse_init()) 21024929e95aSJiri Olsa return -1; 21034929e95aSJiri Olsa 2104c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2105945aea22SJiri Olsa if (ret) { 2106945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2107945aea22SJiri Olsa t->str , ret); 2108945aea22SJiri Olsa return ret; 2109945aea22SJiri Olsa } 2110945aea22SJiri Olsa 2111c549aca5SDavid Ahern ret = t->check(&terms); 2112682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2113945aea22SJiri Olsa 2114945aea22SJiri Olsa return ret; 2115945aea22SJiri Olsa } 2116945aea22SJiri Olsa 211723b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt) 2118945aea22SJiri Olsa { 2119945aea22SJiri Olsa int ret = 0; 2120945aea22SJiri Olsa unsigned i; 2121945aea22SJiri Olsa 2122945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 212323b6339bSArnaldo Carvalho de Melo struct terms_test *t = &terms[i]; 2124945aea22SJiri Olsa 2125945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2126945aea22SJiri Olsa ret = test_term(t); 2127945aea22SJiri Olsa if (ret) 2128945aea22SJiri Olsa break; 2129945aea22SJiri Olsa } 2130945aea22SJiri Olsa 2131945aea22SJiri Olsa return ret; 2132945aea22SJiri Olsa } 2133945aea22SJiri Olsa 2134945aea22SJiri Olsa static int test_pmu(void) 2135945aea22SJiri Olsa { 2136945aea22SJiri Olsa struct stat st; 2137945aea22SJiri Olsa char path[PATH_MAX]; 2138945aea22SJiri Olsa int ret; 2139945aea22SJiri Olsa 2140945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 2141cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 2142945aea22SJiri Olsa 2143945aea22SJiri Olsa ret = stat(path, &st); 2144945aea22SJiri Olsa if (ret) 2145945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 2146945aea22SJiri Olsa return !ret; 2147945aea22SJiri Olsa } 2148945aea22SJiri Olsa 2149945aea22SJiri Olsa static int test_pmu_events(void) 2150945aea22SJiri Olsa { 2151945aea22SJiri Olsa struct stat st; 2152945aea22SJiri Olsa char path[PATH_MAX]; 2153945aea22SJiri Olsa struct dirent *ent; 2154945aea22SJiri Olsa DIR *dir; 2155945aea22SJiri Olsa int ret; 2156945aea22SJiri Olsa 2157945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 2158cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 2159945aea22SJiri Olsa 2160945aea22SJiri Olsa ret = stat(path, &st); 2161945aea22SJiri Olsa if (ret) { 2162a895d57dSMasanari Iida pr_debug("omitting PMU cpu events tests\n"); 2163945aea22SJiri Olsa return 0; 2164945aea22SJiri Olsa } 2165945aea22SJiri Olsa 2166945aea22SJiri Olsa dir = opendir(path); 2167945aea22SJiri Olsa if (!dir) { 2168945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 2169945aea22SJiri Olsa return -1; 2170945aea22SJiri Olsa } 2171945aea22SJiri Olsa 2172945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 217316ddcfbfSJiri Olsa struct evlist_test e = { .id = 0, }; 21742e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 2175945aea22SJiri Olsa 217617a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 217717a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2178945aea22SJiri Olsa continue; 2179945aea22SJiri Olsa 21802e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name); 2181945aea22SJiri Olsa 2182945aea22SJiri Olsa e.name = name; 2183945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2184945aea22SJiri Olsa 2185945aea22SJiri Olsa ret = test_event(&e); 2186ffe59788SKan Liang if (ret) 2187ffe59788SKan Liang break; 21882e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 2189ffe59788SKan Liang e.name = name; 2190ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 2191ffe59788SKan Liang ret = test_event(&e); 2192945aea22SJiri Olsa } 2193945aea22SJiri Olsa 2194945aea22SJiri Olsa closedir(dir); 2195945aea22SJiri Olsa return ret; 2196945aea22SJiri Olsa } 2197945aea22SJiri Olsa 2198*c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2199*c7a3828dSJin Yao { 2200*c7a3828dSJin Yao char path[PATH_MAX]; 2201*c7a3828dSJin Yao DIR *dir; 2202*c7a3828dSJin Yao struct dirent *dent; 2203*c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2204*c7a3828dSJin Yao char buf[128]; 2205*c7a3828dSJin Yao FILE *file; 2206*c7a3828dSJin Yao 2207*c7a3828dSJin Yao if (!sysfs) 2208*c7a3828dSJin Yao return false; 2209*c7a3828dSJin Yao 2210*c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2211*c7a3828dSJin Yao dir = opendir(path); 2212*c7a3828dSJin Yao if (!dir) 2213*c7a3828dSJin Yao return false; 2214*c7a3828dSJin Yao 2215*c7a3828dSJin Yao while ((dent = readdir(dir))) { 2216*c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2217*c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2218*c7a3828dSJin Yao continue; 2219*c7a3828dSJin Yao 2220*c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2221*c7a3828dSJin Yao sysfs, dent->d_name); 2222*c7a3828dSJin Yao 2223*c7a3828dSJin Yao if (!file_available(path)) 2224*c7a3828dSJin Yao continue; 2225*c7a3828dSJin Yao 2226*c7a3828dSJin Yao file = fopen(path, "r"); 2227*c7a3828dSJin Yao if (!file) 2228*c7a3828dSJin Yao continue; 2229*c7a3828dSJin Yao 2230*c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2231*c7a3828dSJin Yao fclose(file); 2232*c7a3828dSJin Yao continue; 2233*c7a3828dSJin Yao } 2234*c7a3828dSJin Yao 2235*c7a3828dSJin Yao /* Remove the last '\n' */ 2236*c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2237*c7a3828dSJin Yao 2238*c7a3828dSJin Yao fclose(file); 2239*c7a3828dSJin Yao *event = strdup(dent->d_name); 2240*c7a3828dSJin Yao *alias = strdup(buf); 2241*c7a3828dSJin Yao closedir(dir); 2242*c7a3828dSJin Yao 2243*c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2244*c7a3828dSJin Yao free(*event); 2245*c7a3828dSJin Yao free(*alias); 2246*c7a3828dSJin Yao return false; 2247*c7a3828dSJin Yao } 2248*c7a3828dSJin Yao 2249*c7a3828dSJin Yao return true; 2250*c7a3828dSJin Yao } 2251*c7a3828dSJin Yao 2252*c7a3828dSJin Yao closedir(dir); 2253*c7a3828dSJin Yao return false; 2254*c7a3828dSJin Yao } 2255*c7a3828dSJin Yao 2256*c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2257*c7a3828dSJin Yao { 2258*c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2259*c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2260*c7a3828dSJin Yao 2261*c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2262*c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 2263*c7a3828dSJin Yao return 0; 2264*c7a3828dSJin Yao } 2265*c7a3828dSJin Yao 2266*c7a3828dSJin Yao static int test_pmu_events_alias(char *event, char *alias) 2267*c7a3828dSJin Yao { 2268*c7a3828dSJin Yao struct evlist_test e = { .id = 0, }; 2269*c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2270*c7a3828dSJin Yao 2271*c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2272*c7a3828dSJin Yao event, alias); 2273*c7a3828dSJin Yao 2274*c7a3828dSJin Yao e.name = name; 2275*c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2276*c7a3828dSJin Yao return test_event(&e); 2277*c7a3828dSJin Yao } 2278*c7a3828dSJin Yao 227981f17c90SArnaldo Carvalho de Melo int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused) 2280945aea22SJiri Olsa { 2281945aea22SJiri Olsa int ret1, ret2 = 0; 2282*c7a3828dSJin Yao char *event, *alias; 2283945aea22SJiri Olsa 2284945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 2285945aea22SJiri Olsa do { \ 2286945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 2287945aea22SJiri Olsa if (!ret2) \ 2288945aea22SJiri Olsa ret2 = ret1; \ 2289945aea22SJiri Olsa } while (0) 2290945aea22SJiri Olsa 22912541cb63SJin Yao if (perf_pmu__has_hybrid()) { 22922541cb63SJin Yao TEST_EVENTS(test__hybrid_events); 22932541cb63SJin Yao return ret2; 22942541cb63SJin Yao } 22952541cb63SJin Yao 2296945aea22SJiri Olsa TEST_EVENTS(test__events); 2297945aea22SJiri Olsa 2298945aea22SJiri Olsa if (test_pmu()) 2299945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 2300945aea22SJiri Olsa 2301945aea22SJiri Olsa if (test_pmu()) { 2302945aea22SJiri Olsa int ret = test_pmu_events(); 2303945aea22SJiri Olsa if (ret) 2304945aea22SJiri Olsa return ret; 2305945aea22SJiri Olsa } 2306945aea22SJiri Olsa 2307*c7a3828dSJin Yao if (test_alias(&event, &alias)) { 2308*c7a3828dSJin Yao int ret = test_pmu_events_alias(event, alias); 2309*c7a3828dSJin Yao 2310*c7a3828dSJin Yao free(event); 2311*c7a3828dSJin Yao free(alias); 2312*c7a3828dSJin Yao if (ret) 2313*c7a3828dSJin Yao return ret; 2314*c7a3828dSJin Yao } 2315*c7a3828dSJin Yao 2316945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 2317945aea22SJiri Olsa if (!ret2) 2318945aea22SJiri Olsa ret2 = ret1; 2319945aea22SJiri Olsa 2320945aea22SJiri Olsa return ret2; 2321945aea22SJiri Olsa } 2322