1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2945aea22SJiri Olsa #include "parse-events.h" 3945aea22SJiri Olsa #include "evsel.h" 4945aea22SJiri Olsa #include "evlist.h" 5cd0cfad7SBorislav Petkov #include <api/fs/fs.h> 6c81251e8SJiri Olsa #include "tests.h" 784f5d36fSJiri Olsa #include "debug.h" 8f2a39fe8SArnaldo Carvalho de Melo #include "pmu.h" 95a52817eSIan Rogers #include "pmus.h" 1076b31a29SArnaldo Carvalho de Melo #include <dirent.h> 11a43783aeSArnaldo Carvalho de Melo #include <errno.h> 12c7a3828dSJin Yao #include "fncache.h" 137a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h> 147a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h> 157a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h> 16877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h> 17f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h> 1820a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h> 19945aea22SJiri Olsa 20945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 21945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 22945aea22SJiri Olsa 239854934bSIan Rogers static bool test_config(const struct evsel *evsel, __u64 expected_config) 249854934bSIan Rogers { 259854934bSIan Rogers __u32 type = evsel->core.attr.type; 269854934bSIan Rogers __u64 config = evsel->core.attr.config; 279854934bSIan Rogers 289854934bSIan Rogers if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) { 299854934bSIan Rogers /* 309854934bSIan Rogers * HARDWARE and HW_CACHE events encode the PMU's extended type 319854934bSIan Rogers * in the top 32-bits. Mask in order to ignore. 329854934bSIan Rogers */ 339854934bSIan Rogers config &= PERF_HW_EVENT_MASK; 349854934bSIan Rogers } 359854934bSIan Rogers return config == expected_config; 369854934bSIan Rogers } 379854934bSIan Rogers 38aefde50aSIan Rogers static bool test_perf_config(const struct perf_evsel *evsel, __u64 expected_config) 39aefde50aSIan Rogers { 40aefde50aSIan Rogers return (evsel->attr.config & PERF_HW_EVENT_MASK) == expected_config; 41aefde50aSIan Rogers } 42aefde50aSIan Rogers 43378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 44378ef0f5SIan Rogers 4553fe307dSThomas Richter #if defined(__s390x__) 4653fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 474d39c89fSIngo Molnar * and return success when trace point kvm_s390_create_vm 4853fe307dSThomas Richter * exists. Otherwise this test always fails. 4953fe307dSThomas Richter */ 5053fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 5153fe307dSThomas Richter { 5253fe307dSThomas Richter char *eventfile; 5353fe307dSThomas Richter bool rc = false; 5453fe307dSThomas Richter 5553fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 5653fe307dSThomas Richter 5753fe307dSThomas Richter if (eventfile) { 5853fe307dSThomas Richter DIR *mydir = opendir(eventfile); 5953fe307dSThomas Richter 6053fe307dSThomas Richter if (mydir) { 6153fe307dSThomas Richter rc = true; 6253fe307dSThomas Richter closedir(mydir); 6353fe307dSThomas Richter } 6453fe307dSThomas Richter put_events_file(eventfile); 6553fe307dSThomas Richter } 6653fe307dSThomas Richter 6753fe307dSThomas Richter return rc; 6853fe307dSThomas Richter } 6953fe307dSThomas Richter #endif 7053fe307dSThomas Richter 7163503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 72945aea22SJiri Olsa { 73515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 74945aea22SJiri Olsa 756484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 769d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 78945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 791fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 817741e03eSIan Rogers return TEST_OK; 82945aea22SJiri Olsa } 83945aea22SJiri Olsa 8463503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 85945aea22SJiri Olsa { 8632dcd021SJiri Olsa struct evsel *evsel; 87945aea22SJiri Olsa 886484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 899d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 90945aea22SJiri Olsa 91e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 92945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 931fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 94945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 951fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 96945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 971fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 98945aea22SJiri Olsa } 997741e03eSIan Rogers return TEST_OK; 100945aea22SJiri Olsa } 101378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 102945aea22SJiri Olsa 10363503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 104945aea22SJiri Olsa { 105aefde50aSIan Rogers struct perf_evsel *evsel; 106aefde50aSIan Rogers bool raw_type_match = false; 107945aea22SJiri Olsa 108aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 109aefde50aSIan Rogers 110aefde50aSIan Rogers perf_evlist__for_each_evsel(&evlist->core, evsel) { 111aefde50aSIan Rogers struct perf_pmu *pmu; 112aefde50aSIan Rogers bool type_matched = false; 113aefde50aSIan Rogers 114aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 0x1a)); 115aefde50aSIan Rogers perf_pmus__for_each_pmu(pmu) { 116aefde50aSIan Rogers if (pmu->type == evsel->attr.type) { 117aefde50aSIan Rogers TEST_ASSERT_VAL("PMU type expected once", !type_matched); 118aefde50aSIan Rogers type_matched = true; 119aefde50aSIan Rogers if (pmu->type == PERF_TYPE_RAW) 120aefde50aSIan Rogers raw_type_match = true; 121aefde50aSIan Rogers } 122aefde50aSIan Rogers } 123aefde50aSIan Rogers TEST_ASSERT_VAL("No PMU found for type", type_matched); 124aefde50aSIan Rogers } 125aefde50aSIan Rogers TEST_ASSERT_VAL("Raw PMU not matched", raw_type_match); 1267741e03eSIan Rogers return TEST_OK; 127945aea22SJiri Olsa } 128945aea22SJiri Olsa 12963503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 130945aea22SJiri Olsa { 131515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 132945aea22SJiri Olsa 1336484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 1359854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 1367741e03eSIan Rogers return TEST_OK; 137945aea22SJiri Olsa } 138945aea22SJiri Olsa 13963503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 140945aea22SJiri Olsa { 141aefde50aSIan Rogers struct perf_evsel *evsel; 142945aea22SJiri Olsa 143aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 144aefde50aSIan Rogers 145aefde50aSIan Rogers perf_evlist__for_each_evsel(&evlist->core, evsel) { 146aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 147aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", 148aefde50aSIan Rogers test_perf_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 149aefde50aSIan Rogers } 1507741e03eSIan Rogers return TEST_OK; 151945aea22SJiri Olsa } 152945aea22SJiri Olsa 15363503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 154945aea22SJiri Olsa { 155aefde50aSIan Rogers struct perf_evsel *evsel; 156945aea22SJiri Olsa 157aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 158aefde50aSIan Rogers 159aefde50aSIan Rogers perf_evlist__for_each_evsel(&evlist->core, evsel) { 160aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 161aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 162ee4c7588SJiri Olsa /* 16378e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 164ee4c7588SJiri Olsa * while this test executes only parse events method. 165ee4c7588SJiri Olsa */ 166aefde50aSIan Rogers TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period); 167aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); 168aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config2", 1 == evsel->attr.config2); 169aefde50aSIan Rogers } 1707741e03eSIan Rogers return TEST_OK; 171945aea22SJiri Olsa } 172945aea22SJiri Olsa 17363503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 174945aea22SJiri Olsa { 175515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 176945aea22SJiri Olsa 1776484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1799854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 1807741e03eSIan Rogers return TEST_OK; 181945aea22SJiri Olsa } 182945aea22SJiri Olsa 18363503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 184945aea22SJiri Olsa { 185aefde50aSIan Rogers struct perf_evsel *evsel; 186945aea22SJiri Olsa 187aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 188aefde50aSIan Rogers 189aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 190aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); 191aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 1 << 16)); 192aefde50aSIan Rogers } 1937741e03eSIan Rogers return TEST_OK; 194945aea22SJiri Olsa } 195945aea22SJiri Olsa 19663503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 197945aea22SJiri Olsa { 198515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 199945aea22SJiri Olsa 2006484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 2011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2029854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 203945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 2041fc632ceSJiri Olsa evsel->core.attr.bp_type); 205945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 2061fc632ceSJiri Olsa evsel->core.attr.bp_len); 2077741e03eSIan Rogers return TEST_OK; 208945aea22SJiri Olsa } 209945aea22SJiri Olsa 21063503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 211945aea22SJiri Olsa { 212515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 213945aea22SJiri Olsa 2146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 2151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2169854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 217945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2181fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 2191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 2207741e03eSIan Rogers return TEST_OK; 221945aea22SJiri Olsa } 222945aea22SJiri Olsa 22363503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 224945aea22SJiri Olsa { 225515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 226945aea22SJiri Olsa 2276484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 228945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2291fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2309854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 231945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2321fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 233945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2341fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2357741e03eSIan Rogers return TEST_OK; 236945aea22SJiri Olsa } 237945aea22SJiri Olsa 23863503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 239945aea22SJiri Olsa { 240515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 241945aea22SJiri Olsa 2426484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 243945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2441fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2459854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 246945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2471fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 248945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2491fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2507741e03eSIan Rogers return TEST_OK; 251945aea22SJiri Olsa } 252945aea22SJiri Olsa 25363503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 254945aea22SJiri Olsa { 255515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 256945aea22SJiri Olsa 2576484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 258945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2591fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2609854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 261945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2621fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 263945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2641fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2657741e03eSIan Rogers return TEST_OK; 266945aea22SJiri Olsa } 267945aea22SJiri Olsa 268378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 26963503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 270945aea22SJiri Olsa { 271515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 272945aea22SJiri Olsa 2731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 277945aea22SJiri Olsa 278945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 279945aea22SJiri Olsa } 280945aea22SJiri Olsa 281945aea22SJiri Olsa static int 28263503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 283945aea22SJiri Olsa { 284aefde50aSIan Rogers struct perf_evsel *evsel; 285945aea22SJiri Olsa 2866484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 287945aea22SJiri Olsa 288aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 289aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 290aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 291aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 292aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 293945aea22SJiri Olsa } 294945aea22SJiri Olsa 295945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 296945aea22SJiri Olsa } 297378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 298945aea22SJiri Olsa 29963503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 300945aea22SJiri Olsa { 301aefde50aSIan Rogers struct perf_evsel *evsel; 302945aea22SJiri Olsa 303aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 304aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 305aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 306aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 307aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 308aefde50aSIan Rogers } 309945aea22SJiri Olsa return test__checkevent_raw(evlist); 310945aea22SJiri Olsa } 311945aea22SJiri Olsa 31263503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist) 313945aea22SJiri Olsa { 314aefde50aSIan Rogers struct perf_evsel *evsel; 315945aea22SJiri Olsa 316aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 317aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 318aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 319aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 320aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 321aefde50aSIan Rogers } 322945aea22SJiri Olsa return test__checkevent_numeric(evlist); 323945aea22SJiri Olsa } 324945aea22SJiri Olsa 32563503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 326945aea22SJiri Olsa { 327515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 328945aea22SJiri Olsa 3291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 333945aea22SJiri Olsa 334945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 335945aea22SJiri Olsa } 336945aea22SJiri Olsa 33763503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 338945aea22SJiri Olsa { 339aefde50aSIan Rogers struct perf_evsel *evsel; 340945aea22SJiri Olsa 341aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 342aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 343aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 344aefde50aSIan Rogers } 345945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 346945aea22SJiri Olsa } 347945aea22SJiri Olsa 34863503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 349945aea22SJiri Olsa { 350aefde50aSIan Rogers struct perf_evsel *evsel; 351945aea22SJiri Olsa 352aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 353aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 354aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 355aefde50aSIan Rogers } 356945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 357945aea22SJiri Olsa } 358945aea22SJiri Olsa 35963503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 360945aea22SJiri Olsa { 361515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 362945aea22SJiri Olsa 3631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 367945aea22SJiri Olsa 368945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 369945aea22SJiri Olsa } 370945aea22SJiri Olsa 37163503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 372945aea22SJiri Olsa { 373aefde50aSIan Rogers struct perf_evsel *evsel; 374945aea22SJiri Olsa 375aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 376aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 377aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 378aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 379aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 380aefde50aSIan Rogers } 381945aea22SJiri Olsa return test__checkevent_genhw(evlist); 382945aea22SJiri Olsa } 383945aea22SJiri Olsa 38463503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 385a1e12da4SJiri Olsa { 386515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 387a1e12da4SJiri Olsa 3881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 395a1e12da4SJiri Olsa 396a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 397a1e12da4SJiri Olsa } 398a1e12da4SJiri Olsa 39963503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 400a1e12da4SJiri Olsa { 401515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 402a1e12da4SJiri Olsa 4031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 4041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 4051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 4061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 410a1e12da4SJiri Olsa 411a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 412a1e12da4SJiri Olsa } 413a1e12da4SJiri Olsa 41463503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 415945aea22SJiri Olsa { 416515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 417945aea22SJiri Olsa 418945aea22SJiri Olsa 4191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 423945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4248ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 425945aea22SJiri Olsa 426945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 427945aea22SJiri Olsa } 428945aea22SJiri Olsa 42963503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 430945aea22SJiri Olsa { 431515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 432945aea22SJiri Olsa 4331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 437945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4388ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 439945aea22SJiri Olsa 440945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 441945aea22SJiri Olsa } 442945aea22SJiri Olsa 44363503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 444945aea22SJiri Olsa { 445515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 446945aea22SJiri Olsa 4471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 451945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4528ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 453945aea22SJiri Olsa 454945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 455945aea22SJiri Olsa } 456945aea22SJiri Olsa 45763503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 458945aea22SJiri Olsa { 459515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 460945aea22SJiri Olsa 4611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 465945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4668ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 467945aea22SJiri Olsa 468945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 469945aea22SJiri Olsa } 470945aea22SJiri Olsa 47163503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 472945aea22SJiri Olsa { 473515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 474945aea22SJiri Olsa 4751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 479945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4808ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 481945aea22SJiri Olsa 482945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 483945aea22SJiri Olsa } 484945aea22SJiri Olsa 48563503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 486945aea22SJiri Olsa { 487945aea22SJiri Olsa 488515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 489945aea22SJiri Olsa 4906484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4929854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 10)); 4931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 495204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 496ee4c7588SJiri Olsa /* 49778e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 498ee4c7588SJiri Olsa * while this test executes only parse events method. 499ee4c7588SJiri Olsa */ 5001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 501945aea22SJiri Olsa 5027741e03eSIan Rogers return TEST_OK; 503945aea22SJiri Olsa } 504945aea22SJiri Olsa 505378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 50663503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 507945aea22SJiri Olsa { 508515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 509945aea22SJiri Olsa 510aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 3 <= evlist->core.nr_entries); 511945aea22SJiri Olsa 512945aea22SJiri Olsa /* r1 */ 513aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT != evsel->core.attr.type); 514aefde50aSIan Rogers while (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) { 5159854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 5161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 5171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 518204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 5191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 5201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 5211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 5221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 523aefde50aSIan Rogers evsel = evsel__next(evsel); 524aefde50aSIan Rogers } 525945aea22SJiri Olsa 52643f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 5271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 528945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 5291fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 5301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 5311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 5321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 5331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 535945aea22SJiri Olsa 536945aea22SJiri Olsa /* 1:1:hp */ 537e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 5399854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 5401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 5411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 5421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 5431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 544945aea22SJiri Olsa 5457741e03eSIan Rogers return TEST_OK; 546945aea22SJiri Olsa } 547378ef0f5SIan Rogers #endif 548945aea22SJiri Olsa 54963503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 550945aea22SJiri Olsa { 551515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 552945aea22SJiri Olsa 553945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 5546484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5569854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 5578ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 558945aea22SJiri Olsa 559945aea22SJiri Olsa /* cpu/config=2/u" */ 560e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5616484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5639854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 564945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5658ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 566945aea22SJiri Olsa 5677741e03eSIan Rogers return TEST_OK; 568945aea22SJiri Olsa } 569945aea22SJiri Olsa 57063503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 57171ef150eSKan Liang { 572515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 57371ef150eSKan Liang 57471ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5756484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5779854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 57871ef150eSKan Liang /* 57978e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 58071ef150eSKan Liang * while this test executes only parse events method. 58171ef150eSKan Liang */ 5821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 58327de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 58571ef150eSKan Liang 58671ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 587e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5899854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 59071ef150eSKan Liang /* 59178e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 59271ef150eSKan Liang * while this test executes only parse events method. 59371ef150eSKan Liang */ 5941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 59527de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 59771ef150eSKan Liang 5987741e03eSIan Rogers return TEST_OK; 59971ef150eSKan Liang } 60071ef150eSKan Liang 60163503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 602945aea22SJiri Olsa { 603515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 604945aea22SJiri Olsa 6056484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 6065a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 6075a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 608945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 6091fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 610945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 6111fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 6121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 6150997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 616945aea22SJiri Olsa 6177741e03eSIan Rogers return TEST_OK; 618945aea22SJiri Olsa } 619945aea22SJiri Olsa 620ffe59788SKan Liang 62163503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 622ffe59788SKan Liang { 623515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 624ffe59788SKan Liang 625ffe59788SKan Liang /* pmu-event:u */ 6266484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 627ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 6281fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 629ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 6301fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 6311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 6340997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 635ffe59788SKan Liang 636ffe59788SKan Liang /* cpu/pmu-event/u*/ 637e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6386484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6395a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 6405a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 641ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 6421fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 643ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 6441fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 6451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 6480997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 649ffe59788SKan Liang 6507741e03eSIan Rogers return TEST_OK; 651ffe59788SKan Liang } 652ffe59788SKan Liang 653945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 654945aea22SJiri Olsa { 6556cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 656945aea22SJiri Olsa 657945aea22SJiri Olsa /* config=10 */ 6586cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 659945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 660945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 661945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 662945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 663945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 6644f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 665945aea22SJiri Olsa 666945aea22SJiri Olsa /* config1 */ 6676cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 668945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 669945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 670945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 671945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 672945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6734f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 674945aea22SJiri Olsa 675945aea22SJiri Olsa /* config2=3 */ 6766cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 677945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 678945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 679945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 680945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 681945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 6824f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 683945aea22SJiri Olsa 684204e7c49SRob Herring /* config3=4 */ 685204e7c49SRob Herring term = list_entry(term->list.next, struct parse_events_term, list); 686204e7c49SRob Herring TEST_ASSERT_VAL("wrong type term", 687204e7c49SRob Herring term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); 688204e7c49SRob Herring TEST_ASSERT_VAL("wrong type val", 689204e7c49SRob Herring term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 690204e7c49SRob Herring TEST_ASSERT_VAL("wrong val", term->val.num == 4); 691204e7c49SRob Herring TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); 692204e7c49SRob Herring 693945aea22SJiri Olsa /* umask=1*/ 6946cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 695945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 696945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 697945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 698945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 699945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 700945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 701945aea22SJiri Olsa 7024929e95aSJiri Olsa /* 7034929e95aSJiri Olsa * read 7044929e95aSJiri Olsa * 7054929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 7064929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 7074929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 7084929e95aSJiri Olsa */ 7094929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 7104929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 71170c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 7124929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 71370c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 71470c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "read")); 71570c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 7164929e95aSJiri Olsa 7174929e95aSJiri Olsa /* 7184929e95aSJiri Olsa * r0xead 7194929e95aSJiri Olsa * 7204929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 7214929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 7224929e95aSJiri Olsa */ 7234929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 7244929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 72570c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 7264929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 72770c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 72870c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead")); 72970c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 7307741e03eSIan Rogers return TEST_OK; 731945aea22SJiri Olsa } 732945aea22SJiri Olsa 73363503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 734945aea22SJiri Olsa { 73532dcd021SJiri Olsa struct evsel *evsel, *leader; 736945aea22SJiri Olsa 7376484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 7389d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 739945aea22SJiri Olsa 740945aea22SJiri Olsa /* instructions:k */ 741515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7439854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 7441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 750c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7515643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7522bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 753a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 754945aea22SJiri Olsa 755945aea22SJiri Olsa /* cycles:upp */ 756e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7589854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 7591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 762945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 766fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7672bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 768a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 769945aea22SJiri Olsa 7707741e03eSIan Rogers return TEST_OK; 771945aea22SJiri Olsa } 772945aea22SJiri Olsa 77363503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 774945aea22SJiri Olsa { 77532dcd021SJiri Olsa struct evsel *evsel, *leader; 776945aea22SJiri Olsa 7776484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7789d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 779945aea22SJiri Olsa 780945aea22SJiri Olsa /* faults + :ku modifier */ 781515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 7839854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 7841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 787943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 790c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7915643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7922bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 793a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 794945aea22SJiri Olsa 795945aea22SJiri Olsa /* cache-references + :u modifier */ 796e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7989854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)); 7991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 805fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8062bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 807a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 808945aea22SJiri Olsa 809945aea22SJiri Olsa /* cycles:k */ 810e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8129854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 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)); 820a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 821945aea22SJiri Olsa 8227741e03eSIan Rogers return TEST_OK; 823945aea22SJiri Olsa } 824945aea22SJiri Olsa 825378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 82663503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 827945aea22SJiri Olsa { 82832dcd021SJiri Olsa struct evsel *evsel, *leader; 829945aea22SJiri Olsa 8306484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 8319d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 832945aea22SJiri Olsa 83343f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 834515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 836945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 8371fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 8381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 8391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 845c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 846945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 847945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 8485643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8492bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 850a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 851945aea22SJiri Olsa 852945aea22SJiri Olsa /* group1 cycles:kppp */ 853e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8559854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 859945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 863fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 864945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8652bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 866a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 867945aea22SJiri Olsa 868945aea22SJiri Olsa /* group2 cycles + G modifier */ 869e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8719854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 878c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 879945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 880945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8815643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8822bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 883a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 884945aea22SJiri Olsa 885945aea22SJiri Olsa /* group2 1:3 + G modifier */ 886e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8889854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 3)); 8891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 895fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8962bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 897a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 898945aea22SJiri Olsa 899945aea22SJiri Olsa /* instructions:u */ 900e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9029854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 9031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 9051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 906943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 909c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 910a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 911945aea22SJiri Olsa 9127741e03eSIan Rogers return TEST_OK; 913945aea22SJiri Olsa } 914378ef0f5SIan Rogers #endif 915945aea22SJiri Olsa 91663503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 917945aea22SJiri Olsa { 91832dcd021SJiri Olsa struct evsel *evsel, *leader; 919945aea22SJiri Olsa 9206484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 9219d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 922945aea22SJiri Olsa 923945aea22SJiri Olsa /* cycles:u + p */ 924515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9269854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 9291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 930945aea22SJiri Olsa /* use of precise requires exclude_guest */ 9311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 934945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 935c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9365643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9372bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 938a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 939945aea22SJiri Olsa 940945aea22SJiri Olsa /* instructions:kp + p */ 941e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9439854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 9441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 9451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 947945aea22SJiri Olsa /* use of precise requires exclude_guest */ 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 == 2); 951fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9522bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 953a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 954945aea22SJiri Olsa 9557741e03eSIan Rogers return TEST_OK; 956945aea22SJiri Olsa } 957945aea22SJiri Olsa 95863503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 959945aea22SJiri Olsa { 96032dcd021SJiri Olsa struct evsel *evsel, *leader; 961945aea22SJiri Olsa 9626484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9639d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 964945aea22SJiri Olsa 965945aea22SJiri Olsa /* cycles + G */ 966515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9689854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 975945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 976c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9775643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9782bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 979a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 980945aea22SJiri Olsa 981945aea22SJiri Olsa /* instructions + G */ 982e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9849854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 9851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 991fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9922bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 993a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 994945aea22SJiri Olsa 995945aea22SJiri Olsa /* cycles:G */ 996e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 9971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9989854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 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); 1005945aea22SJiri 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); 1009a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1010945aea22SJiri Olsa 1011945aea22SJiri Olsa /* instructions:G */ 1012e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10149854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 10151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1021fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10222bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1023945aea22SJiri Olsa 1024945aea22SJiri Olsa /* cycles */ 1025e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10279854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1034c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 1035945aea22SJiri Olsa 10367741e03eSIan Rogers return TEST_OK; 1037945aea22SJiri Olsa } 1038945aea22SJiri Olsa 103963503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 10405a30a99fSJiri Olsa { 104132dcd021SJiri Olsa struct evsel *evsel, *leader; 10425a30a99fSJiri Olsa 10436484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10449d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10455a30a99fSJiri Olsa 10465a30a99fSJiri Olsa /* cycles + :H group modifier */ 1047515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10499854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10565a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1057c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10585643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10592bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10605a30a99fSJiri Olsa 10615a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1062e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10649854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 10651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1071fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10722bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10735a30a99fSJiri Olsa 10747741e03eSIan Rogers return TEST_OK; 10755a30a99fSJiri Olsa } 10765a30a99fSJiri Olsa 107763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10785a30a99fSJiri Olsa { 107932dcd021SJiri Olsa struct evsel *evsel, *leader; 10805a30a99fSJiri Olsa 10816484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10829d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10835a30a99fSJiri Olsa 10845a30a99fSJiri Olsa /* cycles + :G group modifier */ 1085515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10879854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10945a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1095c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10965643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10972bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10985a30a99fSJiri Olsa 10995a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1100e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11029854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1109fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11102bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11115a30a99fSJiri Olsa 11127741e03eSIan Rogers return TEST_OK; 11135a30a99fSJiri Olsa } 11145a30a99fSJiri Olsa 111563503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 11165a30a99fSJiri Olsa { 111732dcd021SJiri Olsa struct evsel *evsel, *leader; 11185a30a99fSJiri Olsa 11196484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11209d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 11215a30a99fSJiri Olsa 11225a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1123515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11259854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11325a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1133c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11345643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11352bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11365a30a99fSJiri Olsa 11375a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1138e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11409854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1147fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11482bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11495a30a99fSJiri Olsa 11507741e03eSIan Rogers return TEST_OK; 11515a30a99fSJiri Olsa } 11525a30a99fSJiri Olsa 115363503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11545a30a99fSJiri Olsa { 115532dcd021SJiri Olsa struct evsel *evsel, *leader; 11565a30a99fSJiri Olsa 11576484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11589d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 11595a30a99fSJiri Olsa 11605a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1161515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11639854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11705a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1171c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11725643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11732bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11745a30a99fSJiri Olsa 11755a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1176e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11789854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1185fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11862bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11875a30a99fSJiri Olsa 11887741e03eSIan Rogers return TEST_OK; 11895a30a99fSJiri Olsa } 11905a30a99fSJiri Olsa 119163503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1192a9f93f97SJiri Olsa { 119332dcd021SJiri Olsa struct evsel *evsel, *leader; 1194a9f93f97SJiri Olsa 11956484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1196a9f93f97SJiri Olsa 1197a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1198515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12009854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 12011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1207a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1208fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1209a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1210a9f93f97SJiri Olsa 1211a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1212e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12149854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1221fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1222a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1223a9f93f97SJiri Olsa 1224a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1225e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12279854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 12281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1234a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1235fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1236a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1237a9f93f97SJiri Olsa 12387741e03eSIan Rogers return TEST_OK; 1239a9f93f97SJiri Olsa } 1240a9f93f97SJiri Olsa 124163503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1242a9f93f97SJiri Olsa { 124332dcd021SJiri Olsa struct evsel *evsel, *leader; 1244a9f93f97SJiri Olsa 12456484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1246a9f93f97SJiri Olsa 1247a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1248515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12509854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 12511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1257a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1258fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1259a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1260a9f93f97SJiri Olsa 1261a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1262e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12649854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 12651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1271a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1272fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1273a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1274a9f93f97SJiri Olsa 12757741e03eSIan Rogers return TEST_OK; 1276a9f93f97SJiri Olsa } 1277a9f93f97SJiri Olsa 127863503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1279c9ee780fSMichael Ellerman { 1280515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1281c9ee780fSMichael Ellerman 12821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1287c9ee780fSMichael Ellerman 1288c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1289c9ee780fSMichael Ellerman } 1290c9ee780fSMichael Ellerman 129163503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1292c9ee780fSMichael Ellerman { 129332dcd021SJiri Olsa struct evsel *evsel, *leader; 1294c9ee780fSMichael Ellerman 12956484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1296c9ee780fSMichael Ellerman 1297c9ee780fSMichael Ellerman /* cycles - group leader */ 1298515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13009854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1301c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1302fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1304c9ee780fSMichael Ellerman 1305c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1306e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13089854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1310c9ee780fSMichael Ellerman 1311c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1312e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13139854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 13141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1315c9ee780fSMichael Ellerman 13167741e03eSIan Rogers return TEST_OK; 1317c9ee780fSMichael Ellerman } 1318c9ee780fSMichael Ellerman 13190997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 13200997a266SAndi Kleen { 13210997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 13220997a266SAndi Kleen 13230997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13240997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13250997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13260997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 13270997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13280997a266SAndi Kleen 13290997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 13300997a266SAndi Kleen } 13310997a266SAndi Kleen 13320997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 13330997a266SAndi Kleen { 13340997a266SAndi Kleen struct evsel *evsel, *leader; 13350997a266SAndi Kleen 13360997a266SAndi Kleen TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 13370997a266SAndi Kleen 13380997a266SAndi Kleen /* cycles - group leader */ 13390997a266SAndi Kleen evsel = leader = evlist__first(evlist); 13400997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13419854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 13420997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1343fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13440997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13450997a266SAndi Kleen 13460997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 13470997a266SAndi Kleen evsel = evsel__next(evsel); 13480997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13499854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13500997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13510997a266SAndi Kleen 13520997a266SAndi Kleen /* branch-misses - ditto */ 13530997a266SAndi Kleen evsel = evsel__next(evsel); 13549854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 13550997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13560997a266SAndi Kleen 13577741e03eSIan Rogers return TEST_OK; 13580997a266SAndi Kleen } 135963503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1360ec32398cSJacob Shin { 1361515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1362ec32398cSJacob Shin 13636484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13659854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1366ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13671fc632ceSJiri Olsa evsel->core.attr.bp_type); 1368ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13691fc632ceSJiri Olsa evsel->core.attr.bp_len); 1370ec32398cSJacob Shin 13717741e03eSIan Rogers return TEST_OK; 1372ec32398cSJacob Shin } 1373ec32398cSJacob Shin 137463503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1375ec32398cSJacob Shin { 1376515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1377ec32398cSJacob Shin 13786484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13809854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1381ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13821fc632ceSJiri Olsa evsel->core.attr.bp_type); 1383ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13841fc632ceSJiri Olsa evsel->core.attr.bp_len); 1385ec32398cSJacob Shin 13867741e03eSIan Rogers return TEST_OK; 1387ec32398cSJacob Shin } 1388ec32398cSJacob Shin 1389ec32398cSJacob Shin static int 139063503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1391ec32398cSJacob Shin { 1392515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1393ec32398cSJacob Shin 13941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1398ec32398cSJacob Shin 1399ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1400ec32398cSJacob Shin } 1401ec32398cSJacob Shin 140263503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1403ddd83c97SJiri Olsa { 1404515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1405ddd83c97SJiri Olsa 14066484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 14071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14089854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK)); 14097741e03eSIan Rogers return TEST_OK; 1410ddd83c97SJiri Olsa } 1411ddd83c97SJiri Olsa 141263503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 141310bf358aSWang Nan { 1414515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 141510bf358aSWang Nan 1416ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn")); 14177741e03eSIan Rogers return TEST_OK; 141810bf358aSWang Nan } 141910bf358aSWang Nan 142063503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 142110bf358aSWang Nan { 1422515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 142310bf358aSWang Nan 1424ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu")); 14257741e03eSIan Rogers return TEST_OK; 142610bf358aSWang Nan } 142710bf358aSWang Nan 142863503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 142910bf358aSWang Nan { 1430515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 143110bf358aSWang Nan 1432ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu")); 14337741e03eSIan Rogers return TEST_OK; 143410bf358aSWang Nan } 143510bf358aSWang Nan 143663503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 143743d0b978SWang Nan { 1438515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 143943d0b978SWang Nan 1440ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu")); 14414a7c4eafSIan Rogers return test__checkevent_genhw(evlist); 144243d0b978SWang Nan } 144310bf358aSWang Nan 14448f8c1068SIan Rogers static bool test__pmu_cpu_valid(void) 14458f8c1068SIan Rogers { 14468f8c1068SIan Rogers return !!perf_pmu__find("cpu"); 14478f8c1068SIan Rogers } 14488f8c1068SIan Rogers 144916ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 145016ddcfbfSJiri Olsa { 145116ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 145216ddcfbfSJiri Olsa } 145316ddcfbfSJiri Olsa 145463503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1455b3f58c8dSArnaldo Carvalho de Melo { 1456515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1457b3f58c8dSArnaldo Carvalho de Melo 1458ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u")); 14597741e03eSIan Rogers return TEST_OK; 1460b3f58c8dSArnaldo Carvalho de Melo } 1461b3f58c8dSArnaldo Carvalho de Melo 146263503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 146306dc5bf2SAlexey Budankov { 1464515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 146506dc5bf2SAlexey Budankov 14669854934bSIan Rogers TEST_ASSERT_VAL("wrong complex name parsing", 14679854934bSIan Rogers evsel__name_is(evsel, 14689854934bSIan Rogers "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks")); 14697741e03eSIan Rogers return TEST_OK; 147006dc5bf2SAlexey Budankov } 147106dc5bf2SAlexey Budankov 14723a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 14733a6c51e4SJiri Olsa { 14743a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 14753a6c51e4SJiri Olsa 14763a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14773a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14789854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 14797741e03eSIan Rogers return TEST_OK; 14803a6c51e4SJiri Olsa } 14813a6c51e4SJiri Olsa 148263503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1483714a92d8SJiri Olsa { 1484515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1485714a92d8SJiri Olsa 14861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14879854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 14881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14897741e03eSIan Rogers return TEST_OK; 1490714a92d8SJiri Olsa } 1491714a92d8SJiri Olsa 149263503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1493714a92d8SJiri Olsa { 1494515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1495714a92d8SJiri Olsa 14961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14979854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 14981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 14997741e03eSIan Rogers return TEST_OK; 1500714a92d8SJiri Olsa } 1501714a92d8SJiri Olsa 1502378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 150382ce75d9SJiri Olsa static int count_tracepoints(void) 150482ce75d9SJiri Olsa { 150582ce75d9SJiri Olsa struct dirent *events_ent; 150682ce75d9SJiri Olsa DIR *events_dir; 150782ce75d9SJiri Olsa int cnt = 0; 150882ce75d9SJiri Olsa 15097014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 151082ce75d9SJiri Olsa 151182ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 151282ce75d9SJiri Olsa 151382ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 151425a7d914SArnaldo Carvalho de Melo char *sys_path; 151582ce75d9SJiri Olsa struct dirent *sys_ent; 151682ce75d9SJiri Olsa DIR *sys_dir; 151782ce75d9SJiri Olsa 151882ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 151982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 152082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 152182ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 152282ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 152382ce75d9SJiri Olsa continue; 152482ce75d9SJiri Olsa 152525a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 152625a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 152782ce75d9SJiri Olsa 152882ce75d9SJiri Olsa sys_dir = opendir(sys_path); 152982ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 153082ce75d9SJiri Olsa 153182ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 153282ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 153382ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 153482ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 153582ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 153682ce75d9SJiri Olsa continue; 153782ce75d9SJiri Olsa 153882ce75d9SJiri Olsa cnt++; 153982ce75d9SJiri Olsa } 154082ce75d9SJiri Olsa 154182ce75d9SJiri Olsa closedir(sys_dir); 154225a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 154382ce75d9SJiri Olsa } 154482ce75d9SJiri Olsa 154582ce75d9SJiri Olsa closedir(events_dir); 154682ce75d9SJiri Olsa return cnt; 154782ce75d9SJiri Olsa } 154882ce75d9SJiri Olsa 154963503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 155082ce75d9SJiri Olsa { 155182ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 15526484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 155382ce75d9SJiri Olsa 155482ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 155582ce75d9SJiri Olsa } 1556378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 155782ce75d9SJiri Olsa 155823b6339bSArnaldo Carvalho de Melo struct evlist_test { 1559945aea22SJiri Olsa const char *name; 156016ddcfbfSJiri Olsa bool (*valid)(void); 156163503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1562945aea22SJiri Olsa }; 1563945aea22SJiri Olsa 15648252e791SIan Rogers static const struct evlist_test test__events[] = { 1565378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1566615b8f99SAlexander Yarygin { 156743f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1568945aea22SJiri Olsa .check = test__checkevent_tracepoint, 15698252e791SIan Rogers /* 0 */ 1570945aea22SJiri Olsa }, 1571615b8f99SAlexander Yarygin { 1572945aea22SJiri Olsa .name = "syscalls:*", 1573945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 15748252e791SIan Rogers /* 1 */ 1575945aea22SJiri Olsa }, 1576378ef0f5SIan Rogers #endif 1577615b8f99SAlexander Yarygin { 1578945aea22SJiri Olsa .name = "r1a", 1579945aea22SJiri Olsa .check = test__checkevent_raw, 15808252e791SIan Rogers /* 2 */ 1581945aea22SJiri Olsa }, 1582615b8f99SAlexander Yarygin { 1583945aea22SJiri Olsa .name = "1:1", 1584945aea22SJiri Olsa .check = test__checkevent_numeric, 15858252e791SIan Rogers /* 3 */ 1586945aea22SJiri Olsa }, 1587615b8f99SAlexander Yarygin { 1588945aea22SJiri Olsa .name = "instructions", 1589945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 15908252e791SIan Rogers /* 4 */ 1591945aea22SJiri Olsa }, 1592615b8f99SAlexander Yarygin { 1593945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1594945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 15958252e791SIan Rogers /* 5 */ 1596945aea22SJiri Olsa }, 1597615b8f99SAlexander Yarygin { 1598945aea22SJiri Olsa .name = "faults", 1599945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 16008252e791SIan Rogers /* 6 */ 1601945aea22SJiri Olsa }, 1602615b8f99SAlexander Yarygin { 1603945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1604945aea22SJiri Olsa .check = test__checkevent_genhw, 16058252e791SIan Rogers /* 7 */ 1606945aea22SJiri Olsa }, 1607615b8f99SAlexander Yarygin { 1608945aea22SJiri Olsa .name = "mem:0", 1609945aea22SJiri Olsa .check = test__checkevent_breakpoint, 16108252e791SIan Rogers /* 8 */ 1611945aea22SJiri Olsa }, 1612615b8f99SAlexander Yarygin { 1613945aea22SJiri Olsa .name = "mem:0:x", 1614945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 16158252e791SIan Rogers /* 9 */ 1616945aea22SJiri Olsa }, 1617615b8f99SAlexander Yarygin { 1618945aea22SJiri Olsa .name = "mem:0:r", 1619945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 16208252e791SIan Rogers /* 0 */ 1621945aea22SJiri Olsa }, 1622615b8f99SAlexander Yarygin { 1623945aea22SJiri Olsa .name = "mem:0:w", 1624945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 16258252e791SIan Rogers /* 1 */ 1626945aea22SJiri Olsa }, 1627378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1628615b8f99SAlexander Yarygin { 162943f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1630945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 16318252e791SIan Rogers /* 2 */ 1632945aea22SJiri Olsa }, 1633615b8f99SAlexander Yarygin { 1634945aea22SJiri Olsa .name = "syscalls:*:u", 1635945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 16368252e791SIan Rogers /* 3 */ 1637945aea22SJiri Olsa }, 1638378ef0f5SIan Rogers #endif 1639615b8f99SAlexander Yarygin { 1640945aea22SJiri Olsa .name = "r1a:kp", 1641945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 16428252e791SIan Rogers /* 4 */ 1643945aea22SJiri Olsa }, 1644615b8f99SAlexander Yarygin { 1645945aea22SJiri Olsa .name = "1:1:hp", 1646945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 16478252e791SIan Rogers /* 5 */ 1648945aea22SJiri Olsa }, 1649615b8f99SAlexander Yarygin { 1650945aea22SJiri Olsa .name = "instructions:h", 1651945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 16528252e791SIan Rogers /* 6 */ 1653945aea22SJiri Olsa }, 1654615b8f99SAlexander Yarygin { 1655945aea22SJiri Olsa .name = "faults:u", 1656945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 16578252e791SIan Rogers /* 7 */ 1658945aea22SJiri Olsa }, 1659615b8f99SAlexander Yarygin { 1660945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1661945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 16628252e791SIan Rogers /* 8 */ 1663945aea22SJiri Olsa }, 1664615b8f99SAlexander Yarygin { 1665945aea22SJiri Olsa .name = "mem:0:u", 1666945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 16678252e791SIan Rogers /* 9 */ 1668945aea22SJiri Olsa }, 1669615b8f99SAlexander Yarygin { 1670945aea22SJiri Olsa .name = "mem:0:x:k", 1671945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 16728252e791SIan Rogers /* 0 */ 1673945aea22SJiri Olsa }, 1674615b8f99SAlexander Yarygin { 1675945aea22SJiri Olsa .name = "mem:0:r:hp", 1676945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 16778252e791SIan Rogers /* 1 */ 1678945aea22SJiri Olsa }, 1679615b8f99SAlexander Yarygin { 1680945aea22SJiri Olsa .name = "mem:0:w:up", 1681945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 16828252e791SIan Rogers /* 2 */ 1683945aea22SJiri Olsa }, 1684378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1685615b8f99SAlexander Yarygin { 168643f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1687945aea22SJiri Olsa .check = test__checkevent_list, 16888252e791SIan Rogers /* 3 */ 1689945aea22SJiri Olsa }, 1690378ef0f5SIan Rogers #endif 1691615b8f99SAlexander Yarygin { 1692945aea22SJiri Olsa .name = "instructions:G", 1693945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 16948252e791SIan Rogers /* 4 */ 1695945aea22SJiri Olsa }, 1696615b8f99SAlexander Yarygin { 1697945aea22SJiri Olsa .name = "instructions:H", 1698945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 16998252e791SIan Rogers /* 5 */ 1700945aea22SJiri Olsa }, 1701615b8f99SAlexander Yarygin { 1702945aea22SJiri Olsa .name = "mem:0:rw", 1703945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 17048252e791SIan Rogers /* 6 */ 1705945aea22SJiri Olsa }, 1706615b8f99SAlexander Yarygin { 1707945aea22SJiri Olsa .name = "mem:0:rw:kp", 1708945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 17098252e791SIan Rogers /* 7 */ 1710945aea22SJiri Olsa }, 1711615b8f99SAlexander Yarygin { 1712945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1713945aea22SJiri Olsa .check = test__group1, 17148252e791SIan Rogers /* 8 */ 1715945aea22SJiri Olsa }, 1716615b8f99SAlexander Yarygin { 1717945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1718945aea22SJiri Olsa .check = test__group2, 17198252e791SIan Rogers /* 9 */ 1720945aea22SJiri Olsa }, 1721378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1722615b8f99SAlexander Yarygin { 172343f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1724945aea22SJiri Olsa .check = test__group3, 17258252e791SIan Rogers /* 0 */ 1726945aea22SJiri Olsa }, 1727378ef0f5SIan Rogers #endif 1728615b8f99SAlexander Yarygin { 1729945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1730945aea22SJiri Olsa .check = test__group4, 17318252e791SIan Rogers /* 1 */ 1732945aea22SJiri Olsa }, 1733615b8f99SAlexander Yarygin { 1734945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1735945aea22SJiri Olsa .check = test__group5, 17368252e791SIan Rogers /* 2 */ 1737945aea22SJiri Olsa }, 1738378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1739615b8f99SAlexander Yarygin { 174082ce75d9SJiri Olsa .name = "*:*", 174182ce75d9SJiri Olsa .check = test__all_tracepoints, 17428252e791SIan Rogers /* 3 */ 174382ce75d9SJiri Olsa }, 1744378ef0f5SIan Rogers #endif 1745615b8f99SAlexander Yarygin { 17465a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 17475a30a99fSJiri Olsa .check = test__group_gh1, 17488252e791SIan Rogers /* 4 */ 17495a30a99fSJiri Olsa }, 1750615b8f99SAlexander Yarygin { 17515a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 17525a30a99fSJiri Olsa .check = test__group_gh2, 17538252e791SIan Rogers /* 5 */ 17545a30a99fSJiri Olsa }, 1755615b8f99SAlexander Yarygin { 17565a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 17575a30a99fSJiri Olsa .check = test__group_gh3, 17588252e791SIan Rogers /* 6 */ 17595a30a99fSJiri Olsa }, 1760615b8f99SAlexander Yarygin { 17615a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 17625a30a99fSJiri Olsa .check = test__group_gh4, 17638252e791SIan Rogers /* 7 */ 17645a30a99fSJiri Olsa }, 1765615b8f99SAlexander Yarygin { 1766a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1767a9f93f97SJiri Olsa .check = test__leader_sample1, 17688252e791SIan Rogers /* 8 */ 1769a9f93f97SJiri Olsa }, 1770615b8f99SAlexander Yarygin { 1771a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1772a9f93f97SJiri Olsa .check = test__leader_sample2, 17738252e791SIan Rogers /* 9 */ 1774a9f93f97SJiri Olsa }, 1775615b8f99SAlexander Yarygin { 1776c9ee780fSMichael Ellerman .name = "instructions:uDp", 1777c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 17788252e791SIan Rogers /* 0 */ 1779c9ee780fSMichael Ellerman }, 1780615b8f99SAlexander Yarygin { 1781c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1782c9ee780fSMichael Ellerman .check = test__pinned_group, 17838252e791SIan Rogers /* 1 */ 1784c9ee780fSMichael Ellerman }, 1785ec32398cSJacob Shin { 1786ec32398cSJacob Shin .name = "mem:0/1", 1787ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 17888252e791SIan Rogers /* 2 */ 1789ec32398cSJacob Shin }, 1790ec32398cSJacob Shin { 1791ec32398cSJacob Shin .name = "mem:0/2:w", 1792ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 17938252e791SIan Rogers /* 3 */ 1794ec32398cSJacob Shin }, 1795ec32398cSJacob Shin { 1796ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1797ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 17988252e791SIan Rogers /* 4 */ 1799ec32398cSJacob Shin }, 1800378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 1801c0bc8c6dSAlexander Yarygin { 1802c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1803c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 180453fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 18058252e791SIan Rogers /* 0 */ 1806c0bc8c6dSAlexander Yarygin }, 1807c0bc8c6dSAlexander Yarygin #endif 1808a1e12da4SJiri Olsa { 1809a1e12da4SJiri Olsa .name = "instructions:I", 1810a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 18118252e791SIan Rogers /* 5 */ 1812a1e12da4SJiri Olsa }, 1813a1e12da4SJiri Olsa { 1814a1e12da4SJiri Olsa .name = "instructions:kIG", 1815a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 18168252e791SIan Rogers /* 6 */ 1817a1e12da4SJiri Olsa }, 1818ddd83c97SJiri Olsa { 1819ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1820ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 18218252e791SIan Rogers /* 7 */ 1822ddd83c97SJiri Olsa }, 182310bf358aSWang Nan { 182410bf358aSWang Nan .name = "instructions/name=insn/", 182510bf358aSWang Nan .check = test__checkevent_config_symbol, 18268252e791SIan Rogers /* 8 */ 182710bf358aSWang Nan }, 182810bf358aSWang Nan { 182910bf358aSWang Nan .name = "r1234/name=rawpmu/", 183010bf358aSWang Nan .check = test__checkevent_config_raw, 18318252e791SIan Rogers /* 9 */ 183210bf358aSWang Nan }, 183310bf358aSWang Nan { 183410bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 183510bf358aSWang Nan .check = test__checkevent_config_num, 18368252e791SIan Rogers /* 0 */ 183710bf358aSWang Nan }, 183843d0b978SWang Nan { 183943d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 184043d0b978SWang Nan .check = test__checkevent_config_cache, 18418252e791SIan Rogers /* 1 */ 184243d0b978SWang Nan }, 1843b3f58c8dSArnaldo Carvalho de Melo { 1844b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 184516ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1846b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 18478252e791SIan Rogers /* 2 */ 1848b3f58c8dSArnaldo Carvalho de Melo }, 184906dc5bf2SAlexey Budankov { 185006dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 185106dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 18528252e791SIan Rogers /* 3 */ 1853714a92d8SJiri Olsa }, 1854714a92d8SJiri Olsa { 1855714a92d8SJiri Olsa .name = "cycles//u", 1856714a92d8SJiri Olsa .check = test__sym_event_slash, 18578252e791SIan Rogers /* 4 */ 1858714a92d8SJiri Olsa }, 1859714a92d8SJiri Olsa { 1860714a92d8SJiri Olsa .name = "cycles:k", 1861714a92d8SJiri Olsa .check = test__sym_event_dc, 18628252e791SIan Rogers /* 5 */ 18630997a266SAndi Kleen }, 18640997a266SAndi Kleen { 18650997a266SAndi Kleen .name = "instructions:uep", 18660997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 18678252e791SIan Rogers /* 6 */ 18680997a266SAndi Kleen }, 18690997a266SAndi Kleen { 18700997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 18710997a266SAndi Kleen .check = test__exclusive_group, 18728252e791SIan Rogers /* 7 */ 18730997a266SAndi Kleen }, 1874945aea22SJiri Olsa }; 1875945aea22SJiri Olsa 18768252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 1877615b8f99SAlexander Yarygin { 1878945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 18798f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 1880945aea22SJiri Olsa .check = test__checkevent_pmu, 18818252e791SIan Rogers /* 0 */ 1882945aea22SJiri Olsa }, 1883615b8f99SAlexander Yarygin { 1884945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 18858f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 1886945aea22SJiri Olsa .check = test__checkevent_pmu_name, 18878252e791SIan Rogers /* 1 */ 1888945aea22SJiri Olsa }, 188971ef150eSKan Liang { 189071ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 18918f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 189271ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 18938252e791SIan Rogers /* 2 */ 189471ef150eSKan Liang }, 189506dc5bf2SAlexey Budankov { 1896a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 18978f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 189806dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 18998252e791SIan Rogers /* 3 */ 19003a6c51e4SJiri Olsa }, 19013a6c51e4SJiri Olsa { 19023a6c51e4SJiri Olsa .name = "software/r1a/", 19033a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 19048252e791SIan Rogers /* 4 */ 19053a6c51e4SJiri Olsa }, 1906c33cdf54SJiri Olsa { 1907c33cdf54SJiri Olsa .name = "software/r0x1a/", 1908c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 19098252e791SIan Rogers /* 5 */ 1910c33cdf54SJiri Olsa }, 19116fd1e519SIan Rogers { 19126fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/", 19136fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 19146fd1e519SIan Rogers .check = test__checkevent_genhw, 19156fd1e519SIan Rogers /* 6 */ 19166fd1e519SIan Rogers }, 19176fd1e519SIan Rogers { 19186fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/kp", 19196fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 19206fd1e519SIan Rogers .check = test__checkevent_genhw_modifier, 19216fd1e519SIan Rogers /* 7 */ 19226fd1e519SIan Rogers }, 19236fd1e519SIan Rogers { 19246fd1e519SIan Rogers .name = "cpu/L1-dcache-misses,name=cachepmu/", 19256fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 19266fd1e519SIan Rogers .check = test__checkevent_config_cache, 19276fd1e519SIan Rogers /* 8 */ 19286fd1e519SIan Rogers }, 1929*5ea8f2ccSIan Rogers { 1930*5ea8f2ccSIan Rogers .name = "cpu/instructions/", 1931*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1932*5ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name, 1933*5ea8f2ccSIan Rogers /* 9 */ 1934*5ea8f2ccSIan Rogers }, 1935*5ea8f2ccSIan Rogers { 1936*5ea8f2ccSIan Rogers .name = "cpu/cycles,period=100000,config2/", 1937*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1938*5ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_config, 1939*5ea8f2ccSIan Rogers /* 0 */ 1940*5ea8f2ccSIan Rogers }, 1941*5ea8f2ccSIan Rogers { 1942*5ea8f2ccSIan Rogers .name = "cpu/instructions/h", 1943*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1944*5ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_modifier, 1945*5ea8f2ccSIan Rogers /* 1 */ 1946*5ea8f2ccSIan Rogers }, 1947*5ea8f2ccSIan Rogers { 1948*5ea8f2ccSIan Rogers .name = "cpu/instructions/G", 1949*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1950*5ea8f2ccSIan Rogers .check = test__checkevent_exclude_host_modifier, 1951*5ea8f2ccSIan Rogers /* 2 */ 1952*5ea8f2ccSIan Rogers }, 1953*5ea8f2ccSIan Rogers { 1954*5ea8f2ccSIan Rogers .name = "cpu/instructions/H", 1955*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1956*5ea8f2ccSIan Rogers .check = test__checkevent_exclude_guest_modifier, 1957*5ea8f2ccSIan Rogers /* 3 */ 1958*5ea8f2ccSIan Rogers }, 1959*5ea8f2ccSIan Rogers { 1960*5ea8f2ccSIan Rogers .name = "{cpu/instructions/k,cpu/cycles/upp}", 1961*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1962*5ea8f2ccSIan Rogers .check = test__group1, 1963*5ea8f2ccSIan Rogers /* 4 */ 1964*5ea8f2ccSIan Rogers }, 1965*5ea8f2ccSIan Rogers { 1966*5ea8f2ccSIan Rogers .name = "{cpu/cycles/u,cpu/instructions/kp}:p", 1967*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1968*5ea8f2ccSIan Rogers .check = test__group4, 1969*5ea8f2ccSIan Rogers /* 5 */ 1970*5ea8f2ccSIan Rogers }, 1971*5ea8f2ccSIan Rogers { 1972*5ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/G}:H", 1973*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1974*5ea8f2ccSIan Rogers .check = test__group_gh1, 1975*5ea8f2ccSIan Rogers /* 6 */ 1976*5ea8f2ccSIan Rogers }, 1977*5ea8f2ccSIan Rogers { 1978*5ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/H}:G", 1979*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1980*5ea8f2ccSIan Rogers .check = test__group_gh2, 1981*5ea8f2ccSIan Rogers /* 7 */ 1982*5ea8f2ccSIan Rogers }, 1983*5ea8f2ccSIan Rogers { 1984*5ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:u", 1985*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1986*5ea8f2ccSIan Rogers .check = test__group_gh3, 1987*5ea8f2ccSIan Rogers /* 8 */ 1988*5ea8f2ccSIan Rogers }, 1989*5ea8f2ccSIan Rogers { 1990*5ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:uG", 1991*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1992*5ea8f2ccSIan Rogers .check = test__group_gh4, 1993*5ea8f2ccSIan Rogers /* 9 */ 1994*5ea8f2ccSIan Rogers }, 1995*5ea8f2ccSIan Rogers { 1996*5ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S", 1997*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 1998*5ea8f2ccSIan Rogers .check = test__leader_sample1, 1999*5ea8f2ccSIan Rogers /* 0 */ 2000*5ea8f2ccSIan Rogers }, 2001*5ea8f2ccSIan Rogers { 2002*5ea8f2ccSIan Rogers .name = "{cpu/instructions/,cpu/branch-misses/}:Su", 2003*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2004*5ea8f2ccSIan Rogers .check = test__leader_sample2, 2005*5ea8f2ccSIan Rogers /* 1 */ 2006*5ea8f2ccSIan Rogers }, 2007*5ea8f2ccSIan Rogers { 2008*5ea8f2ccSIan Rogers .name = "cpu/instructions/uDp", 2009*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2010*5ea8f2ccSIan Rogers .check = test__checkevent_pinned_modifier, 2011*5ea8f2ccSIan Rogers /* 2 */ 2012*5ea8f2ccSIan Rogers }, 2013*5ea8f2ccSIan Rogers { 2014*5ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D", 2015*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2016*5ea8f2ccSIan Rogers .check = test__pinned_group, 2017*5ea8f2ccSIan Rogers /* 3 */ 2018*5ea8f2ccSIan Rogers }, 2019*5ea8f2ccSIan Rogers { 2020*5ea8f2ccSIan Rogers .name = "cpu/instructions/I", 2021*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2022*5ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier, 2023*5ea8f2ccSIan Rogers /* 4 */ 2024*5ea8f2ccSIan Rogers }, 2025*5ea8f2ccSIan Rogers { 2026*5ea8f2ccSIan Rogers .name = "cpu/instructions/kIG", 2027*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2028*5ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier_1, 2029*5ea8f2ccSIan Rogers /* 5 */ 2030*5ea8f2ccSIan Rogers }, 2031*5ea8f2ccSIan Rogers { 2032*5ea8f2ccSIan Rogers .name = "cpu/cycles/u", 2033*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2034*5ea8f2ccSIan Rogers .check = test__sym_event_slash, 2035*5ea8f2ccSIan Rogers /* 6 */ 2036*5ea8f2ccSIan Rogers }, 2037*5ea8f2ccSIan Rogers { 2038*5ea8f2ccSIan Rogers .name = "cpu/cycles/k", 2039*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2040*5ea8f2ccSIan Rogers .check = test__sym_event_dc, 2041*5ea8f2ccSIan Rogers /* 7 */ 2042*5ea8f2ccSIan Rogers }, 2043*5ea8f2ccSIan Rogers { 2044*5ea8f2ccSIan Rogers .name = "cpu/instructions/uep", 2045*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2046*5ea8f2ccSIan Rogers .check = test__checkevent_exclusive_modifier, 2047*5ea8f2ccSIan Rogers /* 8 */ 2048*5ea8f2ccSIan Rogers }, 2049*5ea8f2ccSIan Rogers { 2050*5ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e", 2051*5ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 2052*5ea8f2ccSIan Rogers .check = test__exclusive_group, 2053*5ea8f2ccSIan Rogers /* 9 */ 2054*5ea8f2ccSIan Rogers }, 2055945aea22SJiri Olsa }; 2056945aea22SJiri Olsa 205723b6339bSArnaldo Carvalho de Melo struct terms_test { 2058945aea22SJiri Olsa const char *str; 2059945aea22SJiri Olsa int (*check)(struct list_head *terms); 2060945aea22SJiri Olsa }; 2061945aea22SJiri Olsa 2062b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2063945aea22SJiri Olsa [0] = { 2064204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 2065945aea22SJiri Olsa .check = test__checkterms_simple, 2066945aea22SJiri Olsa }, 2067945aea22SJiri Olsa }; 2068945aea22SJiri Olsa 20698252e791SIan Rogers static int test_event(const struct evlist_test *e) 2070945aea22SJiri Olsa { 2071a910e466SIan Rogers struct parse_events_error err; 207263503dbaSJiri Olsa struct evlist *evlist; 2073945aea22SJiri Olsa int ret; 2074945aea22SJiri Olsa 207516ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 20767741e03eSIan Rogers pr_debug("... SKIP\n"); 20777741e03eSIan Rogers return TEST_OK; 207816ddcfbfSJiri Olsa } 207916ddcfbfSJiri Olsa 20800f98b11cSJiri Olsa evlist = evlist__new(); 20817741e03eSIan Rogers if (evlist == NULL) { 20827741e03eSIan Rogers pr_err("Failed allocation"); 20837741e03eSIan Rogers return TEST_FAIL; 20847741e03eSIan Rogers } 208507eafd4eSIan Rogers parse_events_error__init(&err); 2086933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2087945aea22SJiri Olsa if (ret) { 2088933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2089933ccf20SJiri Olsa e->name, ret, err.str); 20906c191289SIan Rogers parse_events_error__print(&err, e->name); 20917741e03eSIan Rogers ret = TEST_FAIL; 2092aefde50aSIan Rogers if (err.str && strstr(err.str, "can't access trace events")) 20937741e03eSIan Rogers ret = TEST_SKIP; 20942d4352c0SArnaldo Carvalho de Melo } else { 20952d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2096945aea22SJiri Olsa } 209707eafd4eSIan Rogers parse_events_error__exit(&err); 2098c12995a5SJiri Olsa evlist__delete(evlist); 2099945aea22SJiri Olsa 2100945aea22SJiri Olsa return ret; 2101945aea22SJiri Olsa } 2102945aea22SJiri Olsa 2103b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2104b4a7276cSJohn Garry { 2105b4a7276cSJohn Garry struct parse_events_error err; 2106b4a7276cSJohn Garry struct evlist *evlist; 2107b4a7276cSJohn Garry int ret; 2108b4a7276cSJohn Garry 2109b4a7276cSJohn Garry evlist = evlist__new(); 2110b4a7276cSJohn Garry if (!evlist) 2111b4a7276cSJohn Garry return -ENOMEM; 2112b4a7276cSJohn Garry 2113b4a7276cSJohn Garry parse_events_error__init(&err); 2114411ad22eSIan Rogers ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err, 2115411ad22eSIan Rogers &perf_pmu__fake, /*warn_if_reordered=*/true); 2116b4a7276cSJohn Garry if (ret) { 2117b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2118b4a7276cSJohn Garry str, ret, err.str); 2119b4a7276cSJohn Garry parse_events_error__print(&err, str); 2120b4a7276cSJohn Garry } 2121b4a7276cSJohn Garry 2122b4a7276cSJohn Garry parse_events_error__exit(&err); 2123b4a7276cSJohn Garry evlist__delete(evlist); 2124b4a7276cSJohn Garry 2125b4a7276cSJohn Garry return ret; 2126b4a7276cSJohn Garry } 2127b4a7276cSJohn Garry 21287741e03eSIan Rogers static int combine_test_results(int existing, int latest) 21297741e03eSIan Rogers { 21307741e03eSIan Rogers if (existing == TEST_FAIL) 21317741e03eSIan Rogers return TEST_FAIL; 21327741e03eSIan Rogers if (existing == TEST_SKIP) 21337741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 21347741e03eSIan Rogers return latest; 21357741e03eSIan Rogers } 21367741e03eSIan Rogers 21378252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2138945aea22SJiri Olsa { 21397741e03eSIan Rogers int ret = TEST_OK; 2140945aea22SJiri Olsa 21418252e791SIan Rogers for (int i = 0; i < cnt; i++) { 21428252e791SIan Rogers const struct evlist_test *e = &events[i]; 21437741e03eSIan Rogers int test_ret; 2144945aea22SJiri Olsa 21457741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 21467741e03eSIan Rogers test_ret = test_event(e); 21477741e03eSIan Rogers if (test_ret != TEST_OK) { 21487741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 21497741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 21507741e03eSIan Rogers } 2151945aea22SJiri Olsa } 2152945aea22SJiri Olsa 21537741e03eSIan Rogers return ret; 21547741e03eSIan Rogers } 21557741e03eSIan Rogers 21567741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21577741e03eSIan Rogers { 21587741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2159945aea22SJiri Olsa } 2160945aea22SJiri Olsa 2161b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2162945aea22SJiri Olsa { 2163c549aca5SDavid Ahern struct list_head terms; 2164945aea22SJiri Olsa int ret; 2165945aea22SJiri Olsa 2166c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2167945aea22SJiri Olsa 2168c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2169945aea22SJiri Olsa if (ret) { 2170945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2171945aea22SJiri Olsa t->str , ret); 2172945aea22SJiri Olsa return ret; 2173945aea22SJiri Olsa } 2174945aea22SJiri Olsa 2175c549aca5SDavid Ahern ret = t->check(&terms); 2176682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2177945aea22SJiri Olsa 2178945aea22SJiri Olsa return ret; 2179945aea22SJiri Olsa } 2180945aea22SJiri Olsa 2181b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2182945aea22SJiri Olsa { 2183945aea22SJiri Olsa int ret = 0; 2184945aea22SJiri Olsa 2185b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2186b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2187945aea22SJiri Olsa 2188945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2189945aea22SJiri Olsa ret = test_term(t); 2190945aea22SJiri Olsa if (ret) 2191945aea22SJiri Olsa break; 2192945aea22SJiri Olsa } 2193945aea22SJiri Olsa 2194945aea22SJiri Olsa return ret; 2195945aea22SJiri Olsa } 2196945aea22SJiri Olsa 21977741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21987741e03eSIan Rogers { 21997741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 22007741e03eSIan Rogers } 22017741e03eSIan Rogers 22027741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2203945aea22SJiri Olsa { 22045a52817eSIan Rogers struct perf_pmu *pmu; 22055a52817eSIan Rogers int ret = TEST_OK; 22065a52817eSIan Rogers 22075a52817eSIan Rogers if (list_empty(&pmus)) 22085a52817eSIan Rogers perf_pmu__scan(NULL); 22095a52817eSIan Rogers 22105a52817eSIan Rogers perf_pmus__for_each_pmu(pmu) { 2211945aea22SJiri Olsa struct stat st; 2212945aea22SJiri Olsa char path[PATH_MAX]; 2213945aea22SJiri Olsa struct dirent *ent; 2214945aea22SJiri Olsa DIR *dir; 22155a52817eSIan Rogers int err; 2216945aea22SJiri Olsa 22175a52817eSIan Rogers snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/", 22185a52817eSIan Rogers sysfs__mountpoint(), pmu->name); 22197741e03eSIan Rogers 22205a52817eSIan Rogers err = stat(path, &st); 22215a52817eSIan Rogers if (err) { 22225a52817eSIan Rogers pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path); 22235a52817eSIan Rogers continue; 2224945aea22SJiri Olsa } 2225945aea22SJiri Olsa 2226945aea22SJiri Olsa dir = opendir(path); 2227945aea22SJiri Olsa if (!dir) { 22287741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 22295a52817eSIan Rogers ret = combine_test_results(ret, TEST_SKIP); 22305a52817eSIan Rogers continue; 2231945aea22SJiri Olsa } 2232945aea22SJiri Olsa 22337741e03eSIan Rogers while ((ent = readdir(dir))) { 22348252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 22352e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 22367741e03eSIan Rogers int test_ret; 2237945aea22SJiri Olsa 223817a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 223917a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2240945aea22SJiri Olsa continue; 2241945aea22SJiri Olsa 22425a52817eSIan Rogers snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name); 2243945aea22SJiri Olsa 2244945aea22SJiri Olsa e.name = name; 2245945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2246945aea22SJiri Olsa 22477741e03eSIan Rogers test_ret = test_event(&e); 22487741e03eSIan Rogers if (test_ret != TEST_OK) { 22497741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22507741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22517741e03eSIan Rogers } 22525a52817eSIan Rogers 22535a52817eSIan Rogers if (!is_pmu_core(pmu->name)) 22545a52817eSIan Rogers continue; 22555a52817eSIan Rogers 2256146edff3SIan Rogers /* 2257146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2258146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2259146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2260146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2261146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2262146edff3SIan Rogers * isn't expected after this. As event names in the config 2263146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2264146edff3SIan Rogers * above. 2265146edff3SIan Rogers */ 2266146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2267146edff3SIan Rogers continue; 2268146edff3SIan Rogers 22695a52817eSIan Rogers snprintf(name, sizeof(name), "%s:u,%s/event=%s/u", 22705a52817eSIan Rogers ent->d_name, pmu->name, ent->d_name); 2271ffe59788SKan Liang e.name = name; 2272ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 22737741e03eSIan Rogers test_ret = test_event(&e); 22747741e03eSIan Rogers if (test_ret != TEST_OK) { 22757741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22767741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22777741e03eSIan Rogers } 2278945aea22SJiri Olsa } 2279945aea22SJiri Olsa 2280945aea22SJiri Olsa closedir(dir); 22815a52817eSIan Rogers } 2282945aea22SJiri Olsa return ret; 2283945aea22SJiri Olsa } 2284945aea22SJiri Olsa 22857741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 22867741e03eSIan Rogers { 22877741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 22887741e03eSIan Rogers } 22897741e03eSIan Rogers 2290c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2291c7a3828dSJin Yao { 2292c7a3828dSJin Yao char path[PATH_MAX]; 2293c7a3828dSJin Yao DIR *dir; 2294c7a3828dSJin Yao struct dirent *dent; 2295c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2296c7a3828dSJin Yao char buf[128]; 2297c7a3828dSJin Yao FILE *file; 2298c7a3828dSJin Yao 2299c7a3828dSJin Yao if (!sysfs) 2300c7a3828dSJin Yao return false; 2301c7a3828dSJin Yao 2302c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2303c7a3828dSJin Yao dir = opendir(path); 2304c7a3828dSJin Yao if (!dir) 2305c7a3828dSJin Yao return false; 2306c7a3828dSJin Yao 2307c7a3828dSJin Yao while ((dent = readdir(dir))) { 2308c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2309c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2310c7a3828dSJin Yao continue; 2311c7a3828dSJin Yao 2312c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2313c7a3828dSJin Yao sysfs, dent->d_name); 2314c7a3828dSJin Yao 2315c7a3828dSJin Yao if (!file_available(path)) 2316c7a3828dSJin Yao continue; 2317c7a3828dSJin Yao 2318c7a3828dSJin Yao file = fopen(path, "r"); 2319c7a3828dSJin Yao if (!file) 2320c7a3828dSJin Yao continue; 2321c7a3828dSJin Yao 2322c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2323c7a3828dSJin Yao fclose(file); 2324c7a3828dSJin Yao continue; 2325c7a3828dSJin Yao } 2326c7a3828dSJin Yao 2327c7a3828dSJin Yao /* Remove the last '\n' */ 2328c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2329c7a3828dSJin Yao 2330c7a3828dSJin Yao fclose(file); 2331c7a3828dSJin Yao *event = strdup(dent->d_name); 2332c7a3828dSJin Yao *alias = strdup(buf); 2333c7a3828dSJin Yao closedir(dir); 2334c7a3828dSJin Yao 2335c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2336c7a3828dSJin Yao free(*event); 2337c7a3828dSJin Yao free(*alias); 2338c7a3828dSJin Yao return false; 2339c7a3828dSJin Yao } 2340c7a3828dSJin Yao 2341c7a3828dSJin Yao return true; 2342c7a3828dSJin Yao } 2343c7a3828dSJin Yao 2344c7a3828dSJin Yao closedir(dir); 2345c7a3828dSJin Yao return false; 2346c7a3828dSJin Yao } 2347c7a3828dSJin Yao 2348c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2349c7a3828dSJin Yao { 2350c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2351c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2352c7a3828dSJin Yao 2353c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2354c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 23557741e03eSIan Rogers return TEST_OK; 2356c7a3828dSJin Yao } 2357c7a3828dSJin Yao 23587741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2359c7a3828dSJin Yao { 23608252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2361c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2362c7a3828dSJin Yao 2363c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2364c7a3828dSJin Yao event, alias); 2365c7a3828dSJin Yao 2366c7a3828dSJin Yao e.name = name; 2367c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2368c7a3828dSJin Yao return test_event(&e); 2369c7a3828dSJin Yao } 2370c7a3828dSJin Yao 23717741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23727741e03eSIan Rogers { 23737741e03eSIan Rogers char *event, *alias; 23747741e03eSIan Rogers int ret; 23757741e03eSIan Rogers 23767741e03eSIan Rogers if (!test_alias(&event, &alias)) 23777741e03eSIan Rogers return TEST_SKIP; 23787741e03eSIan Rogers 23797741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 23807741e03eSIan Rogers 23817741e03eSIan Rogers free(event); 23827741e03eSIan Rogers free(alias); 23837741e03eSIan Rogers return ret; 23847741e03eSIan Rogers } 23857741e03eSIan Rogers 23867741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 23877741e03eSIan Rogers int subtest __maybe_unused) 2388b4a7276cSJohn Garry { 2389b4a7276cSJohn Garry static const char events[][30] = { 2390b4a7276cSJohn Garry "event-hyphen", 2391b4a7276cSJohn Garry "event-two-hyph", 2392b4a7276cSJohn Garry }; 23937741e03eSIan Rogers int ret = TEST_OK; 2394b4a7276cSJohn Garry 23957741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 23967741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 23977741e03eSIan Rogers 23987741e03eSIan Rogers if (test_ret != TEST_OK) { 23997741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 24007741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2401b4a7276cSJohn Garry } 2402b4a7276cSJohn Garry } 2403b4a7276cSJohn Garry 2404b4a7276cSJohn Garry return ret; 2405b4a7276cSJohn Garry } 2406b4a7276cSJohn Garry 24077741e03eSIan Rogers static struct test_case tests__parse_events[] = { 24087741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 24097741e03eSIan Rogers events2, 24107741e03eSIan Rogers "permissions"), 24117741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 24127741e03eSIan Rogers pmu_events, 24137741e03eSIan Rogers "permissions"), 24147741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 24157741e03eSIan Rogers pmu_events2, 24167741e03eSIan Rogers "permissions"), 24177741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 24187741e03eSIan Rogers "no aliases in sysfs"), 24197741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 24207741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 24217741e03eSIan Rogers { .name = NULL, } 24227741e03eSIan Rogers }; 2423945aea22SJiri Olsa 24247741e03eSIan Rogers struct test_suite suite__parse_events = { 24257741e03eSIan Rogers .desc = "Parse event definition strings", 24267741e03eSIan Rogers .test_cases = tests__parse_events, 24277741e03eSIan Rogers }; 2428