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" 976b31a29SArnaldo Carvalho de Melo #include <dirent.h> 10a43783aeSArnaldo Carvalho de Melo #include <errno.h> 117a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h> 127a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h> 137a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h> 14877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h> 15f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h> 1620a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h> 17945aea22SJiri Olsa 18945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 19945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 20945aea22SJiri Olsa 2153fe307dSThomas Richter #if defined(__s390x__) 2253fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 2353fe307dSThomas Richter * and retun success when trace point kvm_s390_create_vm 2453fe307dSThomas Richter * exists. Otherwise this test always fails. 2553fe307dSThomas Richter */ 2653fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 2753fe307dSThomas Richter { 2853fe307dSThomas Richter char *eventfile; 2953fe307dSThomas Richter bool rc = false; 3053fe307dSThomas Richter 3153fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 3253fe307dSThomas Richter 3353fe307dSThomas Richter if (eventfile) { 3453fe307dSThomas Richter DIR *mydir = opendir(eventfile); 3553fe307dSThomas Richter 3653fe307dSThomas Richter if (mydir) { 3753fe307dSThomas Richter rc = true; 3853fe307dSThomas Richter closedir(mydir); 3953fe307dSThomas Richter } 4053fe307dSThomas Richter put_events_file(eventfile); 4153fe307dSThomas Richter } 4253fe307dSThomas Richter 4353fe307dSThomas Richter return rc; 4453fe307dSThomas Richter } 4553fe307dSThomas Richter #endif 4653fe307dSThomas Richter 4763503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 48945aea22SJiri Olsa { 49515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 50945aea22SJiri Olsa 516484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 528d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 54945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 551fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 57945aea22SJiri Olsa return 0; 58945aea22SJiri Olsa } 59945aea22SJiri Olsa 6063503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 61945aea22SJiri Olsa { 6232dcd021SJiri Olsa struct evsel *evsel; 63945aea22SJiri Olsa 646484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 658d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); 66945aea22SJiri Olsa 67e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 68945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 691fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 70945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 711fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 72945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 731fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 74945aea22SJiri Olsa } 75945aea22SJiri Olsa return 0; 76945aea22SJiri Olsa } 77945aea22SJiri Olsa 7863503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 79945aea22SJiri Olsa { 80515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 81945aea22SJiri Olsa 826484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 85945aea22SJiri Olsa return 0; 86945aea22SJiri Olsa } 87945aea22SJiri Olsa 8863503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 89945aea22SJiri Olsa { 90515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 91945aea22SJiri Olsa 926484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 95945aea22SJiri Olsa return 0; 96945aea22SJiri Olsa } 97945aea22SJiri Olsa 9863503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 99945aea22SJiri Olsa { 100515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 101945aea22SJiri Olsa 1026484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 104945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1051fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 106945aea22SJiri Olsa return 0; 107945aea22SJiri Olsa } 108945aea22SJiri Olsa 10963503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 110945aea22SJiri Olsa { 111515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 112945aea22SJiri Olsa 1136484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 115945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1161fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 117ee4c7588SJiri Olsa /* 118ee4c7588SJiri Olsa * The period value gets configured within perf_evlist__config, 119ee4c7588SJiri Olsa * while this test executes only parse events method. 120ee4c7588SJiri Olsa */ 121945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1221fc632ceSJiri Olsa 0 == evsel->core.attr.sample_period); 123945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1241fc632ceSJiri Olsa 0 == evsel->core.attr.config1); 125945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 1261fc632ceSJiri Olsa 1 == evsel->core.attr.config2); 127945aea22SJiri Olsa return 0; 128945aea22SJiri Olsa } 129945aea22SJiri Olsa 13063503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 131945aea22SJiri Olsa { 132515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 133945aea22SJiri Olsa 1346484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 136945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1371fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 138945aea22SJiri Olsa return 0; 139945aea22SJiri Olsa } 140945aea22SJiri Olsa 14163503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 142945aea22SJiri Olsa { 143515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 144945aea22SJiri Olsa 1456484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 1471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config); 148945aea22SJiri Olsa return 0; 149945aea22SJiri Olsa } 150945aea22SJiri Olsa 15163503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 152945aea22SJiri Olsa { 153515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 154945aea22SJiri Olsa 1556484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 158945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1591fc632ceSJiri Olsa evsel->core.attr.bp_type); 160945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 1611fc632ceSJiri Olsa evsel->core.attr.bp_len); 162945aea22SJiri Olsa return 0; 163945aea22SJiri Olsa } 164945aea22SJiri Olsa 16563503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 166945aea22SJiri Olsa { 167515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 168945aea22SJiri Olsa 1696484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 172945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1731fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 1741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 175945aea22SJiri Olsa return 0; 176945aea22SJiri Olsa } 177945aea22SJiri Olsa 17863503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 179945aea22SJiri Olsa { 180515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 181945aea22SJiri Olsa 1826484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 183945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1841fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 186945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1871fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 188945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 1891fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 190945aea22SJiri Olsa return 0; 191945aea22SJiri Olsa } 192945aea22SJiri Olsa 19363503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 194945aea22SJiri Olsa { 195515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 196945aea22SJiri Olsa 1976484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 198945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1991fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 201945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2021fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 203945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2041fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 205945aea22SJiri Olsa return 0; 206945aea22SJiri Olsa } 207945aea22SJiri Olsa 20863503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 209945aea22SJiri Olsa { 210515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 211945aea22SJiri Olsa 2126484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 213945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2141fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 216945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2171fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 218945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2191fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 220945aea22SJiri Olsa return 0; 221945aea22SJiri Olsa } 222945aea22SJiri Olsa 22363503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 224945aea22SJiri Olsa { 225515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 226945aea22SJiri Olsa 2271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 231945aea22SJiri Olsa 232945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 233945aea22SJiri Olsa } 234945aea22SJiri Olsa 235945aea22SJiri Olsa static int 23663503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 237945aea22SJiri Olsa { 23832dcd021SJiri Olsa struct evsel *evsel; 239945aea22SJiri Olsa 2406484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 241945aea22SJiri Olsa 242e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 243945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 2441fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 245945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 2461fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 2471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 249945aea22SJiri Olsa } 250945aea22SJiri Olsa 251945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 252945aea22SJiri Olsa } 253945aea22SJiri Olsa 25463503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 255945aea22SJiri Olsa { 256515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 257945aea22SJiri Olsa 2581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 262945aea22SJiri Olsa 263945aea22SJiri Olsa return test__checkevent_raw(evlist); 264945aea22SJiri Olsa } 265945aea22SJiri Olsa 26663503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist) 267945aea22SJiri Olsa { 268515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 269945aea22SJiri Olsa 2701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 274945aea22SJiri Olsa 275945aea22SJiri Olsa return test__checkevent_numeric(evlist); 276945aea22SJiri Olsa } 277945aea22SJiri Olsa 27863503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 279945aea22SJiri Olsa { 280515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 281945aea22SJiri Olsa 2821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 286945aea22SJiri Olsa 287945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 288945aea22SJiri Olsa } 289945aea22SJiri Olsa 29063503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 291945aea22SJiri Olsa { 292515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 293945aea22SJiri Olsa 2941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 2951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 296945aea22SJiri Olsa 297945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 298945aea22SJiri Olsa } 299945aea22SJiri Olsa 30063503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 301945aea22SJiri Olsa { 302515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 303945aea22SJiri Olsa 3041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 3051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 306945aea22SJiri Olsa 307945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 308945aea22SJiri Olsa } 309945aea22SJiri Olsa 31063503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 311945aea22SJiri Olsa { 312515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 313945aea22SJiri Olsa 3141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 318945aea22SJiri Olsa 319945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 320945aea22SJiri Olsa } 321945aea22SJiri Olsa 32263503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 323945aea22SJiri Olsa { 324515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 325945aea22SJiri Olsa 3261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 330945aea22SJiri Olsa 331945aea22SJiri Olsa return test__checkevent_genhw(evlist); 332945aea22SJiri Olsa } 333945aea22SJiri Olsa 33463503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 335a1e12da4SJiri Olsa { 336515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 337a1e12da4SJiri Olsa 3381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 345a1e12da4SJiri Olsa 346a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 347a1e12da4SJiri Olsa } 348a1e12da4SJiri Olsa 34963503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 350a1e12da4SJiri Olsa { 351515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 352a1e12da4SJiri Olsa 3531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 3561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 360a1e12da4SJiri Olsa 361a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 362a1e12da4SJiri Olsa } 363a1e12da4SJiri Olsa 36463503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 365945aea22SJiri Olsa { 366515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 367945aea22SJiri Olsa 368945aea22SJiri Olsa 3691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 373945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3748ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 375945aea22SJiri Olsa 376945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 377945aea22SJiri Olsa } 378945aea22SJiri Olsa 37963503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 380945aea22SJiri Olsa { 381515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 382945aea22SJiri Olsa 3831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 387945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3888ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 389945aea22SJiri Olsa 390945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 391945aea22SJiri Olsa } 392945aea22SJiri Olsa 39363503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 394945aea22SJiri Olsa { 395515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 396945aea22SJiri Olsa 3971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 401945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4028ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 403945aea22SJiri Olsa 404945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 405945aea22SJiri Olsa } 406945aea22SJiri Olsa 40763503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 408945aea22SJiri Olsa { 409515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 410945aea22SJiri Olsa 4111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 415945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4168ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 417945aea22SJiri Olsa 418945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 419945aea22SJiri Olsa } 420945aea22SJiri Olsa 42163503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 422945aea22SJiri Olsa { 423515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 424945aea22SJiri Olsa 4251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 429945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4308ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 431945aea22SJiri Olsa 432945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 433945aea22SJiri Olsa } 434945aea22SJiri Olsa 43563503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 436945aea22SJiri Olsa { 437945aea22SJiri Olsa 438515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 439945aea22SJiri Olsa 4406484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->core.attr.config); 4431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 445ee4c7588SJiri Olsa /* 446ee4c7588SJiri Olsa * The period value gets configured within perf_evlist__config, 447ee4c7588SJiri Olsa * while this test executes only parse events method. 448ee4c7588SJiri Olsa */ 4491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 450945aea22SJiri Olsa 451945aea22SJiri Olsa return 0; 452945aea22SJiri Olsa } 453945aea22SJiri Olsa 45463503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 455945aea22SJiri Olsa { 456515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 457945aea22SJiri Olsa 4586484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 459945aea22SJiri Olsa 460945aea22SJiri Olsa /* r1 */ 4611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 4651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 469945aea22SJiri Olsa 47043f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 471e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 473945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 4741fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 480945aea22SJiri Olsa 481945aea22SJiri Olsa /* 1:1:hp */ 482e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 4841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 489945aea22SJiri Olsa 490945aea22SJiri Olsa return 0; 491945aea22SJiri Olsa } 492945aea22SJiri Olsa 49363503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 494945aea22SJiri Olsa { 495515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 496945aea22SJiri Olsa 497945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 4986484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 4991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 5018ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 502945aea22SJiri Olsa 503945aea22SJiri Olsa /* cpu/config=2/u" */ 504e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5056484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 508945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5098ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 510945aea22SJiri Olsa 511945aea22SJiri Olsa return 0; 512945aea22SJiri Olsa } 513945aea22SJiri Olsa 51463503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 51571ef150eSKan Liang { 516515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 51771ef150eSKan Liang 51871ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5196484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 52271ef150eSKan Liang /* 52371ef150eSKan Liang * The period, time and callgraph value gets configured 52471ef150eSKan Liang * within perf_evlist__config, 52571ef150eSKan Liang * while this test executes only parse events method. 52671ef150eSKan Liang */ 5271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 52827de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 53071ef150eSKan Liang 53171ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 532e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 53571ef150eSKan Liang /* 53671ef150eSKan Liang * The period, time and callgraph value gets configured 53771ef150eSKan Liang * within perf_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); 560945aea22SJiri Olsa 561945aea22SJiri Olsa return 0; 562945aea22SJiri Olsa } 563945aea22SJiri Olsa 564ffe59788SKan Liang 56563503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 566ffe59788SKan Liang { 567515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 568ffe59788SKan Liang 569ffe59788SKan Liang /* pmu-event:u */ 5706484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 571ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5721fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 573ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5741fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 578ffe59788SKan Liang 579ffe59788SKan Liang /* cpu/pmu-event/u*/ 580e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5816484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 583ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5841fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 585ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5861fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 590ffe59788SKan Liang 591ffe59788SKan Liang return 0; 592ffe59788SKan Liang } 593ffe59788SKan Liang 594945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 595945aea22SJiri Olsa { 5966cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 597945aea22SJiri Olsa 598945aea22SJiri Olsa /* config=10 */ 5996cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 600945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 601945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 602945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 603945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 604945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 605945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 606945aea22SJiri Olsa 607945aea22SJiri Olsa /* config1 */ 6086cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 609945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 610945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 611945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 612945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 613945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 614945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 615945aea22SJiri Olsa 616945aea22SJiri Olsa /* config2=3 */ 6176cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 618945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 619945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 620945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 621945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 622945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 623945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 624945aea22SJiri Olsa 625945aea22SJiri Olsa /* umask=1*/ 6266cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 627945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 628945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 629945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 630945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 631945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 632945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 633945aea22SJiri Olsa 634*4929e95aSJiri Olsa /* 635*4929e95aSJiri Olsa * read 636*4929e95aSJiri Olsa * 637*4929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 638*4929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 639*4929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 640*4929e95aSJiri Olsa */ 641*4929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 642*4929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 643*4929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 644*4929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 645*4929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 646*4929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 647*4929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read")); 648*4929e95aSJiri Olsa 649*4929e95aSJiri Olsa /* 650*4929e95aSJiri Olsa * r0xead 651*4929e95aSJiri Olsa * 652*4929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 653*4929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 654*4929e95aSJiri Olsa */ 655*4929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 656*4929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 657*4929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 658*4929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 659*4929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 660*4929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 0xead); 661*4929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 662945aea22SJiri Olsa return 0; 663945aea22SJiri Olsa } 664945aea22SJiri Olsa 66563503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 666945aea22SJiri Olsa { 66732dcd021SJiri Olsa struct evsel *evsel, *leader; 668945aea22SJiri Olsa 6696484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6708d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 671945aea22SJiri Olsa 672945aea22SJiri Olsa /* instructions:k */ 673515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 6741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 675945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6761fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 6771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 6811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 683c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 6845643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 6852bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 686a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 687945aea22SJiri Olsa 688945aea22SJiri Olsa /* cycles:upp */ 689e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 691945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6921fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 6931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 6941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 6951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 696945aea22SJiri Olsa /* use of precise requires exclude_guest */ 6971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 6981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 700945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7012bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 702a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 703945aea22SJiri Olsa 704945aea22SJiri Olsa return 0; 705945aea22SJiri Olsa } 706945aea22SJiri Olsa 70763503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 708945aea22SJiri Olsa { 70932dcd021SJiri Olsa struct evsel *evsel, *leader; 710945aea22SJiri Olsa 7116484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7128d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 713945aea22SJiri Olsa 714945aea22SJiri Olsa /* faults + :ku modifier */ 715515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 717945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7181fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 7191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 725c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7265643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7272bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 728a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 729945aea22SJiri Olsa 730945aea22SJiri Olsa /* cache-references + :u modifier */ 731e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 733945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7341fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config); 7351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 741945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7422bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 743a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 744945aea22SJiri Olsa 745945aea22SJiri Olsa /* cycles:k */ 746e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 748945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7491fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 756c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 757a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 758945aea22SJiri Olsa 759945aea22SJiri Olsa return 0; 760945aea22SJiri Olsa } 761945aea22SJiri Olsa 76263503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 763945aea22SJiri Olsa { 76432dcd021SJiri Olsa struct evsel *evsel, *leader; 765945aea22SJiri Olsa 7666484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7678d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 768945aea22SJiri Olsa 76943f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 770515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 772945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 7731fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 7741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 7751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 7781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 781c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 782945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 783945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 7845643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7852bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 786a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 787945aea22SJiri Olsa 788945aea22SJiri Olsa /* group1 cycles:kppp */ 789e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 791945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7921fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 796945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 800945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 801945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8022bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 803a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 804945aea22SJiri Olsa 805945aea22SJiri Olsa /* group2 cycles + G modifier */ 806e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 808945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8091fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 816c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 817945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 818945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8195643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8202bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 821a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 822945aea22SJiri Olsa 823945aea22SJiri Olsa /* group2 1:3 + G modifier */ 824e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config); 8271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 833945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8342bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 835a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 836945aea22SJiri Olsa 837945aea22SJiri Olsa /* instructions:u */ 838e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 840945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8411fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 848c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 849a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 850945aea22SJiri Olsa 851945aea22SJiri Olsa return 0; 852945aea22SJiri Olsa } 853945aea22SJiri Olsa 85463503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 855945aea22SJiri Olsa { 85632dcd021SJiri Olsa struct evsel *evsel, *leader; 857945aea22SJiri Olsa 8586484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8598d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 860945aea22SJiri Olsa 861945aea22SJiri Olsa /* cycles:u + p */ 862515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 864945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8651fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 869945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 873945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 874c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8755643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8762bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 877a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 878945aea22SJiri Olsa 879945aea22SJiri Olsa /* instructions:kp + p */ 880e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 882945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8831fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 887945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 891945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8922bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 893a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 894945aea22SJiri Olsa 895945aea22SJiri Olsa return 0; 896945aea22SJiri Olsa } 897945aea22SJiri Olsa 89863503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 899945aea22SJiri Olsa { 90032dcd021SJiri Olsa struct evsel *evsel, *leader; 901945aea22SJiri Olsa 9026484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9038d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 904945aea22SJiri Olsa 905945aea22SJiri Olsa /* cycles + G */ 906515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 908945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9091fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 916945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 917c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9185643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9192bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 920a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 921945aea22SJiri Olsa 922945aea22SJiri Olsa /* instructions + G */ 923e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 925945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9261fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 933945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9342bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 935a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 936945aea22SJiri Olsa 937945aea22SJiri Olsa /* cycles:G */ 938e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 9391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 940945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9411fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 948945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 949c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9505643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9512bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 952a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 953945aea22SJiri Olsa 954945aea22SJiri Olsa /* instructions:G */ 955e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 957945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9581fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 965945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9662bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 967945aea22SJiri Olsa 968945aea22SJiri Olsa /* cycles */ 969e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 971945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9721fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 979c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 980945aea22SJiri Olsa 981945aea22SJiri Olsa return 0; 982945aea22SJiri Olsa } 983945aea22SJiri Olsa 98463503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 9855a30a99fSJiri Olsa { 98632dcd021SJiri Olsa struct evsel *evsel, *leader; 9875a30a99fSJiri Olsa 9886484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 9895a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 9905a30a99fSJiri Olsa 9915a30a99fSJiri Olsa /* cycles + :H group modifier */ 992515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9945a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9951fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10025a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1003c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10045643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10052bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10065a30a99fSJiri Olsa 10075a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1008e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10105a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10111fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10185a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10192bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10205a30a99fSJiri Olsa 10215a30a99fSJiri Olsa return 0; 10225a30a99fSJiri Olsa } 10235a30a99fSJiri Olsa 102463503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10255a30a99fSJiri Olsa { 102632dcd021SJiri Olsa struct evsel *evsel, *leader; 10275a30a99fSJiri Olsa 10286484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10295a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10305a30a99fSJiri Olsa 10315a30a99fSJiri Olsa /* cycles + :G group modifier */ 1032515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10345a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10351fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10425a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1043c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10445643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10465a30a99fSJiri Olsa 10475a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1048e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10505a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10511fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10585a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10592bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10605a30a99fSJiri Olsa 10615a30a99fSJiri Olsa return 0; 10625a30a99fSJiri Olsa } 10635a30a99fSJiri Olsa 106463503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10655a30a99fSJiri Olsa { 106632dcd021SJiri Olsa struct evsel *evsel, *leader; 10675a30a99fSJiri Olsa 10686484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10695a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10705a30a99fSJiri Olsa 10715a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1072515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10745a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10751fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10825a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1083c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10845643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10852bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10865a30a99fSJiri Olsa 10875a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1088e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10905a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10911fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10985a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10992bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11005a30a99fSJiri Olsa 11015a30a99fSJiri Olsa return 0; 11025a30a99fSJiri Olsa } 11035a30a99fSJiri Olsa 110463503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11055a30a99fSJiri Olsa { 110632dcd021SJiri Olsa struct evsel *evsel, *leader; 11075a30a99fSJiri Olsa 11086484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11095a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 11105a30a99fSJiri Olsa 11115a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1112515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11145a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11151fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11225a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1123c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11245643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11252bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11265a30a99fSJiri Olsa 11275a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1128e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11305a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11311fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11385a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11392bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11405a30a99fSJiri Olsa 11415a30a99fSJiri Olsa return 0; 11425a30a99fSJiri Olsa } 11435a30a99fSJiri Olsa 114463503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1145a9f93f97SJiri Olsa { 114632dcd021SJiri Olsa struct evsel *evsel, *leader; 1147a9f93f97SJiri Olsa 11486484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1149a9f93f97SJiri Olsa 1150a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1151515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1153a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11541fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1161a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1162a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1163a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1164a9f93f97SJiri Olsa 1165a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1166e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1168a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11691fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1176a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1177a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1178a9f93f97SJiri Olsa 1179a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1180e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1182a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11831fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1190a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1191a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1192a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1193a9f93f97SJiri Olsa 1194a9f93f97SJiri Olsa return 0; 1195a9f93f97SJiri Olsa } 1196a9f93f97SJiri Olsa 119763503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1198a9f93f97SJiri Olsa { 119932dcd021SJiri Olsa struct evsel *evsel, *leader; 1200a9f93f97SJiri Olsa 12016484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1202a9f93f97SJiri Olsa 1203a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1204515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1206a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12071fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 12081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1214a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1215a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1216a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1217a9f93f97SJiri Olsa 1218a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1219e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1221a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12221fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1229a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1230a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1231a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1232a9f93f97SJiri Olsa 1233a9f93f97SJiri Olsa return 0; 1234a9f93f97SJiri Olsa } 1235a9f93f97SJiri Olsa 123663503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1237c9ee780fSMichael Ellerman { 1238515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1239c9ee780fSMichael Ellerman 12401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1245c9ee780fSMichael Ellerman 1246c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1247c9ee780fSMichael Ellerman } 1248c9ee780fSMichael Ellerman 124963503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1250c9ee780fSMichael Ellerman { 125132dcd021SJiri Olsa struct evsel *evsel, *leader; 1252c9ee780fSMichael Ellerman 12536484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1254c9ee780fSMichael Ellerman 1255c9ee780fSMichael Ellerman /* cycles - group leader */ 1256515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1258c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12591fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1260c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1261c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 12621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1263c9ee780fSMichael Ellerman 1264c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1265e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1267c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12681fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 12691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1270c9ee780fSMichael Ellerman 1271c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1272e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 1273c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12741fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1276c9ee780fSMichael Ellerman 1277c9ee780fSMichael Ellerman return 0; 1278c9ee780fSMichael Ellerman } 1279c9ee780fSMichael Ellerman 128063503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1281ec32398cSJacob Shin { 1282515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1283ec32398cSJacob Shin 12846484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 12851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 12861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1287ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 12881fc632ceSJiri Olsa evsel->core.attr.bp_type); 1289ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 12901fc632ceSJiri Olsa evsel->core.attr.bp_len); 1291ec32398cSJacob Shin 1292ec32398cSJacob Shin return 0; 1293ec32398cSJacob Shin } 1294ec32398cSJacob Shin 129563503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1296ec32398cSJacob Shin { 1297515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1298ec32398cSJacob Shin 12996484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1302ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13031fc632ceSJiri Olsa evsel->core.attr.bp_type); 1304ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13051fc632ceSJiri Olsa evsel->core.attr.bp_len); 1306ec32398cSJacob Shin 1307ec32398cSJacob Shin return 0; 1308ec32398cSJacob Shin } 1309ec32398cSJacob Shin 1310ec32398cSJacob Shin static int 131163503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1312ec32398cSJacob Shin { 1313515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1314ec32398cSJacob Shin 13151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1319ec32398cSJacob Shin 1320ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1321ec32398cSJacob Shin } 1322ec32398cSJacob Shin 132363503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1324ddd83c97SJiri Olsa { 1325515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1326ddd83c97SJiri Olsa 13276484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1329ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong config", 13301fc632ceSJiri Olsa PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config); 1331ddd83c97SJiri Olsa return 0; 1332ddd83c97SJiri Olsa } 1333ddd83c97SJiri Olsa 133463503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 133510bf358aSWang Nan { 1336515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 133710bf358aSWang Nan 133810bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0); 133910bf358aSWang Nan return 0; 134010bf358aSWang Nan } 134110bf358aSWang Nan 134263503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 134310bf358aSWang Nan { 1344515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 134510bf358aSWang Nan 134610bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0); 134710bf358aSWang Nan return 0; 134810bf358aSWang Nan } 134910bf358aSWang Nan 135063503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 135110bf358aSWang Nan { 1352515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 135310bf358aSWang Nan 135410bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0); 135510bf358aSWang Nan return 0; 135610bf358aSWang Nan } 135710bf358aSWang Nan 135863503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 135943d0b978SWang Nan { 1360515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 136143d0b978SWang Nan 136243d0b978SWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0); 136343d0b978SWang Nan return 0; 136443d0b978SWang Nan } 136510bf358aSWang Nan 136616ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 136716ddcfbfSJiri Olsa { 136816ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 136916ddcfbfSJiri Olsa } 137016ddcfbfSJiri Olsa 137163503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1372b3f58c8dSArnaldo Carvalho de Melo { 1373515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1374b3f58c8dSArnaldo Carvalho de Melo 1375b3f58c8dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0); 1376b3f58c8dSArnaldo Carvalho de Melo return 0; 1377b3f58c8dSArnaldo Carvalho de Melo } 1378b3f58c8dSArnaldo Carvalho de Melo 137963503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 138006dc5bf2SAlexey Budankov { 1381515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 138206dc5bf2SAlexey Budankov 138306dc5bf2SAlexey Budankov TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0); 138406dc5bf2SAlexey Budankov return 0; 138506dc5bf2SAlexey Budankov } 138606dc5bf2SAlexey Budankov 13873a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 13883a6c51e4SJiri Olsa { 13893a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 13903a6c51e4SJiri Olsa 13913a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13923a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 13933a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 13943a6c51e4SJiri Olsa return 0; 13953a6c51e4SJiri Olsa } 13963a6c51e4SJiri Olsa 139763503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1398714a92d8SJiri Olsa { 1399515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1400714a92d8SJiri Olsa 14011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 1404714a92d8SJiri Olsa return 0; 1405714a92d8SJiri Olsa } 1406714a92d8SJiri Olsa 140763503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1408714a92d8SJiri Olsa { 1409515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1410714a92d8SJiri Olsa 14111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 1414714a92d8SJiri Olsa return 0; 1415714a92d8SJiri Olsa } 1416714a92d8SJiri Olsa 141782ce75d9SJiri Olsa static int count_tracepoints(void) 141882ce75d9SJiri Olsa { 141982ce75d9SJiri Olsa struct dirent *events_ent; 142082ce75d9SJiri Olsa DIR *events_dir; 142182ce75d9SJiri Olsa int cnt = 0; 142282ce75d9SJiri Olsa 14237014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 142482ce75d9SJiri Olsa 142582ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 142682ce75d9SJiri Olsa 142782ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 142825a7d914SArnaldo Carvalho de Melo char *sys_path; 142982ce75d9SJiri Olsa struct dirent *sys_ent; 143082ce75d9SJiri Olsa DIR *sys_dir; 143182ce75d9SJiri Olsa 143282ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 143382ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 143482ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 143582ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 143682ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 143782ce75d9SJiri Olsa continue; 143882ce75d9SJiri Olsa 143925a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 144025a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 144182ce75d9SJiri Olsa 144282ce75d9SJiri Olsa sys_dir = opendir(sys_path); 144382ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 144482ce75d9SJiri Olsa 144582ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 144682ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 144782ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 144882ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 144982ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 145082ce75d9SJiri Olsa continue; 145182ce75d9SJiri Olsa 145282ce75d9SJiri Olsa cnt++; 145382ce75d9SJiri Olsa } 145482ce75d9SJiri Olsa 145582ce75d9SJiri Olsa closedir(sys_dir); 145625a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 145782ce75d9SJiri Olsa } 145882ce75d9SJiri Olsa 145982ce75d9SJiri Olsa closedir(events_dir); 146082ce75d9SJiri Olsa return cnt; 146182ce75d9SJiri Olsa } 146282ce75d9SJiri Olsa 146363503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 146482ce75d9SJiri Olsa { 146582ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 14666484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 146782ce75d9SJiri Olsa 146882ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 146982ce75d9SJiri Olsa } 147082ce75d9SJiri Olsa 147123b6339bSArnaldo Carvalho de Melo struct evlist_test { 1472945aea22SJiri Olsa const char *name; 1473945aea22SJiri Olsa __u32 type; 1474615b8f99SAlexander Yarygin const int id; 147516ddcfbfSJiri Olsa bool (*valid)(void); 147663503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1477945aea22SJiri Olsa }; 1478945aea22SJiri Olsa 147923b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = { 1480615b8f99SAlexander Yarygin { 148143f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1482945aea22SJiri Olsa .check = test__checkevent_tracepoint, 1483615b8f99SAlexander Yarygin .id = 0, 1484945aea22SJiri Olsa }, 1485615b8f99SAlexander Yarygin { 1486945aea22SJiri Olsa .name = "syscalls:*", 1487945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 1488615b8f99SAlexander Yarygin .id = 1, 1489945aea22SJiri Olsa }, 1490615b8f99SAlexander Yarygin { 1491945aea22SJiri Olsa .name = "r1a", 1492945aea22SJiri Olsa .check = test__checkevent_raw, 1493615b8f99SAlexander Yarygin .id = 2, 1494945aea22SJiri Olsa }, 1495615b8f99SAlexander Yarygin { 1496945aea22SJiri Olsa .name = "1:1", 1497945aea22SJiri Olsa .check = test__checkevent_numeric, 1498615b8f99SAlexander Yarygin .id = 3, 1499945aea22SJiri Olsa }, 1500615b8f99SAlexander Yarygin { 1501945aea22SJiri Olsa .name = "instructions", 1502945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 1503615b8f99SAlexander Yarygin .id = 4, 1504945aea22SJiri Olsa }, 1505615b8f99SAlexander Yarygin { 1506945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1507945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 1508615b8f99SAlexander Yarygin .id = 5, 1509945aea22SJiri Olsa }, 1510615b8f99SAlexander Yarygin { 1511945aea22SJiri Olsa .name = "faults", 1512945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 1513615b8f99SAlexander Yarygin .id = 6, 1514945aea22SJiri Olsa }, 1515615b8f99SAlexander Yarygin { 1516945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1517945aea22SJiri Olsa .check = test__checkevent_genhw, 1518615b8f99SAlexander Yarygin .id = 7, 1519945aea22SJiri Olsa }, 1520615b8f99SAlexander Yarygin { 1521945aea22SJiri Olsa .name = "mem:0", 1522945aea22SJiri Olsa .check = test__checkevent_breakpoint, 1523615b8f99SAlexander Yarygin .id = 8, 1524945aea22SJiri Olsa }, 1525615b8f99SAlexander Yarygin { 1526945aea22SJiri Olsa .name = "mem:0:x", 1527945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 1528615b8f99SAlexander Yarygin .id = 9, 1529945aea22SJiri Olsa }, 1530615b8f99SAlexander Yarygin { 1531945aea22SJiri Olsa .name = "mem:0:r", 1532945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 1533615b8f99SAlexander Yarygin .id = 10, 1534945aea22SJiri Olsa }, 1535615b8f99SAlexander Yarygin { 1536945aea22SJiri Olsa .name = "mem:0:w", 1537945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 1538615b8f99SAlexander Yarygin .id = 11, 1539945aea22SJiri Olsa }, 1540615b8f99SAlexander Yarygin { 154143f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1542945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 1543615b8f99SAlexander Yarygin .id = 12, 1544945aea22SJiri Olsa }, 1545615b8f99SAlexander Yarygin { 1546945aea22SJiri Olsa .name = "syscalls:*:u", 1547945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 1548615b8f99SAlexander Yarygin .id = 13, 1549945aea22SJiri Olsa }, 1550615b8f99SAlexander Yarygin { 1551945aea22SJiri Olsa .name = "r1a:kp", 1552945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 1553615b8f99SAlexander Yarygin .id = 14, 1554945aea22SJiri Olsa }, 1555615b8f99SAlexander Yarygin { 1556945aea22SJiri Olsa .name = "1:1:hp", 1557945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 1558615b8f99SAlexander Yarygin .id = 15, 1559945aea22SJiri Olsa }, 1560615b8f99SAlexander Yarygin { 1561945aea22SJiri Olsa .name = "instructions:h", 1562945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 1563615b8f99SAlexander Yarygin .id = 16, 1564945aea22SJiri Olsa }, 1565615b8f99SAlexander Yarygin { 1566945aea22SJiri Olsa .name = "faults:u", 1567945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 1568615b8f99SAlexander Yarygin .id = 17, 1569945aea22SJiri Olsa }, 1570615b8f99SAlexander Yarygin { 1571945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1572945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 1573615b8f99SAlexander Yarygin .id = 18, 1574945aea22SJiri Olsa }, 1575615b8f99SAlexander Yarygin { 1576945aea22SJiri Olsa .name = "mem:0:u", 1577945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 1578615b8f99SAlexander Yarygin .id = 19, 1579945aea22SJiri Olsa }, 1580615b8f99SAlexander Yarygin { 1581945aea22SJiri Olsa .name = "mem:0:x:k", 1582945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 1583615b8f99SAlexander Yarygin .id = 20, 1584945aea22SJiri Olsa }, 1585615b8f99SAlexander Yarygin { 1586945aea22SJiri Olsa .name = "mem:0:r:hp", 1587945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 1588615b8f99SAlexander Yarygin .id = 21, 1589945aea22SJiri Olsa }, 1590615b8f99SAlexander Yarygin { 1591945aea22SJiri Olsa .name = "mem:0:w:up", 1592945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 1593615b8f99SAlexander Yarygin .id = 22, 1594945aea22SJiri Olsa }, 1595615b8f99SAlexander Yarygin { 159643f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1597945aea22SJiri Olsa .check = test__checkevent_list, 1598615b8f99SAlexander Yarygin .id = 23, 1599945aea22SJiri Olsa }, 1600615b8f99SAlexander Yarygin { 1601945aea22SJiri Olsa .name = "instructions:G", 1602945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 1603615b8f99SAlexander Yarygin .id = 24, 1604945aea22SJiri Olsa }, 1605615b8f99SAlexander Yarygin { 1606945aea22SJiri Olsa .name = "instructions:H", 1607945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 1608615b8f99SAlexander Yarygin .id = 25, 1609945aea22SJiri Olsa }, 1610615b8f99SAlexander Yarygin { 1611945aea22SJiri Olsa .name = "mem:0:rw", 1612945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 1613615b8f99SAlexander Yarygin .id = 26, 1614945aea22SJiri Olsa }, 1615615b8f99SAlexander Yarygin { 1616945aea22SJiri Olsa .name = "mem:0:rw:kp", 1617945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 1618615b8f99SAlexander Yarygin .id = 27, 1619945aea22SJiri Olsa }, 1620615b8f99SAlexander Yarygin { 1621945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1622945aea22SJiri Olsa .check = test__group1, 1623615b8f99SAlexander Yarygin .id = 28, 1624945aea22SJiri Olsa }, 1625615b8f99SAlexander Yarygin { 1626945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1627945aea22SJiri Olsa .check = test__group2, 1628615b8f99SAlexander Yarygin .id = 29, 1629945aea22SJiri Olsa }, 1630615b8f99SAlexander Yarygin { 163143f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1632945aea22SJiri Olsa .check = test__group3, 1633615b8f99SAlexander Yarygin .id = 30, 1634945aea22SJiri Olsa }, 1635615b8f99SAlexander Yarygin { 1636945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1637945aea22SJiri Olsa .check = test__group4, 1638615b8f99SAlexander Yarygin .id = 31, 1639945aea22SJiri Olsa }, 1640615b8f99SAlexander Yarygin { 1641945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1642945aea22SJiri Olsa .check = test__group5, 1643615b8f99SAlexander Yarygin .id = 32, 1644945aea22SJiri Olsa }, 1645615b8f99SAlexander Yarygin { 164682ce75d9SJiri Olsa .name = "*:*", 164782ce75d9SJiri Olsa .check = test__all_tracepoints, 1648615b8f99SAlexander Yarygin .id = 33, 164982ce75d9SJiri Olsa }, 1650615b8f99SAlexander Yarygin { 16515a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 16525a30a99fSJiri Olsa .check = test__group_gh1, 1653615b8f99SAlexander Yarygin .id = 34, 16545a30a99fSJiri Olsa }, 1655615b8f99SAlexander Yarygin { 16565a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 16575a30a99fSJiri Olsa .check = test__group_gh2, 1658615b8f99SAlexander Yarygin .id = 35, 16595a30a99fSJiri Olsa }, 1660615b8f99SAlexander Yarygin { 16615a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 16625a30a99fSJiri Olsa .check = test__group_gh3, 1663615b8f99SAlexander Yarygin .id = 36, 16645a30a99fSJiri Olsa }, 1665615b8f99SAlexander Yarygin { 16665a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 16675a30a99fSJiri Olsa .check = test__group_gh4, 1668615b8f99SAlexander Yarygin .id = 37, 16695a30a99fSJiri Olsa }, 1670615b8f99SAlexander Yarygin { 1671a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1672a9f93f97SJiri Olsa .check = test__leader_sample1, 1673615b8f99SAlexander Yarygin .id = 38, 1674a9f93f97SJiri Olsa }, 1675615b8f99SAlexander Yarygin { 1676a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1677a9f93f97SJiri Olsa .check = test__leader_sample2, 1678615b8f99SAlexander Yarygin .id = 39, 1679a9f93f97SJiri Olsa }, 1680615b8f99SAlexander Yarygin { 1681c9ee780fSMichael Ellerman .name = "instructions:uDp", 1682c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 1683615b8f99SAlexander Yarygin .id = 40, 1684c9ee780fSMichael Ellerman }, 1685615b8f99SAlexander Yarygin { 1686c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1687c9ee780fSMichael Ellerman .check = test__pinned_group, 1688615b8f99SAlexander Yarygin .id = 41, 1689c9ee780fSMichael Ellerman }, 1690ec32398cSJacob Shin { 1691ec32398cSJacob Shin .name = "mem:0/1", 1692ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 1693ec32398cSJacob Shin .id = 42, 1694ec32398cSJacob Shin }, 1695ec32398cSJacob Shin { 1696ec32398cSJacob Shin .name = "mem:0/2:w", 1697ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 1698ec32398cSJacob Shin .id = 43, 1699ec32398cSJacob Shin }, 1700ec32398cSJacob Shin { 1701ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1702ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 1703ec32398cSJacob Shin .id = 44 1704ec32398cSJacob Shin }, 1705c0bc8c6dSAlexander Yarygin #if defined(__s390x__) 1706c0bc8c6dSAlexander Yarygin { 1707c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1708c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 170953fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 1710c0bc8c6dSAlexander Yarygin .id = 100, 1711c0bc8c6dSAlexander Yarygin }, 1712c0bc8c6dSAlexander Yarygin #endif 1713a1e12da4SJiri Olsa { 1714a1e12da4SJiri Olsa .name = "instructions:I", 1715a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 1716a1e12da4SJiri Olsa .id = 45, 1717a1e12da4SJiri Olsa }, 1718a1e12da4SJiri Olsa { 1719a1e12da4SJiri Olsa .name = "instructions:kIG", 1720a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 1721a1e12da4SJiri Olsa .id = 46, 1722a1e12da4SJiri Olsa }, 1723ddd83c97SJiri Olsa { 1724ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1725ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 1726ddd83c97SJiri Olsa .id = 47, 1727ddd83c97SJiri Olsa }, 172810bf358aSWang Nan { 172910bf358aSWang Nan .name = "instructions/name=insn/", 173010bf358aSWang Nan .check = test__checkevent_config_symbol, 173110bf358aSWang Nan .id = 48, 173210bf358aSWang Nan }, 173310bf358aSWang Nan { 173410bf358aSWang Nan .name = "r1234/name=rawpmu/", 173510bf358aSWang Nan .check = test__checkevent_config_raw, 173610bf358aSWang Nan .id = 49, 173710bf358aSWang Nan }, 173810bf358aSWang Nan { 173910bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 174010bf358aSWang Nan .check = test__checkevent_config_num, 174110bf358aSWang Nan .id = 50, 174210bf358aSWang Nan }, 174343d0b978SWang Nan { 174443d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 174543d0b978SWang Nan .check = test__checkevent_config_cache, 174643d0b978SWang Nan .id = 51, 174743d0b978SWang Nan }, 1748b3f58c8dSArnaldo Carvalho de Melo { 1749b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 175016ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1751b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 1752b3f58c8dSArnaldo Carvalho de Melo .id = 52, 1753b3f58c8dSArnaldo Carvalho de Melo }, 175406dc5bf2SAlexey Budankov { 175506dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 175606dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 175706dc5bf2SAlexey Budankov .id = 53 1758714a92d8SJiri Olsa }, 1759714a92d8SJiri Olsa { 1760714a92d8SJiri Olsa .name = "cycles//u", 1761714a92d8SJiri Olsa .check = test__sym_event_slash, 1762714a92d8SJiri Olsa .id = 54, 1763714a92d8SJiri Olsa }, 1764714a92d8SJiri Olsa { 1765714a92d8SJiri Olsa .name = "cycles:k", 1766714a92d8SJiri Olsa .check = test__sym_event_dc, 1767714a92d8SJiri Olsa .id = 55, 176806dc5bf2SAlexey Budankov } 1769945aea22SJiri Olsa }; 1770945aea22SJiri Olsa 177123b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = { 1772615b8f99SAlexander Yarygin { 1773945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1774945aea22SJiri Olsa .check = test__checkevent_pmu, 1775615b8f99SAlexander Yarygin .id = 0, 1776945aea22SJiri Olsa }, 1777615b8f99SAlexander Yarygin { 1778945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1779945aea22SJiri Olsa .check = test__checkevent_pmu_name, 1780615b8f99SAlexander Yarygin .id = 1, 1781945aea22SJiri Olsa }, 178271ef150eSKan Liang { 178371ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 178471ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 178571ef150eSKan Liang .id = 2, 178671ef150eSKan Liang }, 178706dc5bf2SAlexey Budankov { 1788a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 178906dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 179006dc5bf2SAlexey Budankov .id = 3, 17913a6c51e4SJiri Olsa }, 17923a6c51e4SJiri Olsa { 17933a6c51e4SJiri Olsa .name = "software/r1a/", 17943a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 17953a6c51e4SJiri Olsa .id = 4, 17963a6c51e4SJiri Olsa }, 1797c33cdf54SJiri Olsa { 1798c33cdf54SJiri Olsa .name = "software/r0x1a/", 1799c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 1800c33cdf54SJiri Olsa .id = 4, 1801c33cdf54SJiri Olsa }, 1802945aea22SJiri Olsa }; 1803945aea22SJiri Olsa 180423b6339bSArnaldo Carvalho de Melo struct terms_test { 1805945aea22SJiri Olsa const char *str; 1806945aea22SJiri Olsa __u32 type; 1807945aea22SJiri Olsa int (*check)(struct list_head *terms); 1808945aea22SJiri Olsa }; 1809945aea22SJiri Olsa 181023b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = { 1811945aea22SJiri Olsa [0] = { 1812*4929e95aSJiri Olsa .str = "config=10,config1,config2=3,umask=1,read,r0xead", 1813945aea22SJiri Olsa .check = test__checkterms_simple, 1814945aea22SJiri Olsa }, 1815945aea22SJiri Olsa }; 1816945aea22SJiri Olsa 181723b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e) 1818945aea22SJiri Olsa { 1819a910e466SIan Rogers struct parse_events_error err; 182063503dbaSJiri Olsa struct evlist *evlist; 1821945aea22SJiri Olsa int ret; 1822945aea22SJiri Olsa 1823a910e466SIan Rogers bzero(&err, sizeof(err)); 182416ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 182516ddcfbfSJiri Olsa pr_debug("... SKIP"); 182616ddcfbfSJiri Olsa return 0; 182716ddcfbfSJiri Olsa } 182816ddcfbfSJiri Olsa 18290f98b11cSJiri Olsa evlist = evlist__new(); 1830945aea22SJiri Olsa if (evlist == NULL) 1831945aea22SJiri Olsa return -ENOMEM; 1832945aea22SJiri Olsa 1833933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 1834945aea22SJiri Olsa if (ret) { 1835933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 1836933ccf20SJiri Olsa e->name, ret, err.str); 1837933ccf20SJiri Olsa parse_events_print_error(&err, e->name); 18382d4352c0SArnaldo Carvalho de Melo } else { 18392d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 1840945aea22SJiri Olsa } 1841945aea22SJiri Olsa 1842c12995a5SJiri Olsa evlist__delete(evlist); 1843945aea22SJiri Olsa 1844945aea22SJiri Olsa return ret; 1845945aea22SJiri Olsa } 1846945aea22SJiri Olsa 184723b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt) 1848945aea22SJiri Olsa { 1849945aea22SJiri Olsa int ret1, ret2 = 0; 1850945aea22SJiri Olsa unsigned i; 1851945aea22SJiri Olsa 1852945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 185323b6339bSArnaldo Carvalho de Melo struct evlist_test *e = &events[i]; 1854945aea22SJiri Olsa 185516ddcfbfSJiri Olsa pr_debug("running test %d '%s'", e->id, e->name); 1856945aea22SJiri Olsa ret1 = test_event(e); 1857945aea22SJiri Olsa if (ret1) 1858945aea22SJiri Olsa ret2 = ret1; 185916ddcfbfSJiri Olsa pr_debug("\n"); 1860945aea22SJiri Olsa } 1861945aea22SJiri Olsa 1862945aea22SJiri Olsa return ret2; 1863945aea22SJiri Olsa } 1864945aea22SJiri Olsa 186523b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t) 1866945aea22SJiri Olsa { 1867c549aca5SDavid Ahern struct list_head terms; 1868945aea22SJiri Olsa int ret; 1869945aea22SJiri Olsa 1870c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 1871945aea22SJiri Olsa 1872*4929e95aSJiri Olsa /* 1873*4929e95aSJiri Olsa * The perf_pmu__test_parse_init prepares perf_pmu_events_list 1874*4929e95aSJiri Olsa * which gets freed in parse_events_terms. 1875*4929e95aSJiri Olsa */ 1876*4929e95aSJiri Olsa if (perf_pmu__test_parse_init()) 1877*4929e95aSJiri Olsa return -1; 1878*4929e95aSJiri Olsa 1879c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 1880945aea22SJiri Olsa if (ret) { 1881945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 1882945aea22SJiri Olsa t->str , ret); 1883945aea22SJiri Olsa return ret; 1884945aea22SJiri Olsa } 1885945aea22SJiri Olsa 1886c549aca5SDavid Ahern ret = t->check(&terms); 1887682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 1888945aea22SJiri Olsa 1889945aea22SJiri Olsa return ret; 1890945aea22SJiri Olsa } 1891945aea22SJiri Olsa 189223b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt) 1893945aea22SJiri Olsa { 1894945aea22SJiri Olsa int ret = 0; 1895945aea22SJiri Olsa unsigned i; 1896945aea22SJiri Olsa 1897945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 189823b6339bSArnaldo Carvalho de Melo struct terms_test *t = &terms[i]; 1899945aea22SJiri Olsa 1900945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 1901945aea22SJiri Olsa ret = test_term(t); 1902945aea22SJiri Olsa if (ret) 1903945aea22SJiri Olsa break; 1904945aea22SJiri Olsa } 1905945aea22SJiri Olsa 1906945aea22SJiri Olsa return ret; 1907945aea22SJiri Olsa } 1908945aea22SJiri Olsa 1909945aea22SJiri Olsa static int test_pmu(void) 1910945aea22SJiri Olsa { 1911945aea22SJiri Olsa struct stat st; 1912945aea22SJiri Olsa char path[PATH_MAX]; 1913945aea22SJiri Olsa int ret; 1914945aea22SJiri Olsa 1915945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1916cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 1917945aea22SJiri Olsa 1918945aea22SJiri Olsa ret = stat(path, &st); 1919945aea22SJiri Olsa if (ret) 1920945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 1921945aea22SJiri Olsa return !ret; 1922945aea22SJiri Olsa } 1923945aea22SJiri Olsa 1924945aea22SJiri Olsa static int test_pmu_events(void) 1925945aea22SJiri Olsa { 1926945aea22SJiri Olsa struct stat st; 1927945aea22SJiri Olsa char path[PATH_MAX]; 1928945aea22SJiri Olsa struct dirent *ent; 1929945aea22SJiri Olsa DIR *dir; 1930945aea22SJiri Olsa int ret; 1931945aea22SJiri Olsa 1932945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1933cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 1934945aea22SJiri Olsa 1935945aea22SJiri Olsa ret = stat(path, &st); 1936945aea22SJiri Olsa if (ret) { 1937a895d57dSMasanari Iida pr_debug("omitting PMU cpu events tests\n"); 1938945aea22SJiri Olsa return 0; 1939945aea22SJiri Olsa } 1940945aea22SJiri Olsa 1941945aea22SJiri Olsa dir = opendir(path); 1942945aea22SJiri Olsa if (!dir) { 1943945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 1944945aea22SJiri Olsa return -1; 1945945aea22SJiri Olsa } 1946945aea22SJiri Olsa 1947945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 194816ddcfbfSJiri Olsa struct evlist_test e = { .id = 0, }; 19492e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 1950945aea22SJiri Olsa 195117a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 195217a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 1953945aea22SJiri Olsa continue; 1954945aea22SJiri Olsa 19552e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name); 1956945aea22SJiri Olsa 1957945aea22SJiri Olsa e.name = name; 1958945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 1959945aea22SJiri Olsa 1960945aea22SJiri Olsa ret = test_event(&e); 1961ffe59788SKan Liang if (ret) 1962ffe59788SKan Liang break; 19632e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 1964ffe59788SKan Liang e.name = name; 1965ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 1966ffe59788SKan Liang ret = test_event(&e); 1967945aea22SJiri Olsa } 1968945aea22SJiri Olsa 1969945aea22SJiri Olsa closedir(dir); 1970945aea22SJiri Olsa return ret; 1971945aea22SJiri Olsa } 1972945aea22SJiri Olsa 197381f17c90SArnaldo Carvalho de Melo int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused) 1974945aea22SJiri Olsa { 1975945aea22SJiri Olsa int ret1, ret2 = 0; 1976945aea22SJiri Olsa 1977945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 1978945aea22SJiri Olsa do { \ 1979945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 1980945aea22SJiri Olsa if (!ret2) \ 1981945aea22SJiri Olsa ret2 = ret1; \ 1982945aea22SJiri Olsa } while (0) 1983945aea22SJiri Olsa 1984945aea22SJiri Olsa TEST_EVENTS(test__events); 1985945aea22SJiri Olsa 1986945aea22SJiri Olsa if (test_pmu()) 1987945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 1988945aea22SJiri Olsa 1989945aea22SJiri Olsa if (test_pmu()) { 1990945aea22SJiri Olsa int ret = test_pmu_events(); 1991945aea22SJiri Olsa if (ret) 1992945aea22SJiri Olsa return ret; 1993945aea22SJiri Olsa } 1994945aea22SJiri Olsa 1995945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 1996945aea22SJiri Olsa if (!ret2) 1997945aea22SJiri Olsa ret2 = ret1; 1998945aea22SJiri Olsa 1999945aea22SJiri Olsa return ret2; 2000945aea22SJiri Olsa } 2001