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); 560*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 561945aea22SJiri Olsa 562945aea22SJiri Olsa return 0; 563945aea22SJiri Olsa } 564945aea22SJiri Olsa 565ffe59788SKan Liang 56663503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 567ffe59788SKan Liang { 568515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 569ffe59788SKan Liang 570ffe59788SKan Liang /* pmu-event:u */ 5716484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 572ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5731fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 574ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5751fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 579*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 580ffe59788SKan Liang 581ffe59788SKan Liang /* cpu/pmu-event/u*/ 582e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5836484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 585ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5861fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 587ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5881fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 592*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 593ffe59788SKan Liang 594ffe59788SKan Liang return 0; 595ffe59788SKan Liang } 596ffe59788SKan Liang 597945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 598945aea22SJiri Olsa { 5996cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 600945aea22SJiri Olsa 601945aea22SJiri Olsa /* config=10 */ 6026cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 603945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 604945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 605945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 606945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 607945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 608945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 609945aea22SJiri Olsa 610945aea22SJiri Olsa /* config1 */ 6116cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 612945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 613945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 614945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 615945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 616945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 617945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 618945aea22SJiri Olsa 619945aea22SJiri Olsa /* config2=3 */ 6206cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 621945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 622945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 623945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 624945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 625945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 626945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 627945aea22SJiri Olsa 628945aea22SJiri Olsa /* umask=1*/ 6296cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 630945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 631945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 632945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 633945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 634945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 635945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 636945aea22SJiri Olsa 6374929e95aSJiri Olsa /* 6384929e95aSJiri Olsa * read 6394929e95aSJiri Olsa * 6404929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 6414929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 6424929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 6434929e95aSJiri Olsa */ 6444929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6454929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6464929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 6474929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6484929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6494929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6504929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read")); 6514929e95aSJiri Olsa 6524929e95aSJiri Olsa /* 6534929e95aSJiri Olsa * r0xead 6544929e95aSJiri Olsa * 6554929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 6564929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 6574929e95aSJiri Olsa */ 6584929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6594929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6604929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 6614929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6624929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6634929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 0xead); 6644929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !term->config); 665945aea22SJiri Olsa return 0; 666945aea22SJiri Olsa } 667945aea22SJiri Olsa 66863503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 669945aea22SJiri Olsa { 67032dcd021SJiri Olsa struct evsel *evsel, *leader; 671945aea22SJiri Olsa 6726484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6738d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 674945aea22SJiri Olsa 675945aea22SJiri Olsa /* instructions:k */ 676515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 6771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 678945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6791fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 6801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 6841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 6851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 686c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 6875643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 6882bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 689a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 690945aea22SJiri Olsa 691945aea22SJiri Olsa /* cycles:upp */ 692e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 694945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 6951fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 6961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 6971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 6981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 699945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 703945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7042bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 705a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 706945aea22SJiri Olsa 707945aea22SJiri Olsa return 0; 708945aea22SJiri Olsa } 709945aea22SJiri Olsa 71063503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 711945aea22SJiri Olsa { 71232dcd021SJiri Olsa struct evsel *evsel, *leader; 713945aea22SJiri Olsa 7146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7158d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 716945aea22SJiri Olsa 717945aea22SJiri Olsa /* faults + :ku modifier */ 718515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 720945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7211fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 7221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 725943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 728c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7295643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7302bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 731a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 732945aea22SJiri Olsa 733945aea22SJiri Olsa /* cache-references + :u modifier */ 734e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 736945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7371fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config); 7381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 744945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 7452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 746a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 747945aea22SJiri Olsa 748945aea22SJiri Olsa /* cycles:k */ 749e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 751945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7521fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 759c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 760a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 761945aea22SJiri Olsa 762945aea22SJiri Olsa return 0; 763945aea22SJiri Olsa } 764945aea22SJiri Olsa 76563503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 766945aea22SJiri Olsa { 76732dcd021SJiri Olsa struct evsel *evsel, *leader; 768945aea22SJiri Olsa 7696484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7708d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 771945aea22SJiri Olsa 77243f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 773515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 775945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 7761fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 7771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 7781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 7811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 784c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 785945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 786945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 7875643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7882bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 789a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 790945aea22SJiri Olsa 791945aea22SJiri Olsa /* group1 cycles:kppp */ 792e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 794945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7951fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 799945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 803945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 804945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8052bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 806a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 807945aea22SJiri Olsa 808945aea22SJiri Olsa /* group2 cycles + G modifier */ 809e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 811945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8121fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 819c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 820945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 821945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8225643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8232bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 824a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 825945aea22SJiri Olsa 826945aea22SJiri Olsa /* group2 1:3 + G modifier */ 827e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config); 8301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 836945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8372bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 838a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 839945aea22SJiri Olsa 840945aea22SJiri Olsa /* instructions:u */ 841e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 843945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8441fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 848943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 851c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 852a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 853945aea22SJiri Olsa 854945aea22SJiri Olsa return 0; 855945aea22SJiri Olsa } 856945aea22SJiri Olsa 85763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 858945aea22SJiri Olsa { 85932dcd021SJiri Olsa struct evsel *evsel, *leader; 860945aea22SJiri Olsa 8616484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8628d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 863945aea22SJiri Olsa 864945aea22SJiri Olsa /* cycles:u + p */ 865515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 867945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8681fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 872945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 876945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 877c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8785643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8792bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 880a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 881945aea22SJiri Olsa 882945aea22SJiri Olsa /* instructions:kp + p */ 883e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 885945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8861fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 890945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 894945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 8952bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 896a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 897945aea22SJiri Olsa 898945aea22SJiri Olsa return 0; 899945aea22SJiri Olsa } 900945aea22SJiri Olsa 90163503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 902945aea22SJiri Olsa { 90332dcd021SJiri Olsa struct evsel *evsel, *leader; 904945aea22SJiri Olsa 9056484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9068d7d8474SNamhyung Kim TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); 907945aea22SJiri Olsa 908945aea22SJiri Olsa /* cycles + G */ 909515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 911945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9121fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 919945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 920c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9215643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9222bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 923a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 924945aea22SJiri Olsa 925945aea22SJiri Olsa /* instructions + G */ 926e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 928945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9291fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 936945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9372bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 938a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 939945aea22SJiri Olsa 940945aea22SJiri Olsa /* cycles:G */ 941e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 9421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 943945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9441fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 951945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 952c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9535643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9542bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 955a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 956945aea22SJiri Olsa 957945aea22SJiri Olsa /* instructions:G */ 958e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 960945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9611fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 968945aea22SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 9692bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 970945aea22SJiri Olsa 971945aea22SJiri Olsa /* cycles */ 972e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 974945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9751fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 982c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 983945aea22SJiri Olsa 984945aea22SJiri Olsa return 0; 985945aea22SJiri Olsa } 986945aea22SJiri Olsa 98763503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 9885a30a99fSJiri Olsa { 98932dcd021SJiri Olsa struct evsel *evsel, *leader; 9905a30a99fSJiri Olsa 9916484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 9925a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 9935a30a99fSJiri Olsa 9945a30a99fSJiri Olsa /* cycles + :H group modifier */ 995515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9975a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 9981fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10055a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1006c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10075643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10082bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10095a30a99fSJiri Olsa 10105a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1011e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10135a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10141fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10215a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10222bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10235a30a99fSJiri Olsa 10245a30a99fSJiri Olsa return 0; 10255a30a99fSJiri Olsa } 10265a30a99fSJiri Olsa 102763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10285a30a99fSJiri Olsa { 102932dcd021SJiri Olsa struct evsel *evsel, *leader; 10305a30a99fSJiri Olsa 10316484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10325a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10335a30a99fSJiri Olsa 10345a30a99fSJiri Olsa /* cycles + :G group modifier */ 1035515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10375a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10381fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10455a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1046c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10475643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10482bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10495a30a99fSJiri Olsa 10505a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1051e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10535a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10541fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10615a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 10622bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10635a30a99fSJiri Olsa 10645a30a99fSJiri Olsa return 0; 10655a30a99fSJiri Olsa } 10665a30a99fSJiri Olsa 106763503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10685a30a99fSJiri Olsa { 106932dcd021SJiri Olsa struct evsel *evsel, *leader; 10705a30a99fSJiri Olsa 10716484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10725a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 10735a30a99fSJiri Olsa 10745a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1075515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10775a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10781fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10855a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1086c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10875643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10882bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10895a30a99fSJiri Olsa 10905a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1091e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10935a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10941fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 10981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11015a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11022bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11035a30a99fSJiri Olsa 11045a30a99fSJiri Olsa return 0; 11055a30a99fSJiri Olsa } 11065a30a99fSJiri Olsa 110763503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11085a30a99fSJiri Olsa { 110932dcd021SJiri Olsa struct evsel *evsel, *leader; 11105a30a99fSJiri Olsa 11116484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11125a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); 11135a30a99fSJiri Olsa 11145a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1115515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11175a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11181fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11255a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1126c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11275643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11282bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11295a30a99fSJiri Olsa 11305a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1131e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11335a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11341fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11415a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 11422bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11435a30a99fSJiri Olsa 11445a30a99fSJiri Olsa return 0; 11455a30a99fSJiri Olsa } 11465a30a99fSJiri Olsa 114763503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1148a9f93f97SJiri Olsa { 114932dcd021SJiri Olsa struct evsel *evsel, *leader; 1150a9f93f97SJiri Olsa 11516484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1152a9f93f97SJiri Olsa 1153a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1154515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1156a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11571fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1164a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1165a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1166a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1167a9f93f97SJiri Olsa 1168a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1169e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1171a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11721fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1179a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1180a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1181a9f93f97SJiri Olsa 1182a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1183e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1185a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11861fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 11871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1193a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1194a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1195a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1196a9f93f97SJiri Olsa 1197a9f93f97SJiri Olsa return 0; 1198a9f93f97SJiri Olsa } 1199a9f93f97SJiri Olsa 120063503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1201a9f93f97SJiri Olsa { 120232dcd021SJiri Olsa struct evsel *evsel, *leader; 1203a9f93f97SJiri Olsa 12046484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1205a9f93f97SJiri Olsa 1206a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1207515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1209a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12101fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 12111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1217a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1218a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1219a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1220a9f93f97SJiri Olsa 1221a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1222e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1224a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12251fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1232a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1233a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1234a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1235a9f93f97SJiri Olsa 1236a9f93f97SJiri Olsa return 0; 1237a9f93f97SJiri Olsa } 1238a9f93f97SJiri Olsa 123963503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1240c9ee780fSMichael Ellerman { 1241515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1242c9ee780fSMichael Ellerman 12431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1248c9ee780fSMichael Ellerman 1249c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1250c9ee780fSMichael Ellerman } 1251c9ee780fSMichael Ellerman 125263503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1253c9ee780fSMichael Ellerman { 125432dcd021SJiri Olsa struct evsel *evsel, *leader; 1255c9ee780fSMichael Ellerman 12566484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1257c9ee780fSMichael Ellerman 1258c9ee780fSMichael Ellerman /* cycles - group leader */ 1259515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1261c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12621fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1263c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1264c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 12651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1266c9ee780fSMichael Ellerman 1267c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1268e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1270c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12711fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 12721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1273c9ee780fSMichael Ellerman 1274c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1275e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 1276c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12771fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1279c9ee780fSMichael Ellerman 1280c9ee780fSMichael Ellerman return 0; 1281c9ee780fSMichael Ellerman } 1282c9ee780fSMichael Ellerman 1283*0997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 1284*0997a266SAndi Kleen { 1285*0997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 1286*0997a266SAndi Kleen 1287*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 1288*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 1289*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1290*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 1291*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 1292*0997a266SAndi Kleen 1293*0997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 1294*0997a266SAndi Kleen } 1295*0997a266SAndi Kleen 1296*0997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 1297*0997a266SAndi Kleen { 1298*0997a266SAndi Kleen struct evsel *evsel, *leader; 1299*0997a266SAndi Kleen 1300*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1301*0997a266SAndi Kleen 1302*0997a266SAndi Kleen /* cycles - group leader */ 1303*0997a266SAndi Kleen evsel = leader = evlist__first(evlist); 1304*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1305*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 1306*0997a266SAndi Kleen PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1307*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1308*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); 1309*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 1310*0997a266SAndi Kleen 1311*0997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 1312*0997a266SAndi Kleen evsel = evsel__next(evsel); 1313*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1314*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 1315*0997a266SAndi Kleen PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 1316*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 1317*0997a266SAndi Kleen 1318*0997a266SAndi Kleen /* branch-misses - ditto */ 1319*0997a266SAndi Kleen evsel = evsel__next(evsel); 1320*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 1321*0997a266SAndi Kleen PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 1322*0997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 1323*0997a266SAndi Kleen 1324*0997a266SAndi Kleen return 0; 1325*0997a266SAndi Kleen } 132663503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1327ec32398cSJacob Shin { 1328515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1329ec32398cSJacob Shin 13306484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1333ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13341fc632ceSJiri Olsa evsel->core.attr.bp_type); 1335ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13361fc632ceSJiri Olsa evsel->core.attr.bp_len); 1337ec32398cSJacob Shin 1338ec32398cSJacob Shin return 0; 1339ec32398cSJacob Shin } 1340ec32398cSJacob Shin 134163503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1342ec32398cSJacob Shin { 1343515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1344ec32398cSJacob Shin 13456484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1348ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13491fc632ceSJiri Olsa evsel->core.attr.bp_type); 1350ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13511fc632ceSJiri Olsa evsel->core.attr.bp_len); 1352ec32398cSJacob Shin 1353ec32398cSJacob Shin return 0; 1354ec32398cSJacob Shin } 1355ec32398cSJacob Shin 1356ec32398cSJacob Shin static int 135763503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1358ec32398cSJacob Shin { 1359515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1360ec32398cSJacob Shin 13611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1365ec32398cSJacob Shin 1366ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1367ec32398cSJacob Shin } 1368ec32398cSJacob Shin 136963503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1370ddd83c97SJiri Olsa { 1371515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1372ddd83c97SJiri Olsa 13736484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1375ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong config", 13761fc632ceSJiri Olsa PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config); 1377ddd83c97SJiri Olsa return 0; 1378ddd83c97SJiri Olsa } 1379ddd83c97SJiri Olsa 138063503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 138110bf358aSWang Nan { 1382515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 138310bf358aSWang Nan 138410bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0); 138510bf358aSWang Nan return 0; 138610bf358aSWang Nan } 138710bf358aSWang Nan 138863503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 138910bf358aSWang Nan { 1390515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139110bf358aSWang Nan 139210bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0); 139310bf358aSWang Nan return 0; 139410bf358aSWang Nan } 139510bf358aSWang Nan 139663503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 139710bf358aSWang Nan { 1398515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139910bf358aSWang Nan 140010bf358aSWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0); 140110bf358aSWang Nan return 0; 140210bf358aSWang Nan } 140310bf358aSWang Nan 140463503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 140543d0b978SWang Nan { 1406515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 140743d0b978SWang Nan 140843d0b978SWang Nan TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0); 140943d0b978SWang Nan return 0; 141043d0b978SWang Nan } 141110bf358aSWang Nan 141216ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 141316ddcfbfSJiri Olsa { 141416ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 141516ddcfbfSJiri Olsa } 141616ddcfbfSJiri Olsa 141763503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1418b3f58c8dSArnaldo Carvalho de Melo { 1419515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1420b3f58c8dSArnaldo Carvalho de Melo 1421b3f58c8dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0); 1422b3f58c8dSArnaldo Carvalho de Melo return 0; 1423b3f58c8dSArnaldo Carvalho de Melo } 1424b3f58c8dSArnaldo Carvalho de Melo 142563503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 142606dc5bf2SAlexey Budankov { 1427515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 142806dc5bf2SAlexey Budankov 142906dc5bf2SAlexey Budankov TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0); 143006dc5bf2SAlexey Budankov return 0; 143106dc5bf2SAlexey Budankov } 143206dc5bf2SAlexey Budankov 14333a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 14343a6c51e4SJiri Olsa { 14353a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 14363a6c51e4SJiri Olsa 14373a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14383a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14393a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 14403a6c51e4SJiri Olsa return 0; 14413a6c51e4SJiri Olsa } 14423a6c51e4SJiri Olsa 144363503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1444714a92d8SJiri Olsa { 1445515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1446714a92d8SJiri Olsa 14471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 1450714a92d8SJiri Olsa return 0; 1451714a92d8SJiri Olsa } 1452714a92d8SJiri Olsa 145363503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1454714a92d8SJiri Olsa { 1455515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1456714a92d8SJiri Olsa 14571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 1460714a92d8SJiri Olsa return 0; 1461714a92d8SJiri Olsa } 1462714a92d8SJiri Olsa 146382ce75d9SJiri Olsa static int count_tracepoints(void) 146482ce75d9SJiri Olsa { 146582ce75d9SJiri Olsa struct dirent *events_ent; 146682ce75d9SJiri Olsa DIR *events_dir; 146782ce75d9SJiri Olsa int cnt = 0; 146882ce75d9SJiri Olsa 14697014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 147082ce75d9SJiri Olsa 147182ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 147282ce75d9SJiri Olsa 147382ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 147425a7d914SArnaldo Carvalho de Melo char *sys_path; 147582ce75d9SJiri Olsa struct dirent *sys_ent; 147682ce75d9SJiri Olsa DIR *sys_dir; 147782ce75d9SJiri Olsa 147882ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 147982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 148082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 148182ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 148282ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 148382ce75d9SJiri Olsa continue; 148482ce75d9SJiri Olsa 148525a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 148625a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 148782ce75d9SJiri Olsa 148882ce75d9SJiri Olsa sys_dir = opendir(sys_path); 148982ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 149082ce75d9SJiri Olsa 149182ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 149282ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 149382ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 149482ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 149582ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 149682ce75d9SJiri Olsa continue; 149782ce75d9SJiri Olsa 149882ce75d9SJiri Olsa cnt++; 149982ce75d9SJiri Olsa } 150082ce75d9SJiri Olsa 150182ce75d9SJiri Olsa closedir(sys_dir); 150225a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 150382ce75d9SJiri Olsa } 150482ce75d9SJiri Olsa 150582ce75d9SJiri Olsa closedir(events_dir); 150682ce75d9SJiri Olsa return cnt; 150782ce75d9SJiri Olsa } 150882ce75d9SJiri Olsa 150963503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 151082ce75d9SJiri Olsa { 151182ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 15126484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 151382ce75d9SJiri Olsa 151482ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 151582ce75d9SJiri Olsa } 151682ce75d9SJiri Olsa 151723b6339bSArnaldo Carvalho de Melo struct evlist_test { 1518945aea22SJiri Olsa const char *name; 1519945aea22SJiri Olsa __u32 type; 1520615b8f99SAlexander Yarygin const int id; 152116ddcfbfSJiri Olsa bool (*valid)(void); 152263503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1523945aea22SJiri Olsa }; 1524945aea22SJiri Olsa 152523b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = { 1526615b8f99SAlexander Yarygin { 152743f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1528945aea22SJiri Olsa .check = test__checkevent_tracepoint, 1529615b8f99SAlexander Yarygin .id = 0, 1530945aea22SJiri Olsa }, 1531615b8f99SAlexander Yarygin { 1532945aea22SJiri Olsa .name = "syscalls:*", 1533945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 1534615b8f99SAlexander Yarygin .id = 1, 1535945aea22SJiri Olsa }, 1536615b8f99SAlexander Yarygin { 1537945aea22SJiri Olsa .name = "r1a", 1538945aea22SJiri Olsa .check = test__checkevent_raw, 1539615b8f99SAlexander Yarygin .id = 2, 1540945aea22SJiri Olsa }, 1541615b8f99SAlexander Yarygin { 1542945aea22SJiri Olsa .name = "1:1", 1543945aea22SJiri Olsa .check = test__checkevent_numeric, 1544615b8f99SAlexander Yarygin .id = 3, 1545945aea22SJiri Olsa }, 1546615b8f99SAlexander Yarygin { 1547945aea22SJiri Olsa .name = "instructions", 1548945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 1549615b8f99SAlexander Yarygin .id = 4, 1550945aea22SJiri Olsa }, 1551615b8f99SAlexander Yarygin { 1552945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1553945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 1554615b8f99SAlexander Yarygin .id = 5, 1555945aea22SJiri Olsa }, 1556615b8f99SAlexander Yarygin { 1557945aea22SJiri Olsa .name = "faults", 1558945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 1559615b8f99SAlexander Yarygin .id = 6, 1560945aea22SJiri Olsa }, 1561615b8f99SAlexander Yarygin { 1562945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1563945aea22SJiri Olsa .check = test__checkevent_genhw, 1564615b8f99SAlexander Yarygin .id = 7, 1565945aea22SJiri Olsa }, 1566615b8f99SAlexander Yarygin { 1567945aea22SJiri Olsa .name = "mem:0", 1568945aea22SJiri Olsa .check = test__checkevent_breakpoint, 1569615b8f99SAlexander Yarygin .id = 8, 1570945aea22SJiri Olsa }, 1571615b8f99SAlexander Yarygin { 1572945aea22SJiri Olsa .name = "mem:0:x", 1573945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 1574615b8f99SAlexander Yarygin .id = 9, 1575945aea22SJiri Olsa }, 1576615b8f99SAlexander Yarygin { 1577945aea22SJiri Olsa .name = "mem:0:r", 1578945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 1579615b8f99SAlexander Yarygin .id = 10, 1580945aea22SJiri Olsa }, 1581615b8f99SAlexander Yarygin { 1582945aea22SJiri Olsa .name = "mem:0:w", 1583945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 1584615b8f99SAlexander Yarygin .id = 11, 1585945aea22SJiri Olsa }, 1586615b8f99SAlexander Yarygin { 158743f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1588945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 1589615b8f99SAlexander Yarygin .id = 12, 1590945aea22SJiri Olsa }, 1591615b8f99SAlexander Yarygin { 1592945aea22SJiri Olsa .name = "syscalls:*:u", 1593945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 1594615b8f99SAlexander Yarygin .id = 13, 1595945aea22SJiri Olsa }, 1596615b8f99SAlexander Yarygin { 1597945aea22SJiri Olsa .name = "r1a:kp", 1598945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 1599615b8f99SAlexander Yarygin .id = 14, 1600945aea22SJiri Olsa }, 1601615b8f99SAlexander Yarygin { 1602945aea22SJiri Olsa .name = "1:1:hp", 1603945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 1604615b8f99SAlexander Yarygin .id = 15, 1605945aea22SJiri Olsa }, 1606615b8f99SAlexander Yarygin { 1607945aea22SJiri Olsa .name = "instructions:h", 1608945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 1609615b8f99SAlexander Yarygin .id = 16, 1610945aea22SJiri Olsa }, 1611615b8f99SAlexander Yarygin { 1612945aea22SJiri Olsa .name = "faults:u", 1613945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 1614615b8f99SAlexander Yarygin .id = 17, 1615945aea22SJiri Olsa }, 1616615b8f99SAlexander Yarygin { 1617945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1618945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 1619615b8f99SAlexander Yarygin .id = 18, 1620945aea22SJiri Olsa }, 1621615b8f99SAlexander Yarygin { 1622945aea22SJiri Olsa .name = "mem:0:u", 1623945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 1624615b8f99SAlexander Yarygin .id = 19, 1625945aea22SJiri Olsa }, 1626615b8f99SAlexander Yarygin { 1627945aea22SJiri Olsa .name = "mem:0:x:k", 1628945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 1629615b8f99SAlexander Yarygin .id = 20, 1630945aea22SJiri Olsa }, 1631615b8f99SAlexander Yarygin { 1632945aea22SJiri Olsa .name = "mem:0:r:hp", 1633945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 1634615b8f99SAlexander Yarygin .id = 21, 1635945aea22SJiri Olsa }, 1636615b8f99SAlexander Yarygin { 1637945aea22SJiri Olsa .name = "mem:0:w:up", 1638945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 1639615b8f99SAlexander Yarygin .id = 22, 1640945aea22SJiri Olsa }, 1641615b8f99SAlexander Yarygin { 164243f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1643945aea22SJiri Olsa .check = test__checkevent_list, 1644615b8f99SAlexander Yarygin .id = 23, 1645945aea22SJiri Olsa }, 1646615b8f99SAlexander Yarygin { 1647945aea22SJiri Olsa .name = "instructions:G", 1648945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 1649615b8f99SAlexander Yarygin .id = 24, 1650945aea22SJiri Olsa }, 1651615b8f99SAlexander Yarygin { 1652945aea22SJiri Olsa .name = "instructions:H", 1653945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 1654615b8f99SAlexander Yarygin .id = 25, 1655945aea22SJiri Olsa }, 1656615b8f99SAlexander Yarygin { 1657945aea22SJiri Olsa .name = "mem:0:rw", 1658945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 1659615b8f99SAlexander Yarygin .id = 26, 1660945aea22SJiri Olsa }, 1661615b8f99SAlexander Yarygin { 1662945aea22SJiri Olsa .name = "mem:0:rw:kp", 1663945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 1664615b8f99SAlexander Yarygin .id = 27, 1665945aea22SJiri Olsa }, 1666615b8f99SAlexander Yarygin { 1667945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1668945aea22SJiri Olsa .check = test__group1, 1669615b8f99SAlexander Yarygin .id = 28, 1670945aea22SJiri Olsa }, 1671615b8f99SAlexander Yarygin { 1672945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1673945aea22SJiri Olsa .check = test__group2, 1674615b8f99SAlexander Yarygin .id = 29, 1675945aea22SJiri Olsa }, 1676615b8f99SAlexander Yarygin { 167743f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1678945aea22SJiri Olsa .check = test__group3, 1679615b8f99SAlexander Yarygin .id = 30, 1680945aea22SJiri Olsa }, 1681615b8f99SAlexander Yarygin { 1682945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1683945aea22SJiri Olsa .check = test__group4, 1684615b8f99SAlexander Yarygin .id = 31, 1685945aea22SJiri Olsa }, 1686615b8f99SAlexander Yarygin { 1687945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1688945aea22SJiri Olsa .check = test__group5, 1689615b8f99SAlexander Yarygin .id = 32, 1690945aea22SJiri Olsa }, 1691615b8f99SAlexander Yarygin { 169282ce75d9SJiri Olsa .name = "*:*", 169382ce75d9SJiri Olsa .check = test__all_tracepoints, 1694615b8f99SAlexander Yarygin .id = 33, 169582ce75d9SJiri Olsa }, 1696615b8f99SAlexander Yarygin { 16975a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 16985a30a99fSJiri Olsa .check = test__group_gh1, 1699615b8f99SAlexander Yarygin .id = 34, 17005a30a99fSJiri Olsa }, 1701615b8f99SAlexander Yarygin { 17025a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 17035a30a99fSJiri Olsa .check = test__group_gh2, 1704615b8f99SAlexander Yarygin .id = 35, 17055a30a99fSJiri Olsa }, 1706615b8f99SAlexander Yarygin { 17075a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 17085a30a99fSJiri Olsa .check = test__group_gh3, 1709615b8f99SAlexander Yarygin .id = 36, 17105a30a99fSJiri Olsa }, 1711615b8f99SAlexander Yarygin { 17125a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 17135a30a99fSJiri Olsa .check = test__group_gh4, 1714615b8f99SAlexander Yarygin .id = 37, 17155a30a99fSJiri Olsa }, 1716615b8f99SAlexander Yarygin { 1717a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1718a9f93f97SJiri Olsa .check = test__leader_sample1, 1719615b8f99SAlexander Yarygin .id = 38, 1720a9f93f97SJiri Olsa }, 1721615b8f99SAlexander Yarygin { 1722a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1723a9f93f97SJiri Olsa .check = test__leader_sample2, 1724615b8f99SAlexander Yarygin .id = 39, 1725a9f93f97SJiri Olsa }, 1726615b8f99SAlexander Yarygin { 1727c9ee780fSMichael Ellerman .name = "instructions:uDp", 1728c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 1729615b8f99SAlexander Yarygin .id = 40, 1730c9ee780fSMichael Ellerman }, 1731615b8f99SAlexander Yarygin { 1732c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1733c9ee780fSMichael Ellerman .check = test__pinned_group, 1734615b8f99SAlexander Yarygin .id = 41, 1735c9ee780fSMichael Ellerman }, 1736ec32398cSJacob Shin { 1737ec32398cSJacob Shin .name = "mem:0/1", 1738ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 1739ec32398cSJacob Shin .id = 42, 1740ec32398cSJacob Shin }, 1741ec32398cSJacob Shin { 1742ec32398cSJacob Shin .name = "mem:0/2:w", 1743ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 1744ec32398cSJacob Shin .id = 43, 1745ec32398cSJacob Shin }, 1746ec32398cSJacob Shin { 1747ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1748ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 1749ec32398cSJacob Shin .id = 44 1750ec32398cSJacob Shin }, 1751c0bc8c6dSAlexander Yarygin #if defined(__s390x__) 1752c0bc8c6dSAlexander Yarygin { 1753c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1754c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 175553fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 1756c0bc8c6dSAlexander Yarygin .id = 100, 1757c0bc8c6dSAlexander Yarygin }, 1758c0bc8c6dSAlexander Yarygin #endif 1759a1e12da4SJiri Olsa { 1760a1e12da4SJiri Olsa .name = "instructions:I", 1761a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 1762a1e12da4SJiri Olsa .id = 45, 1763a1e12da4SJiri Olsa }, 1764a1e12da4SJiri Olsa { 1765a1e12da4SJiri Olsa .name = "instructions:kIG", 1766a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 1767a1e12da4SJiri Olsa .id = 46, 1768a1e12da4SJiri Olsa }, 1769ddd83c97SJiri Olsa { 1770ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1771ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 1772ddd83c97SJiri Olsa .id = 47, 1773ddd83c97SJiri Olsa }, 177410bf358aSWang Nan { 177510bf358aSWang Nan .name = "instructions/name=insn/", 177610bf358aSWang Nan .check = test__checkevent_config_symbol, 177710bf358aSWang Nan .id = 48, 177810bf358aSWang Nan }, 177910bf358aSWang Nan { 178010bf358aSWang Nan .name = "r1234/name=rawpmu/", 178110bf358aSWang Nan .check = test__checkevent_config_raw, 178210bf358aSWang Nan .id = 49, 178310bf358aSWang Nan }, 178410bf358aSWang Nan { 178510bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 178610bf358aSWang Nan .check = test__checkevent_config_num, 178710bf358aSWang Nan .id = 50, 178810bf358aSWang Nan }, 178943d0b978SWang Nan { 179043d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 179143d0b978SWang Nan .check = test__checkevent_config_cache, 179243d0b978SWang Nan .id = 51, 179343d0b978SWang Nan }, 1794b3f58c8dSArnaldo Carvalho de Melo { 1795b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 179616ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1797b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 1798b3f58c8dSArnaldo Carvalho de Melo .id = 52, 1799b3f58c8dSArnaldo Carvalho de Melo }, 180006dc5bf2SAlexey Budankov { 180106dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 180206dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 180306dc5bf2SAlexey Budankov .id = 53 1804714a92d8SJiri Olsa }, 1805714a92d8SJiri Olsa { 1806714a92d8SJiri Olsa .name = "cycles//u", 1807714a92d8SJiri Olsa .check = test__sym_event_slash, 1808714a92d8SJiri Olsa .id = 54, 1809714a92d8SJiri Olsa }, 1810714a92d8SJiri Olsa { 1811714a92d8SJiri Olsa .name = "cycles:k", 1812714a92d8SJiri Olsa .check = test__sym_event_dc, 1813714a92d8SJiri Olsa .id = 55, 1814*0997a266SAndi Kleen }, 1815*0997a266SAndi Kleen { 1816*0997a266SAndi Kleen .name = "instructions:uep", 1817*0997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 1818*0997a266SAndi Kleen .id = 56, 1819*0997a266SAndi Kleen }, 1820*0997a266SAndi Kleen { 1821*0997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 1822*0997a266SAndi Kleen .check = test__exclusive_group, 1823*0997a266SAndi Kleen .id = 57, 1824*0997a266SAndi Kleen }, 1825945aea22SJiri Olsa }; 1826945aea22SJiri Olsa 182723b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = { 1828615b8f99SAlexander Yarygin { 1829945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1830945aea22SJiri Olsa .check = test__checkevent_pmu, 1831615b8f99SAlexander Yarygin .id = 0, 1832945aea22SJiri Olsa }, 1833615b8f99SAlexander Yarygin { 1834945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1835945aea22SJiri Olsa .check = test__checkevent_pmu_name, 1836615b8f99SAlexander Yarygin .id = 1, 1837945aea22SJiri Olsa }, 183871ef150eSKan Liang { 183971ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 184071ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 184171ef150eSKan Liang .id = 2, 184271ef150eSKan Liang }, 184306dc5bf2SAlexey Budankov { 1844a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 184506dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 184606dc5bf2SAlexey Budankov .id = 3, 18473a6c51e4SJiri Olsa }, 18483a6c51e4SJiri Olsa { 18493a6c51e4SJiri Olsa .name = "software/r1a/", 18503a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 18513a6c51e4SJiri Olsa .id = 4, 18523a6c51e4SJiri Olsa }, 1853c33cdf54SJiri Olsa { 1854c33cdf54SJiri Olsa .name = "software/r0x1a/", 1855c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 1856c33cdf54SJiri Olsa .id = 4, 1857c33cdf54SJiri Olsa }, 1858945aea22SJiri Olsa }; 1859945aea22SJiri Olsa 186023b6339bSArnaldo Carvalho de Melo struct terms_test { 1861945aea22SJiri Olsa const char *str; 1862945aea22SJiri Olsa __u32 type; 1863945aea22SJiri Olsa int (*check)(struct list_head *terms); 1864945aea22SJiri Olsa }; 1865945aea22SJiri Olsa 186623b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = { 1867945aea22SJiri Olsa [0] = { 18684929e95aSJiri Olsa .str = "config=10,config1,config2=3,umask=1,read,r0xead", 1869945aea22SJiri Olsa .check = test__checkterms_simple, 1870945aea22SJiri Olsa }, 1871945aea22SJiri Olsa }; 1872945aea22SJiri Olsa 187323b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e) 1874945aea22SJiri Olsa { 1875a910e466SIan Rogers struct parse_events_error err; 187663503dbaSJiri Olsa struct evlist *evlist; 1877945aea22SJiri Olsa int ret; 1878945aea22SJiri Olsa 1879a910e466SIan Rogers bzero(&err, sizeof(err)); 188016ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 188116ddcfbfSJiri Olsa pr_debug("... SKIP"); 188216ddcfbfSJiri Olsa return 0; 188316ddcfbfSJiri Olsa } 188416ddcfbfSJiri Olsa 18850f98b11cSJiri Olsa evlist = evlist__new(); 1886945aea22SJiri Olsa if (evlist == NULL) 1887945aea22SJiri Olsa return -ENOMEM; 1888945aea22SJiri Olsa 1889933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 1890945aea22SJiri Olsa if (ret) { 1891933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 1892933ccf20SJiri Olsa e->name, ret, err.str); 1893933ccf20SJiri Olsa parse_events_print_error(&err, e->name); 18942d4352c0SArnaldo Carvalho de Melo } else { 18952d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 1896945aea22SJiri Olsa } 1897945aea22SJiri Olsa 1898c12995a5SJiri Olsa evlist__delete(evlist); 1899945aea22SJiri Olsa 1900945aea22SJiri Olsa return ret; 1901945aea22SJiri Olsa } 1902945aea22SJiri Olsa 190323b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt) 1904945aea22SJiri Olsa { 1905945aea22SJiri Olsa int ret1, ret2 = 0; 1906945aea22SJiri Olsa unsigned i; 1907945aea22SJiri Olsa 1908945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 190923b6339bSArnaldo Carvalho de Melo struct evlist_test *e = &events[i]; 1910945aea22SJiri Olsa 191116ddcfbfSJiri Olsa pr_debug("running test %d '%s'", e->id, e->name); 1912945aea22SJiri Olsa ret1 = test_event(e); 1913945aea22SJiri Olsa if (ret1) 1914945aea22SJiri Olsa ret2 = ret1; 191516ddcfbfSJiri Olsa pr_debug("\n"); 1916945aea22SJiri Olsa } 1917945aea22SJiri Olsa 1918945aea22SJiri Olsa return ret2; 1919945aea22SJiri Olsa } 1920945aea22SJiri Olsa 192123b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t) 1922945aea22SJiri Olsa { 1923c549aca5SDavid Ahern struct list_head terms; 1924945aea22SJiri Olsa int ret; 1925945aea22SJiri Olsa 1926c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 1927945aea22SJiri Olsa 19284929e95aSJiri Olsa /* 19294929e95aSJiri Olsa * The perf_pmu__test_parse_init prepares perf_pmu_events_list 19304929e95aSJiri Olsa * which gets freed in parse_events_terms. 19314929e95aSJiri Olsa */ 19324929e95aSJiri Olsa if (perf_pmu__test_parse_init()) 19334929e95aSJiri Olsa return -1; 19344929e95aSJiri Olsa 1935c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 1936945aea22SJiri Olsa if (ret) { 1937945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 1938945aea22SJiri Olsa t->str , ret); 1939945aea22SJiri Olsa return ret; 1940945aea22SJiri Olsa } 1941945aea22SJiri Olsa 1942c549aca5SDavid Ahern ret = t->check(&terms); 1943682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 1944945aea22SJiri Olsa 1945945aea22SJiri Olsa return ret; 1946945aea22SJiri Olsa } 1947945aea22SJiri Olsa 194823b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt) 1949945aea22SJiri Olsa { 1950945aea22SJiri Olsa int ret = 0; 1951945aea22SJiri Olsa unsigned i; 1952945aea22SJiri Olsa 1953945aea22SJiri Olsa for (i = 0; i < cnt; i++) { 195423b6339bSArnaldo Carvalho de Melo struct terms_test *t = &terms[i]; 1955945aea22SJiri Olsa 1956945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 1957945aea22SJiri Olsa ret = test_term(t); 1958945aea22SJiri Olsa if (ret) 1959945aea22SJiri Olsa break; 1960945aea22SJiri Olsa } 1961945aea22SJiri Olsa 1962945aea22SJiri Olsa return ret; 1963945aea22SJiri Olsa } 1964945aea22SJiri Olsa 1965945aea22SJiri Olsa static int test_pmu(void) 1966945aea22SJiri Olsa { 1967945aea22SJiri Olsa struct stat st; 1968945aea22SJiri Olsa char path[PATH_MAX]; 1969945aea22SJiri Olsa int ret; 1970945aea22SJiri Olsa 1971945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", 1972cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 1973945aea22SJiri Olsa 1974945aea22SJiri Olsa ret = stat(path, &st); 1975945aea22SJiri Olsa if (ret) 1976945aea22SJiri Olsa pr_debug("omitting PMU cpu tests\n"); 1977945aea22SJiri Olsa return !ret; 1978945aea22SJiri Olsa } 1979945aea22SJiri Olsa 1980945aea22SJiri Olsa static int test_pmu_events(void) 1981945aea22SJiri Olsa { 1982945aea22SJiri Olsa struct stat st; 1983945aea22SJiri Olsa char path[PATH_MAX]; 1984945aea22SJiri Olsa struct dirent *ent; 1985945aea22SJiri Olsa DIR *dir; 1986945aea22SJiri Olsa int ret; 1987945aea22SJiri Olsa 1988945aea22SJiri Olsa snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", 1989cf38fadaSArnaldo Carvalho de Melo sysfs__mountpoint()); 1990945aea22SJiri Olsa 1991945aea22SJiri Olsa ret = stat(path, &st); 1992945aea22SJiri Olsa if (ret) { 1993a895d57dSMasanari Iida pr_debug("omitting PMU cpu events tests\n"); 1994945aea22SJiri Olsa return 0; 1995945aea22SJiri Olsa } 1996945aea22SJiri Olsa 1997945aea22SJiri Olsa dir = opendir(path); 1998945aea22SJiri Olsa if (!dir) { 1999945aea22SJiri Olsa pr_debug("can't open pmu event dir"); 2000945aea22SJiri Olsa return -1; 2001945aea22SJiri Olsa } 2002945aea22SJiri Olsa 2003945aea22SJiri Olsa while (!ret && (ent = readdir(dir))) { 200416ddcfbfSJiri Olsa struct evlist_test e = { .id = 0, }; 20052e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 2006945aea22SJiri Olsa 200717a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 200817a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2009945aea22SJiri Olsa continue; 2010945aea22SJiri Olsa 20112e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name); 2012945aea22SJiri Olsa 2013945aea22SJiri Olsa e.name = name; 2014945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2015945aea22SJiri Olsa 2016945aea22SJiri Olsa ret = test_event(&e); 2017ffe59788SKan Liang if (ret) 2018ffe59788SKan Liang break; 20192e2bbc03SArnaldo Carvalho de Melo snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name); 2020ffe59788SKan Liang e.name = name; 2021ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 2022ffe59788SKan Liang ret = test_event(&e); 2023945aea22SJiri Olsa } 2024945aea22SJiri Olsa 2025945aea22SJiri Olsa closedir(dir); 2026945aea22SJiri Olsa return ret; 2027945aea22SJiri Olsa } 2028945aea22SJiri Olsa 202981f17c90SArnaldo Carvalho de Melo int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused) 2030945aea22SJiri Olsa { 2031945aea22SJiri Olsa int ret1, ret2 = 0; 2032945aea22SJiri Olsa 2033945aea22SJiri Olsa #define TEST_EVENTS(tests) \ 2034945aea22SJiri Olsa do { \ 2035945aea22SJiri Olsa ret1 = test_events(tests, ARRAY_SIZE(tests)); \ 2036945aea22SJiri Olsa if (!ret2) \ 2037945aea22SJiri Olsa ret2 = ret1; \ 2038945aea22SJiri Olsa } while (0) 2039945aea22SJiri Olsa 2040945aea22SJiri Olsa TEST_EVENTS(test__events); 2041945aea22SJiri Olsa 2042945aea22SJiri Olsa if (test_pmu()) 2043945aea22SJiri Olsa TEST_EVENTS(test__events_pmu); 2044945aea22SJiri Olsa 2045945aea22SJiri Olsa if (test_pmu()) { 2046945aea22SJiri Olsa int ret = test_pmu_events(); 2047945aea22SJiri Olsa if (ret) 2048945aea22SJiri Olsa return ret; 2049945aea22SJiri Olsa } 2050945aea22SJiri Olsa 2051945aea22SJiri Olsa ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); 2052945aea22SJiri Olsa if (!ret2) 2053945aea22SJiri Olsa ret2 = ret1; 2054945aea22SJiri Olsa 2055945aea22SJiri Olsa return ret2; 2056945aea22SJiri Olsa } 2057