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) { 111f24ebe80SIan Rogers struct perf_pmu *pmu = NULL; 112aefde50aSIan Rogers bool type_matched = false; 113aefde50aSIan Rogers 114aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 0x1a)); 1151eaf496eSIan Rogers while ((pmu = perf_pmus__scan(pmu)) != NULL) { 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 { 32727c9fcfcSIan Rogers struct perf_evsel *evsel; 328945aea22SJiri Olsa 32927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 33027c9fcfcSIan Rogers evlist->core.nr_entries == perf_pmus__num_core_pmus()); 331945aea22SJiri Olsa 33227c9fcfcSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 33327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 33427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 33527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 33627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 33727c9fcfcSIan Rogers } 338945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 339945aea22SJiri Olsa } 340945aea22SJiri Olsa 34163503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 342945aea22SJiri Olsa { 343aefde50aSIan Rogers struct perf_evsel *evsel; 344945aea22SJiri Olsa 345aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 346aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 347aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 348aefde50aSIan Rogers } 349945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 350945aea22SJiri Olsa } 351945aea22SJiri Olsa 35263503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 353945aea22SJiri Olsa { 354aefde50aSIan Rogers struct perf_evsel *evsel; 355945aea22SJiri Olsa 356aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 357aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 358aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 359aefde50aSIan Rogers } 360945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 361945aea22SJiri Olsa } 362945aea22SJiri Olsa 36363503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 364945aea22SJiri Olsa { 365515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 366945aea22SJiri Olsa 3671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 371945aea22SJiri Olsa 372945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 373945aea22SJiri Olsa } 374945aea22SJiri Olsa 37563503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 376945aea22SJiri Olsa { 377aefde50aSIan Rogers struct perf_evsel *evsel; 378945aea22SJiri Olsa 379aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 380aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 381aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 382aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 383aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 384aefde50aSIan Rogers } 385945aea22SJiri Olsa return test__checkevent_genhw(evlist); 386945aea22SJiri Olsa } 387945aea22SJiri Olsa 38863503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 389a1e12da4SJiri Olsa { 390515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 391a1e12da4SJiri Olsa 3921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 399a1e12da4SJiri Olsa 400a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 401a1e12da4SJiri Olsa } 402a1e12da4SJiri Olsa 40363503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 404a1e12da4SJiri Olsa { 405515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 406a1e12da4SJiri Olsa 4071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 4081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 4091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 4101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 414a1e12da4SJiri Olsa 415a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 416a1e12da4SJiri Olsa } 417a1e12da4SJiri Olsa 41863503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 419945aea22SJiri Olsa { 420515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 421945aea22SJiri Olsa 422945aea22SJiri Olsa 4231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 427945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4288ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 429945aea22SJiri Olsa 430945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 431945aea22SJiri Olsa } 432945aea22SJiri Olsa 43363503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 434945aea22SJiri Olsa { 435515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 436945aea22SJiri Olsa 4371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 441945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4428ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 443945aea22SJiri Olsa 444945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 445945aea22SJiri Olsa } 446945aea22SJiri Olsa 44763503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 448945aea22SJiri Olsa { 449515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 450945aea22SJiri Olsa 4511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 455945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4568ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 457945aea22SJiri Olsa 458945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 459945aea22SJiri Olsa } 460945aea22SJiri Olsa 46163503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 462945aea22SJiri Olsa { 463515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 464945aea22SJiri Olsa 4651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 469945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4708ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 471945aea22SJiri Olsa 472945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 473945aea22SJiri Olsa } 474945aea22SJiri Olsa 47563503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 476945aea22SJiri Olsa { 477515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 478945aea22SJiri Olsa 4791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 483945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4848ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 485945aea22SJiri Olsa 486945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 487945aea22SJiri Olsa } 488945aea22SJiri Olsa 489*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_modifier_name(struct evlist *evlist) 490*f0617f52SAdrian Hunter { 491*f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 492*f0617f52SAdrian Hunter 493*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 494*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 495*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 496*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 497*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 498*f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 499*f0617f52SAdrian Hunter 500*f0617f52SAdrian Hunter return test__checkevent_breakpoint(evlist); 501*f0617f52SAdrian Hunter } 502*f0617f52SAdrian Hunter 503*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_x_modifier_name(struct evlist *evlist) 504*f0617f52SAdrian Hunter { 505*f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 506*f0617f52SAdrian Hunter 507*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 508*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 509*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 510*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 511*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 512*f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 513*f0617f52SAdrian Hunter 514*f0617f52SAdrian Hunter return test__checkevent_breakpoint_x(evlist); 515*f0617f52SAdrian Hunter } 516*f0617f52SAdrian Hunter 517*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_r_modifier_name(struct evlist *evlist) 518*f0617f52SAdrian Hunter { 519*f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 520*f0617f52SAdrian Hunter 521*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 522*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 523*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 524*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 525*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 526*f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 527*f0617f52SAdrian Hunter 528*f0617f52SAdrian Hunter return test__checkevent_breakpoint_r(evlist); 529*f0617f52SAdrian Hunter } 530*f0617f52SAdrian Hunter 531*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_w_modifier_name(struct evlist *evlist) 532*f0617f52SAdrian Hunter { 533*f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 534*f0617f52SAdrian Hunter 535*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 536*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 537*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 538*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 539*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 540*f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 541*f0617f52SAdrian Hunter 542*f0617f52SAdrian Hunter return test__checkevent_breakpoint_w(evlist); 543*f0617f52SAdrian Hunter } 544*f0617f52SAdrian Hunter 545*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_rw_modifier_name(struct evlist *evlist) 546*f0617f52SAdrian Hunter { 547*f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 548*f0617f52SAdrian Hunter 549*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 550*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 551*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 552*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 553*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 554*f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 555*f0617f52SAdrian Hunter 556*f0617f52SAdrian Hunter return test__checkevent_breakpoint_rw(evlist); 557*f0617f52SAdrian Hunter } 558*f0617f52SAdrian Hunter 559*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_2_events(struct evlist *evlist) 560*f0617f52SAdrian Hunter { 561*f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 562*f0617f52SAdrian Hunter 563*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 564*f0617f52SAdrian Hunter 565*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 566*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint1")); 567*f0617f52SAdrian Hunter 568*f0617f52SAdrian Hunter evsel = evsel__next(evsel); 569*f0617f52SAdrian Hunter 570*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 571*f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint2")); 572*f0617f52SAdrian Hunter 573*f0617f52SAdrian Hunter return TEST_OK; 574*f0617f52SAdrian Hunter } 575*f0617f52SAdrian Hunter 57663503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 577945aea22SJiri Olsa { 578945aea22SJiri Olsa 579515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 580945aea22SJiri Olsa 5816484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5839854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 10)); 5841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 5851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 586204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 587ee4c7588SJiri Olsa /* 58878e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 589ee4c7588SJiri Olsa * while this test executes only parse events method. 590ee4c7588SJiri Olsa */ 5911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 592945aea22SJiri Olsa 5937741e03eSIan Rogers return TEST_OK; 594945aea22SJiri Olsa } 595945aea22SJiri Olsa 596378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 59763503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 598945aea22SJiri Olsa { 599515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 600945aea22SJiri Olsa 601aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 3 <= evlist->core.nr_entries); 602945aea22SJiri Olsa 603945aea22SJiri Olsa /* r1 */ 604aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT != evsel->core.attr.type); 605aefde50aSIan Rogers while (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) { 6069854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 6081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 609204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 6101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 6111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !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); 614aefde50aSIan Rogers evsel = evsel__next(evsel); 615aefde50aSIan Rogers } 616945aea22SJiri Olsa 61743f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 6181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 619945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 6201fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 6211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 6221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 626945aea22SJiri Olsa 627945aea22SJiri Olsa /* 1:1:hp */ 628e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 6309854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 6331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 6341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 635945aea22SJiri Olsa 6367741e03eSIan Rogers return TEST_OK; 637945aea22SJiri Olsa } 638378ef0f5SIan Rogers #endif 639945aea22SJiri Olsa 64063503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 641945aea22SJiri Olsa { 642515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 643945aea22SJiri Olsa 644945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 6456484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6479854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6488ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 649945aea22SJiri Olsa 650945aea22SJiri Olsa /* cpu/config=2/u" */ 651e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6526484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6549854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 655945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 6568ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 657945aea22SJiri Olsa 6587741e03eSIan Rogers return TEST_OK; 659945aea22SJiri Olsa } 660945aea22SJiri Olsa 66163503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 66271ef150eSKan Liang { 663515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 66471ef150eSKan Liang 66571ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 6666484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6689854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 66971ef150eSKan Liang /* 67078e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 67171ef150eSKan Liang * while this test executes only parse events method. 67271ef150eSKan Liang */ 6731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 67427de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 6751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 67671ef150eSKan Liang 67771ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 678e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6809854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 68171ef150eSKan Liang /* 68278e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 68371ef150eSKan Liang * while this test executes only parse events method. 68471ef150eSKan Liang */ 6851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 68627de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 6871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 68871ef150eSKan Liang 6897741e03eSIan Rogers return TEST_OK; 69071ef150eSKan Liang } 69171ef150eSKan Liang 69263503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 693945aea22SJiri Olsa { 694515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 695945aea22SJiri Olsa 6966484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 6975a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 6985a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 699945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 7001fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 701945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 7021fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 7031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 7060997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 707945aea22SJiri Olsa 7087741e03eSIan Rogers return TEST_OK; 709945aea22SJiri Olsa } 710945aea22SJiri Olsa 711ffe59788SKan Liang 71263503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 713ffe59788SKan Liang { 71427c9fcfcSIan Rogers struct evsel *evsel = NULL; 715ffe59788SKan Liang 71627c9fcfcSIan Rogers /* 71727c9fcfcSIan Rogers * The wild card event will be opened at least once, but it may be 71827c9fcfcSIan Rogers * opened on each core PMU. 71927c9fcfcSIan Rogers */ 72027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries >= 2); 72127c9fcfcSIan Rogers for (int i = 0; i < evlist->core.nr_entries - 1; i++) { 72227c9fcfcSIan Rogers evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 723ffe59788SKan Liang /* pmu-event:u */ 724ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 7251fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 726ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 7271fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 7281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 7310997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 73227c9fcfcSIan Rogers } 733ffe59788SKan Liang /* cpu/pmu-event/u*/ 734e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 73527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong type", evsel__find_pmu(evsel)->is_core); 736ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 7371fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 738ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 7391fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 7401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 7430997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 744ffe59788SKan Liang 7457741e03eSIan Rogers return TEST_OK; 746ffe59788SKan Liang } 747ffe59788SKan Liang 748945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 749945aea22SJiri Olsa { 7506cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 751945aea22SJiri Olsa 752945aea22SJiri Olsa /* config=10 */ 7536cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 754945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 755945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 756945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 757945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 758945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 7594f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 760945aea22SJiri Olsa 761945aea22SJiri Olsa /* config1 */ 7626cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 763945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 764945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 765945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 766945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 767945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 7684f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 769945aea22SJiri Olsa 770945aea22SJiri Olsa /* config2=3 */ 7716cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 772945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 773945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 774945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 775945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 776945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 7774f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 778945aea22SJiri Olsa 779204e7c49SRob Herring /* config3=4 */ 780204e7c49SRob Herring term = list_entry(term->list.next, struct parse_events_term, list); 781204e7c49SRob Herring TEST_ASSERT_VAL("wrong type term", 782204e7c49SRob Herring term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); 783204e7c49SRob Herring TEST_ASSERT_VAL("wrong type val", 784204e7c49SRob Herring term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 785204e7c49SRob Herring TEST_ASSERT_VAL("wrong val", term->val.num == 4); 786204e7c49SRob Herring TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); 787204e7c49SRob Herring 788945aea22SJiri Olsa /* umask=1*/ 7896cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 790945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 791945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 792945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 793945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 794945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 795945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 796945aea22SJiri Olsa 7974929e95aSJiri Olsa /* 7984929e95aSJiri Olsa * read 7994929e95aSJiri Olsa * 8004929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 8014929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 8024929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 8034929e95aSJiri Olsa */ 8044929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 8054929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 80670c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 8074929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 80870c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 80970c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "read")); 81070c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 8114929e95aSJiri Olsa 8124929e95aSJiri Olsa /* 8134929e95aSJiri Olsa * r0xead 8144929e95aSJiri Olsa * 8154929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 8164929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 8174929e95aSJiri Olsa */ 8184929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 8194929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 82070c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 8214929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 82270c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 82370c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead")); 82470c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 8257741e03eSIan Rogers return TEST_OK; 826945aea22SJiri Olsa } 827945aea22SJiri Olsa 82863503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 829945aea22SJiri Olsa { 83032dcd021SJiri Olsa struct evsel *evsel, *leader; 831945aea22SJiri Olsa 83227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 83327c9fcfcSIan Rogers evlist->core.nr_entries == (perf_pmus__num_core_pmus() * 2)); 83427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 83527c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 836945aea22SJiri Olsa 83727c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 838945aea22SJiri Olsa /* instructions:k */ 83927c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 8401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8419854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 8421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 848c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8495643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8502bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 851a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 852945aea22SJiri Olsa 853945aea22SJiri Olsa /* cycles:upp */ 854e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8569854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 860945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 864fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 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); 86727c9fcfcSIan Rogers } 8687741e03eSIan Rogers return TEST_OK; 869945aea22SJiri Olsa } 870945aea22SJiri Olsa 87163503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 872945aea22SJiri Olsa { 87327c9fcfcSIan Rogers struct evsel *evsel, *leader = NULL; 874945aea22SJiri Olsa 87527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 87627c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus() + 1)); 87727c9fcfcSIan Rogers /* 87827c9fcfcSIan Rogers * TODO: Currently the software event won't be grouped with the hardware 87927c9fcfcSIan Rogers * event except for 1 PMU. 88027c9fcfcSIan Rogers */ 8819d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 882945aea22SJiri Olsa 88327c9fcfcSIan Rogers evlist__for_each_entry(evlist, evsel) { 88427c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_SOFTWARE) { 885945aea22SJiri Olsa /* faults + :ku modifier */ 88627c9fcfcSIan Rogers leader = evsel; 88727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong config", 88827c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 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); 892943b69acSJin Yao 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); 895c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8965643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8972bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 898a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 89927c9fcfcSIan Rogers continue; 90027c9fcfcSIan Rogers } 90127c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_HARDWARE && 90227c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)) { 903945aea22SJiri Olsa /* cache-references + :u modifier */ 9041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 9061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 9071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 91027c9fcfcSIan Rogers if (evsel__has_leader(evsel, leader)) 9112bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 912a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 91327c9fcfcSIan Rogers continue; 91427c9fcfcSIan Rogers } 915945aea22SJiri Olsa /* cycles:k */ 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9179854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 9191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 9211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 924c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 925a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 92627c9fcfcSIan Rogers } 9277741e03eSIan Rogers return TEST_OK; 928945aea22SJiri Olsa } 929945aea22SJiri Olsa 930378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 93163503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 932945aea22SJiri Olsa { 93327c9fcfcSIan Rogers struct evsel *evsel, *group1_leader = NULL, *group2_leader = NULL; 934945aea22SJiri Olsa 93527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 93627c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus() + 2)); 93727c9fcfcSIan Rogers /* 93827c9fcfcSIan Rogers * Currently the software event won't be grouped with the hardware event 93927c9fcfcSIan Rogers * except for 1 PMU. This means there are always just 2 groups 94027c9fcfcSIan Rogers * regardless of the number of core PMUs. 94127c9fcfcSIan Rogers */ 9429d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 943945aea22SJiri Olsa 94427c9fcfcSIan Rogers evlist__for_each_entry(evlist, evsel) { 94527c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT) { 94643f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 94727c9fcfcSIan Rogers group1_leader = evsel; 948945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 94927c9fcfcSIan Rogers evsel->core.attr.sample_type == PERF_TP_SAMPLE_TYPE); 9501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 9511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 957c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 95827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group name", !strcmp(evsel->group_name, "group1")); 9595643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9602bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 961a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 96227c9fcfcSIan Rogers continue; 96327c9fcfcSIan Rogers } 96427c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_HARDWARE && 96527c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)) { 96627c9fcfcSIan Rogers if (evsel->core.attr.exclude_user) { 967945aea22SJiri Olsa /* group1 cycles:kppp */ 96827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", 96927c9fcfcSIan Rogers evsel->core.attr.exclude_user); 97027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", 97127c9fcfcSIan Rogers !evsel->core.attr.exclude_kernel); 9721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 973945aea22SJiri Olsa /* use of precise requires exclude_guest */ 97427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", 97527c9fcfcSIan Rogers evsel->core.attr.exclude_guest); 97627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude host", 97727c9fcfcSIan Rogers !evsel->core.attr.exclude_host); 97827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", 97927c9fcfcSIan Rogers evsel->core.attr.precise_ip == 3); 98027c9fcfcSIan Rogers if (evsel__has_leader(evsel, group1_leader)) { 981945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 98227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group_idx", 98327c9fcfcSIan Rogers evsel__group_idx(evsel) == 1); 98427c9fcfcSIan Rogers } 985a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 98627c9fcfcSIan Rogers } else { 987945aea22SJiri Olsa /* group2 cycles + G modifier */ 98827c9fcfcSIan Rogers group2_leader = evsel; 98927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", 99027c9fcfcSIan Rogers !evsel->core.attr.exclude_kernel); 99127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", 99227c9fcfcSIan Rogers !evsel->core.attr.exclude_hv); 99327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", 99427c9fcfcSIan Rogers !evsel->core.attr.exclude_guest); 99527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude host", 99627c9fcfcSIan Rogers evsel->core.attr.exclude_host); 9971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 998c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 99927c9fcfcSIan Rogers if (evsel->core.nr_members == 2) { 100027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group_idx", 100127c9fcfcSIan Rogers evsel__group_idx(evsel) == 0); 100227c9fcfcSIan Rogers } 1003a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 100427c9fcfcSIan Rogers } 100527c9fcfcSIan Rogers continue; 100627c9fcfcSIan Rogers } 100727c9fcfcSIan Rogers if (evsel->core.attr.type == 1) { 1008945aea22SJiri Olsa /* group2 1:3 + G modifier */ 10099854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 3)); 10101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 101627c9fcfcSIan Rogers if (evsel__has_leader(evsel, group2_leader)) 10172bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1018a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 101927c9fcfcSIan Rogers continue; 102027c9fcfcSIan Rogers } 1021945aea22SJiri Olsa /* instructions:u */ 10221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10239854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 10241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1027943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1030c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 1031a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 103227c9fcfcSIan Rogers } 10337741e03eSIan Rogers return TEST_OK; 1034945aea22SJiri Olsa } 1035378ef0f5SIan Rogers #endif 1036945aea22SJiri Olsa 103763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 1038945aea22SJiri Olsa { 103932dcd021SJiri Olsa struct evsel *evsel, *leader; 1040945aea22SJiri Olsa 104127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 104227c9fcfcSIan Rogers evlist->core.nr_entries == (perf_pmus__num_core_pmus() * 2)); 104327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 104427c9fcfcSIan Rogers perf_pmus__num_core_pmus() == evlist__nr_groups(evlist)); 1045945aea22SJiri Olsa 104627c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1047945aea22SJiri Olsa /* cycles:u + p */ 104827c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 10491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10509854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1054945aea22SJiri Olsa /* use of precise requires exclude_guest */ 10551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 1058945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1059c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10605643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10612bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1062a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1063945aea22SJiri Olsa 1064945aea22SJiri Olsa /* instructions:kp + p */ 1065e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10679854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 10681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 10691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1071945aea22SJiri Olsa /* use of precise requires exclude_guest */ 10721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 1075fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10762bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1077a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 107827c9fcfcSIan Rogers } 10797741e03eSIan Rogers return TEST_OK; 1080945aea22SJiri Olsa } 1081945aea22SJiri Olsa 108263503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 1083945aea22SJiri Olsa { 108427c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1085945aea22SJiri Olsa 108627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 108727c9fcfcSIan Rogers evlist->core.nr_entries == (5 * perf_pmus__num_core_pmus())); 108827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 108927c9fcfcSIan Rogers evlist__nr_groups(evlist) == (2 * perf_pmus__num_core_pmus())); 1090945aea22SJiri Olsa 109127c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1092945aea22SJiri Olsa /* cycles + G */ 109327c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 10941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10959854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1102945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1103c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11045643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11052bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1106a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1107945aea22SJiri Olsa 1108945aea22SJiri Olsa /* instructions + G */ 1109e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11119854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 11121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1118fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11192bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1120a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 112127c9fcfcSIan Rogers } 112227c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1123945aea22SJiri Olsa /* cycles:G */ 1124e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 11251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11269854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1133945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1134c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11355643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11362bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1137a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1138945aea22SJiri Olsa 1139945aea22SJiri Olsa /* instructions:G */ 1140e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11429854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 11431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1149fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11502bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 115127c9fcfcSIan Rogers } 115227c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1153945aea22SJiri Olsa /* cycles */ 1154e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11569854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1163c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 116427c9fcfcSIan Rogers } 11657741e03eSIan Rogers return TEST_OK; 1166945aea22SJiri Olsa } 1167945aea22SJiri Olsa 116863503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 11695a30a99fSJiri Olsa { 117027c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 11715a30a99fSJiri Olsa 117227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 117327c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 117427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 117527c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 11765a30a99fSJiri Olsa 117727c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 11785a30a99fSJiri Olsa /* cycles + :H group modifier */ 117927c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 11801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11819854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11885a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1189c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11905643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11912bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11925a30a99fSJiri Olsa 11935a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1194e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11969854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1203fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12042bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 120527c9fcfcSIan Rogers } 12067741e03eSIan Rogers return TEST_OK; 12075a30a99fSJiri Olsa } 12085a30a99fSJiri Olsa 120963503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 12105a30a99fSJiri Olsa { 121127c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 12125a30a99fSJiri Olsa 121327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 121427c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 121527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 121627c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 12175a30a99fSJiri Olsa 121827c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 12195a30a99fSJiri Olsa /* cycles + :G group modifier */ 122027c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 12211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12229854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 12231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 12281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12295a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1230c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 12315643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 12322bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 12335a30a99fSJiri Olsa 12345a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1235e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12379854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1244fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 124627c9fcfcSIan Rogers } 12477741e03eSIan Rogers return TEST_OK; 12485a30a99fSJiri Olsa } 12495a30a99fSJiri Olsa 125063503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 12515a30a99fSJiri Olsa { 125227c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 12535a30a99fSJiri Olsa 125427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 125527c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 125627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 125727c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 12585a30a99fSJiri Olsa 125927c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 12605a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 126127c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 12621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12639854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 12641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 12691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12705a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1271c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 12725643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 12732bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 12745a30a99fSJiri Olsa 12755a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1276e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12789854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1285fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12862bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 128727c9fcfcSIan Rogers } 12887741e03eSIan Rogers return TEST_OK; 12895a30a99fSJiri Olsa } 12905a30a99fSJiri Olsa 129163503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 12925a30a99fSJiri Olsa { 129327c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 12945a30a99fSJiri Olsa 129527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 129627c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 129727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 129827c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 12995a30a99fSJiri Olsa 130027c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 13015a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 130227c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 13031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13049854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 13051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 13091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 13101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 13115a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1312c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 13135643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 13142bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 13155a30a99fSJiri Olsa 13165a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1317e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13199854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 13241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1326fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13272bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 132827c9fcfcSIan Rogers } 13297741e03eSIan Rogers return TEST_OK; 13305a30a99fSJiri Olsa } 13315a30a99fSJiri Olsa 133263503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1333a9f93f97SJiri Olsa { 133427c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1335a9f93f97SJiri Olsa 133627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 133727c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus())); 1338a9f93f97SJiri Olsa 133927c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1340a9f93f97SJiri Olsa /* cycles - sampling group leader */ 134127c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 13421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13439854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 13441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 13461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 13471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 13481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1350a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1351fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1352a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1353a9f93f97SJiri Olsa 1354a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1355e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13579854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 13601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 13611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 13621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1364fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1365a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1366a9f93f97SJiri Olsa 1367a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1368e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13709854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 13711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 13731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 13741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 13751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1377a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1378fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1379a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 138027c9fcfcSIan Rogers } 13817741e03eSIan Rogers return TEST_OK; 1382a9f93f97SJiri Olsa } 1383a9f93f97SJiri Olsa 138463503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1385a9f93f97SJiri Olsa { 138627c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1387a9f93f97SJiri Olsa 138827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 138927c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 1390a9f93f97SJiri Olsa 139127c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1392a9f93f97SJiri Olsa /* instructions - sampling group leader */ 139327c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 13941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13959854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 13961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 14001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 14011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1402a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1403fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1404a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1405a9f93f97SJiri Olsa 1406a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1407e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14099854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 14101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 14141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 14151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1416a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1417fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1418a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 141927c9fcfcSIan Rogers } 14207741e03eSIan Rogers return TEST_OK; 1421a9f93f97SJiri Olsa } 1422a9f93f97SJiri Olsa 142363503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1424c9ee780fSMichael Ellerman { 142527c9fcfcSIan Rogers struct evsel *evsel = NULL; 1426c9ee780fSMichael Ellerman 142727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 142827c9fcfcSIan Rogers evlist->core.nr_entries == perf_pmus__num_core_pmus()); 142927c9fcfcSIan Rogers 143027c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 143127c9fcfcSIan Rogers evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 14321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 14361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 143727c9fcfcSIan Rogers } 1438c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1439c9ee780fSMichael Ellerman } 1440c9ee780fSMichael Ellerman 144163503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1442c9ee780fSMichael Ellerman { 144327c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1444c9ee780fSMichael Ellerman 144527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 144627c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus())); 1447c9ee780fSMichael Ellerman 144827c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1449c9ee780fSMichael Ellerman /* cycles - group leader */ 145027c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 14511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14529854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1453c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1454fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 145527c9fcfcSIan Rogers /* TODO: The group modifier is not copied to the split group leader. */ 145627c9fcfcSIan Rogers if (perf_pmus__num_core_pmus() == 1) 14571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1458c9ee780fSMichael Ellerman 1459c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1460e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14629854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 14631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1464c9ee780fSMichael Ellerman 1465c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1466e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14679854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 14681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 146927c9fcfcSIan Rogers } 14707741e03eSIan Rogers return TEST_OK; 1471c9ee780fSMichael Ellerman } 1472c9ee780fSMichael Ellerman 14730997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 14740997a266SAndi Kleen { 14750997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 14760997a266SAndi Kleen 14770997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14780997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14790997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14800997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 14810997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 14820997a266SAndi Kleen 14830997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 14840997a266SAndi Kleen } 14850997a266SAndi Kleen 14860997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 14870997a266SAndi Kleen { 148827c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 14890997a266SAndi Kleen 149027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 149127c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus())); 14920997a266SAndi Kleen 149327c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 14940997a266SAndi Kleen /* cycles - group leader */ 149527c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 14960997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14979854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 14980997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1499fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 150027c9fcfcSIan Rogers /* TODO: The group modifier is not copied to the split group leader. */ 150127c9fcfcSIan Rogers if (perf_pmus__num_core_pmus() == 1) 15020997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 15030997a266SAndi Kleen 15040997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 15050997a266SAndi Kleen evsel = evsel__next(evsel); 15060997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 15079854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 15080997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 15090997a266SAndi Kleen 15100997a266SAndi Kleen /* branch-misses - ditto */ 15110997a266SAndi Kleen evsel = evsel__next(evsel); 15129854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 15130997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 151427c9fcfcSIan Rogers } 15157741e03eSIan Rogers return TEST_OK; 15160997a266SAndi Kleen } 151763503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1518ec32398cSJacob Shin { 1519515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1520ec32398cSJacob Shin 15216484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 15239854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1524ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 15251fc632ceSJiri Olsa evsel->core.attr.bp_type); 1526ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 15271fc632ceSJiri Olsa evsel->core.attr.bp_len); 1528ec32398cSJacob Shin 15297741e03eSIan Rogers return TEST_OK; 1530ec32398cSJacob Shin } 1531ec32398cSJacob Shin 153263503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1533ec32398cSJacob Shin { 1534515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1535ec32398cSJacob Shin 15366484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 15389854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1539ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 15401fc632ceSJiri Olsa evsel->core.attr.bp_type); 1541ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 15421fc632ceSJiri Olsa evsel->core.attr.bp_len); 1543ec32398cSJacob Shin 15447741e03eSIan Rogers return TEST_OK; 1545ec32398cSJacob Shin } 1546ec32398cSJacob Shin 1547ec32398cSJacob Shin static int 154863503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1549ec32398cSJacob Shin { 1550515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1551ec32398cSJacob Shin 15521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 15531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 15541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 15551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1556ec32398cSJacob Shin 1557ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1558ec32398cSJacob Shin } 1559ec32398cSJacob Shin 156063503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1561ddd83c97SJiri Olsa { 1562515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1563ddd83c97SJiri Olsa 156427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 156527c9fcfcSIan Rogers evlist->core.nr_entries == (1 + perf_pmus__num_core_pmus())); 15661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 15679854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK)); 15687741e03eSIan Rogers return TEST_OK; 1569ddd83c97SJiri Olsa } 1570ddd83c97SJiri Olsa 157163503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 157210bf358aSWang Nan { 1573515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 157410bf358aSWang Nan 1575ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn")); 15767741e03eSIan Rogers return TEST_OK; 157710bf358aSWang Nan } 157810bf358aSWang Nan 157963503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 158010bf358aSWang Nan { 1581515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 158210bf358aSWang Nan 1583ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu")); 15847741e03eSIan Rogers return TEST_OK; 158510bf358aSWang Nan } 158610bf358aSWang Nan 158763503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 158810bf358aSWang Nan { 1589515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 159010bf358aSWang Nan 1591ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu")); 15927741e03eSIan Rogers return TEST_OK; 159310bf358aSWang Nan } 159410bf358aSWang Nan 159563503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 159643d0b978SWang Nan { 1597515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 159843d0b978SWang Nan 1599ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu")); 16004a7c4eafSIan Rogers return test__checkevent_genhw(evlist); 160143d0b978SWang Nan } 160210bf358aSWang Nan 16038f8c1068SIan Rogers static bool test__pmu_cpu_valid(void) 16048f8c1068SIan Rogers { 16051eaf496eSIan Rogers return !!perf_pmus__find("cpu"); 16068f8c1068SIan Rogers } 16078f8c1068SIan Rogers 160816ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 160916ddcfbfSJiri Olsa { 16101eaf496eSIan Rogers return !!perf_pmus__find("intel_pt"); 161116ddcfbfSJiri Olsa } 161216ddcfbfSJiri Olsa 161363503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1614b3f58c8dSArnaldo Carvalho de Melo { 1615515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1616b3f58c8dSArnaldo Carvalho de Melo 1617ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u")); 16187741e03eSIan Rogers return TEST_OK; 1619b3f58c8dSArnaldo Carvalho de Melo } 1620b3f58c8dSArnaldo Carvalho de Melo 162163503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 162206dc5bf2SAlexey Budankov { 1623515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 162406dc5bf2SAlexey Budankov 16259854934bSIan Rogers TEST_ASSERT_VAL("wrong complex name parsing", 16269854934bSIan Rogers evsel__name_is(evsel, 16279854934bSIan Rogers "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks")); 16287741e03eSIan Rogers return TEST_OK; 162906dc5bf2SAlexey Budankov } 163006dc5bf2SAlexey Budankov 16313a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 16323a6c51e4SJiri Olsa { 16333a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 16343a6c51e4SJiri Olsa 16353a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16363a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 16379854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 16387741e03eSIan Rogers return TEST_OK; 16393a6c51e4SJiri Olsa } 16403a6c51e4SJiri Olsa 164163503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1642714a92d8SJiri Olsa { 1643515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1644714a92d8SJiri Olsa 16451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16469854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 16487741e03eSIan Rogers return TEST_OK; 1649714a92d8SJiri Olsa } 1650714a92d8SJiri Olsa 165163503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1652714a92d8SJiri Olsa { 1653515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1654714a92d8SJiri Olsa 16551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16569854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 16587741e03eSIan Rogers return TEST_OK; 1659714a92d8SJiri Olsa } 1660714a92d8SJiri Olsa 1661e831f3ccSIan Rogers static int test__term_equal_term(struct evlist *evlist) 1662e831f3ccSIan Rogers { 1663e831f3ccSIan Rogers struct evsel *evsel = evlist__first(evlist); 1664e831f3ccSIan Rogers 1665e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 1666e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1667e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "name") == 0); 1668e831f3ccSIan Rogers return TEST_OK; 1669e831f3ccSIan Rogers } 1670e831f3ccSIan Rogers 16712aadca4bSIan Rogers static int test__term_equal_legacy(struct evlist *evlist) 16722aadca4bSIan Rogers { 16732aadca4bSIan Rogers struct evsel *evsel = evlist__first(evlist); 16742aadca4bSIan Rogers 16752aadca4bSIan Rogers TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16762aadca4bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16772aadca4bSIan Rogers TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "l1d") == 0); 16782aadca4bSIan Rogers return TEST_OK; 16792aadca4bSIan Rogers } 16802aadca4bSIan Rogers 1681378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 168282ce75d9SJiri Olsa static int count_tracepoints(void) 168382ce75d9SJiri Olsa { 168482ce75d9SJiri Olsa struct dirent *events_ent; 168582ce75d9SJiri Olsa DIR *events_dir; 168682ce75d9SJiri Olsa int cnt = 0; 168782ce75d9SJiri Olsa 16887014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 168982ce75d9SJiri Olsa 169082ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 169182ce75d9SJiri Olsa 169282ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 169325a7d914SArnaldo Carvalho de Melo char *sys_path; 169482ce75d9SJiri Olsa struct dirent *sys_ent; 169582ce75d9SJiri Olsa DIR *sys_dir; 169682ce75d9SJiri Olsa 169782ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 169882ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 169982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 170082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 170182ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 170282ce75d9SJiri Olsa continue; 170382ce75d9SJiri Olsa 170425a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 170525a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 170682ce75d9SJiri Olsa 170782ce75d9SJiri Olsa sys_dir = opendir(sys_path); 170882ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 170982ce75d9SJiri Olsa 171082ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 171182ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 171282ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 171382ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 171482ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 171582ce75d9SJiri Olsa continue; 171682ce75d9SJiri Olsa 171782ce75d9SJiri Olsa cnt++; 171882ce75d9SJiri Olsa } 171982ce75d9SJiri Olsa 172082ce75d9SJiri Olsa closedir(sys_dir); 172125a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 172282ce75d9SJiri Olsa } 172382ce75d9SJiri Olsa 172482ce75d9SJiri Olsa closedir(events_dir); 172582ce75d9SJiri Olsa return cnt; 172682ce75d9SJiri Olsa } 172782ce75d9SJiri Olsa 172863503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 172982ce75d9SJiri Olsa { 173082ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 17316484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 173282ce75d9SJiri Olsa 173382ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 173482ce75d9SJiri Olsa } 1735378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 173682ce75d9SJiri Olsa 173723b6339bSArnaldo Carvalho de Melo struct evlist_test { 1738945aea22SJiri Olsa const char *name; 173916ddcfbfSJiri Olsa bool (*valid)(void); 174063503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1741945aea22SJiri Olsa }; 1742945aea22SJiri Olsa 17438252e791SIan Rogers static const struct evlist_test test__events[] = { 1744378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1745615b8f99SAlexander Yarygin { 174643f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1747945aea22SJiri Olsa .check = test__checkevent_tracepoint, 17488252e791SIan Rogers /* 0 */ 1749945aea22SJiri Olsa }, 1750615b8f99SAlexander Yarygin { 1751945aea22SJiri Olsa .name = "syscalls:*", 1752945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 17538252e791SIan Rogers /* 1 */ 1754945aea22SJiri Olsa }, 1755378ef0f5SIan Rogers #endif 1756615b8f99SAlexander Yarygin { 1757945aea22SJiri Olsa .name = "r1a", 1758945aea22SJiri Olsa .check = test__checkevent_raw, 17598252e791SIan Rogers /* 2 */ 1760945aea22SJiri Olsa }, 1761615b8f99SAlexander Yarygin { 1762945aea22SJiri Olsa .name = "1:1", 1763945aea22SJiri Olsa .check = test__checkevent_numeric, 17648252e791SIan Rogers /* 3 */ 1765945aea22SJiri Olsa }, 1766615b8f99SAlexander Yarygin { 1767945aea22SJiri Olsa .name = "instructions", 1768945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 17698252e791SIan Rogers /* 4 */ 1770945aea22SJiri Olsa }, 1771615b8f99SAlexander Yarygin { 1772945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1773945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 17748252e791SIan Rogers /* 5 */ 1775945aea22SJiri Olsa }, 1776615b8f99SAlexander Yarygin { 1777945aea22SJiri Olsa .name = "faults", 1778945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 17798252e791SIan Rogers /* 6 */ 1780945aea22SJiri Olsa }, 1781615b8f99SAlexander Yarygin { 1782945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1783945aea22SJiri Olsa .check = test__checkevent_genhw, 17848252e791SIan Rogers /* 7 */ 1785945aea22SJiri Olsa }, 1786615b8f99SAlexander Yarygin { 1787945aea22SJiri Olsa .name = "mem:0", 1788945aea22SJiri Olsa .check = test__checkevent_breakpoint, 17898252e791SIan Rogers /* 8 */ 1790945aea22SJiri Olsa }, 1791615b8f99SAlexander Yarygin { 1792945aea22SJiri Olsa .name = "mem:0:x", 1793945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 17948252e791SIan Rogers /* 9 */ 1795945aea22SJiri Olsa }, 1796615b8f99SAlexander Yarygin { 1797945aea22SJiri Olsa .name = "mem:0:r", 1798945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 17998252e791SIan Rogers /* 0 */ 1800945aea22SJiri Olsa }, 1801615b8f99SAlexander Yarygin { 1802945aea22SJiri Olsa .name = "mem:0:w", 1803945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 18048252e791SIan Rogers /* 1 */ 1805945aea22SJiri Olsa }, 1806378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1807615b8f99SAlexander Yarygin { 180843f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1809945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 18108252e791SIan Rogers /* 2 */ 1811945aea22SJiri Olsa }, 1812615b8f99SAlexander Yarygin { 1813945aea22SJiri Olsa .name = "syscalls:*:u", 1814945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 18158252e791SIan Rogers /* 3 */ 1816945aea22SJiri Olsa }, 1817378ef0f5SIan Rogers #endif 1818615b8f99SAlexander Yarygin { 1819945aea22SJiri Olsa .name = "r1a:kp", 1820945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 18218252e791SIan Rogers /* 4 */ 1822945aea22SJiri Olsa }, 1823615b8f99SAlexander Yarygin { 1824945aea22SJiri Olsa .name = "1:1:hp", 1825945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 18268252e791SIan Rogers /* 5 */ 1827945aea22SJiri Olsa }, 1828615b8f99SAlexander Yarygin { 1829945aea22SJiri Olsa .name = "instructions:h", 1830945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 18318252e791SIan Rogers /* 6 */ 1832945aea22SJiri Olsa }, 1833615b8f99SAlexander Yarygin { 1834945aea22SJiri Olsa .name = "faults:u", 1835945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 18368252e791SIan Rogers /* 7 */ 1837945aea22SJiri Olsa }, 1838615b8f99SAlexander Yarygin { 1839945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1840945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 18418252e791SIan Rogers /* 8 */ 1842945aea22SJiri Olsa }, 1843615b8f99SAlexander Yarygin { 1844945aea22SJiri Olsa .name = "mem:0:u", 1845945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 18468252e791SIan Rogers /* 9 */ 1847945aea22SJiri Olsa }, 1848615b8f99SAlexander Yarygin { 1849945aea22SJiri Olsa .name = "mem:0:x:k", 1850945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 18518252e791SIan Rogers /* 0 */ 1852945aea22SJiri Olsa }, 1853615b8f99SAlexander Yarygin { 1854945aea22SJiri Olsa .name = "mem:0:r:hp", 1855945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 18568252e791SIan Rogers /* 1 */ 1857945aea22SJiri Olsa }, 1858615b8f99SAlexander Yarygin { 1859945aea22SJiri Olsa .name = "mem:0:w:up", 1860945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 18618252e791SIan Rogers /* 2 */ 1862945aea22SJiri Olsa }, 1863378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1864615b8f99SAlexander Yarygin { 186543f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1866945aea22SJiri Olsa .check = test__checkevent_list, 18678252e791SIan Rogers /* 3 */ 1868945aea22SJiri Olsa }, 1869378ef0f5SIan Rogers #endif 1870615b8f99SAlexander Yarygin { 1871945aea22SJiri Olsa .name = "instructions:G", 1872945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 18738252e791SIan Rogers /* 4 */ 1874945aea22SJiri Olsa }, 1875615b8f99SAlexander Yarygin { 1876945aea22SJiri Olsa .name = "instructions:H", 1877945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 18788252e791SIan Rogers /* 5 */ 1879945aea22SJiri Olsa }, 1880615b8f99SAlexander Yarygin { 1881945aea22SJiri Olsa .name = "mem:0:rw", 1882945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 18838252e791SIan Rogers /* 6 */ 1884945aea22SJiri Olsa }, 1885615b8f99SAlexander Yarygin { 1886945aea22SJiri Olsa .name = "mem:0:rw:kp", 1887945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 18888252e791SIan Rogers /* 7 */ 1889945aea22SJiri Olsa }, 1890615b8f99SAlexander Yarygin { 1891945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1892945aea22SJiri Olsa .check = test__group1, 18938252e791SIan Rogers /* 8 */ 1894945aea22SJiri Olsa }, 1895615b8f99SAlexander Yarygin { 1896945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1897945aea22SJiri Olsa .check = test__group2, 18988252e791SIan Rogers /* 9 */ 1899945aea22SJiri Olsa }, 1900378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1901615b8f99SAlexander Yarygin { 190243f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1903945aea22SJiri Olsa .check = test__group3, 19048252e791SIan Rogers /* 0 */ 1905945aea22SJiri Olsa }, 1906378ef0f5SIan Rogers #endif 1907615b8f99SAlexander Yarygin { 1908945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1909945aea22SJiri Olsa .check = test__group4, 19108252e791SIan Rogers /* 1 */ 1911945aea22SJiri Olsa }, 1912615b8f99SAlexander Yarygin { 1913945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1914945aea22SJiri Olsa .check = test__group5, 19158252e791SIan Rogers /* 2 */ 1916945aea22SJiri Olsa }, 1917378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1918615b8f99SAlexander Yarygin { 191982ce75d9SJiri Olsa .name = "*:*", 192082ce75d9SJiri Olsa .check = test__all_tracepoints, 19218252e791SIan Rogers /* 3 */ 192282ce75d9SJiri Olsa }, 1923378ef0f5SIan Rogers #endif 1924615b8f99SAlexander Yarygin { 19255a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 19265a30a99fSJiri Olsa .check = test__group_gh1, 19278252e791SIan Rogers /* 4 */ 19285a30a99fSJiri Olsa }, 1929615b8f99SAlexander Yarygin { 19305a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 19315a30a99fSJiri Olsa .check = test__group_gh2, 19328252e791SIan Rogers /* 5 */ 19335a30a99fSJiri Olsa }, 1934615b8f99SAlexander Yarygin { 19355a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 19365a30a99fSJiri Olsa .check = test__group_gh3, 19378252e791SIan Rogers /* 6 */ 19385a30a99fSJiri Olsa }, 1939615b8f99SAlexander Yarygin { 19405a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 19415a30a99fSJiri Olsa .check = test__group_gh4, 19428252e791SIan Rogers /* 7 */ 19435a30a99fSJiri Olsa }, 1944615b8f99SAlexander Yarygin { 1945a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1946a9f93f97SJiri Olsa .check = test__leader_sample1, 19478252e791SIan Rogers /* 8 */ 1948a9f93f97SJiri Olsa }, 1949615b8f99SAlexander Yarygin { 1950a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1951a9f93f97SJiri Olsa .check = test__leader_sample2, 19528252e791SIan Rogers /* 9 */ 1953a9f93f97SJiri Olsa }, 1954615b8f99SAlexander Yarygin { 1955c9ee780fSMichael Ellerman .name = "instructions:uDp", 1956c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 19578252e791SIan Rogers /* 0 */ 1958c9ee780fSMichael Ellerman }, 1959615b8f99SAlexander Yarygin { 1960c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1961c9ee780fSMichael Ellerman .check = test__pinned_group, 19628252e791SIan Rogers /* 1 */ 1963c9ee780fSMichael Ellerman }, 1964ec32398cSJacob Shin { 1965ec32398cSJacob Shin .name = "mem:0/1", 1966ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 19678252e791SIan Rogers /* 2 */ 1968ec32398cSJacob Shin }, 1969ec32398cSJacob Shin { 1970ec32398cSJacob Shin .name = "mem:0/2:w", 1971ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 19728252e791SIan Rogers /* 3 */ 1973ec32398cSJacob Shin }, 1974ec32398cSJacob Shin { 1975ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1976ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 19778252e791SIan Rogers /* 4 */ 1978ec32398cSJacob Shin }, 1979378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 1980c0bc8c6dSAlexander Yarygin { 1981c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1982c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 198353fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 19848252e791SIan Rogers /* 0 */ 1985c0bc8c6dSAlexander Yarygin }, 1986c0bc8c6dSAlexander Yarygin #endif 1987a1e12da4SJiri Olsa { 1988a1e12da4SJiri Olsa .name = "instructions:I", 1989a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 19908252e791SIan Rogers /* 5 */ 1991a1e12da4SJiri Olsa }, 1992a1e12da4SJiri Olsa { 1993a1e12da4SJiri Olsa .name = "instructions:kIG", 1994a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 19958252e791SIan Rogers /* 6 */ 1996a1e12da4SJiri Olsa }, 1997ddd83c97SJiri Olsa { 1998ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1999ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 20008252e791SIan Rogers /* 7 */ 2001ddd83c97SJiri Olsa }, 200210bf358aSWang Nan { 200310bf358aSWang Nan .name = "instructions/name=insn/", 200410bf358aSWang Nan .check = test__checkevent_config_symbol, 20058252e791SIan Rogers /* 8 */ 200610bf358aSWang Nan }, 200710bf358aSWang Nan { 200810bf358aSWang Nan .name = "r1234/name=rawpmu/", 200910bf358aSWang Nan .check = test__checkevent_config_raw, 20108252e791SIan Rogers /* 9 */ 201110bf358aSWang Nan }, 201210bf358aSWang Nan { 201310bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 201410bf358aSWang Nan .check = test__checkevent_config_num, 20158252e791SIan Rogers /* 0 */ 201610bf358aSWang Nan }, 201743d0b978SWang Nan { 201843d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 201943d0b978SWang Nan .check = test__checkevent_config_cache, 20208252e791SIan Rogers /* 1 */ 202143d0b978SWang Nan }, 2022b3f58c8dSArnaldo Carvalho de Melo { 2023b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 202416ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 2025b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 20268252e791SIan Rogers /* 2 */ 2027b3f58c8dSArnaldo Carvalho de Melo }, 202806dc5bf2SAlexey Budankov { 202906dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 203006dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 20318252e791SIan Rogers /* 3 */ 2032714a92d8SJiri Olsa }, 2033714a92d8SJiri Olsa { 2034714a92d8SJiri Olsa .name = "cycles//u", 2035714a92d8SJiri Olsa .check = test__sym_event_slash, 20368252e791SIan Rogers /* 4 */ 2037714a92d8SJiri Olsa }, 2038714a92d8SJiri Olsa { 2039714a92d8SJiri Olsa .name = "cycles:k", 2040714a92d8SJiri Olsa .check = test__sym_event_dc, 20418252e791SIan Rogers /* 5 */ 20420997a266SAndi Kleen }, 20430997a266SAndi Kleen { 20440997a266SAndi Kleen .name = "instructions:uep", 20450997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 20468252e791SIan Rogers /* 6 */ 20470997a266SAndi Kleen }, 20480997a266SAndi Kleen { 20490997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 20500997a266SAndi Kleen .check = test__exclusive_group, 20518252e791SIan Rogers /* 7 */ 20520997a266SAndi Kleen }, 2053e831f3ccSIan Rogers { 2054e831f3ccSIan Rogers .name = "cycles/name=name/", 2055e831f3ccSIan Rogers .check = test__term_equal_term, 2056e831f3ccSIan Rogers /* 8 */ 2057e831f3ccSIan Rogers }, 20582aadca4bSIan Rogers { 20592aadca4bSIan Rogers .name = "cycles/name=l1d/", 20602aadca4bSIan Rogers .check = test__term_equal_legacy, 20612aadca4bSIan Rogers /* 9 */ 20622aadca4bSIan Rogers }, 2063*f0617f52SAdrian Hunter { 2064*f0617f52SAdrian Hunter .name = "mem:0/name=breakpoint/", 2065*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint, 2066*f0617f52SAdrian Hunter /* 0 */ 2067*f0617f52SAdrian Hunter }, 2068*f0617f52SAdrian Hunter { 2069*f0617f52SAdrian Hunter .name = "mem:0:x/name=breakpoint/", 2070*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_x, 2071*f0617f52SAdrian Hunter /* 1 */ 2072*f0617f52SAdrian Hunter }, 2073*f0617f52SAdrian Hunter { 2074*f0617f52SAdrian Hunter .name = "mem:0:r/name=breakpoint/", 2075*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_r, 2076*f0617f52SAdrian Hunter /* 2 */ 2077*f0617f52SAdrian Hunter }, 2078*f0617f52SAdrian Hunter { 2079*f0617f52SAdrian Hunter .name = "mem:0:w/name=breakpoint/", 2080*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_w, 2081*f0617f52SAdrian Hunter /* 3 */ 2082*f0617f52SAdrian Hunter }, 2083*f0617f52SAdrian Hunter { 2084*f0617f52SAdrian Hunter .name = "mem:0/name=breakpoint/u", 2085*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_modifier_name, 2086*f0617f52SAdrian Hunter /* 4 */ 2087*f0617f52SAdrian Hunter }, 2088*f0617f52SAdrian Hunter { 2089*f0617f52SAdrian Hunter .name = "mem:0:x/name=breakpoint/k", 2090*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_x_modifier_name, 2091*f0617f52SAdrian Hunter /* 5 */ 2092*f0617f52SAdrian Hunter }, 2093*f0617f52SAdrian Hunter { 2094*f0617f52SAdrian Hunter .name = "mem:0:r/name=breakpoint/hp", 2095*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_r_modifier_name, 2096*f0617f52SAdrian Hunter /* 6 */ 2097*f0617f52SAdrian Hunter }, 2098*f0617f52SAdrian Hunter { 2099*f0617f52SAdrian Hunter .name = "mem:0:w/name=breakpoint/up", 2100*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_w_modifier_name, 2101*f0617f52SAdrian Hunter /* 7 */ 2102*f0617f52SAdrian Hunter }, 2103*f0617f52SAdrian Hunter { 2104*f0617f52SAdrian Hunter .name = "mem:0:rw/name=breakpoint/", 2105*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_rw, 2106*f0617f52SAdrian Hunter /* 8 */ 2107*f0617f52SAdrian Hunter }, 2108*f0617f52SAdrian Hunter { 2109*f0617f52SAdrian Hunter .name = "mem:0:rw/name=breakpoint/kp", 2110*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_rw_modifier_name, 2111*f0617f52SAdrian Hunter /* 9 */ 2112*f0617f52SAdrian Hunter }, 2113*f0617f52SAdrian Hunter { 2114*f0617f52SAdrian Hunter .name = "mem:0/1/name=breakpoint/", 2115*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len, 2116*f0617f52SAdrian Hunter /* 0 */ 2117*f0617f52SAdrian Hunter }, 2118*f0617f52SAdrian Hunter { 2119*f0617f52SAdrian Hunter .name = "mem:0/2:w/name=breakpoint/", 2120*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len_w, 2121*f0617f52SAdrian Hunter /* 1 */ 2122*f0617f52SAdrian Hunter }, 2123*f0617f52SAdrian Hunter { 2124*f0617f52SAdrian Hunter .name = "mem:0/4:rw/name=breakpoint/u", 2125*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len_rw_modifier, 2126*f0617f52SAdrian Hunter /* 2 */ 2127*f0617f52SAdrian Hunter }, 2128*f0617f52SAdrian Hunter { 2129*f0617f52SAdrian Hunter .name = "mem:0/1/name=breakpoint1/,mem:0/4:rw/name=breakpoint2/", 2130*f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_2_events, 2131*f0617f52SAdrian Hunter /* 3 */ 2132*f0617f52SAdrian Hunter }, 2133945aea22SJiri Olsa }; 2134945aea22SJiri Olsa 21358252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 2136615b8f99SAlexander Yarygin { 2137945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 21388f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 2139945aea22SJiri Olsa .check = test__checkevent_pmu, 21408252e791SIan Rogers /* 0 */ 2141945aea22SJiri Olsa }, 2142615b8f99SAlexander Yarygin { 2143945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 21448f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 2145945aea22SJiri Olsa .check = test__checkevent_pmu_name, 21468252e791SIan Rogers /* 1 */ 2147945aea22SJiri Olsa }, 214871ef150eSKan Liang { 214971ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 21508f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 215171ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 21528252e791SIan Rogers /* 2 */ 215371ef150eSKan Liang }, 215406dc5bf2SAlexey Budankov { 2155a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 21568f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 215706dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 21588252e791SIan Rogers /* 3 */ 21593a6c51e4SJiri Olsa }, 21603a6c51e4SJiri Olsa { 21613a6c51e4SJiri Olsa .name = "software/r1a/", 21623a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 21638252e791SIan Rogers /* 4 */ 21643a6c51e4SJiri Olsa }, 2165c33cdf54SJiri Olsa { 2166c33cdf54SJiri Olsa .name = "software/r0x1a/", 2167c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 21688252e791SIan Rogers /* 5 */ 2169c33cdf54SJiri Olsa }, 21706fd1e519SIan Rogers { 21716fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/", 21726fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 21736fd1e519SIan Rogers .check = test__checkevent_genhw, 21746fd1e519SIan Rogers /* 6 */ 21756fd1e519SIan Rogers }, 21766fd1e519SIan Rogers { 21776fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/kp", 21786fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 21796fd1e519SIan Rogers .check = test__checkevent_genhw_modifier, 21806fd1e519SIan Rogers /* 7 */ 21816fd1e519SIan Rogers }, 21826fd1e519SIan Rogers { 21836fd1e519SIan Rogers .name = "cpu/L1-dcache-misses,name=cachepmu/", 21846fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 21856fd1e519SIan Rogers .check = test__checkevent_config_cache, 21866fd1e519SIan Rogers /* 8 */ 21876fd1e519SIan Rogers }, 21885ea8f2ccSIan Rogers { 21895ea8f2ccSIan Rogers .name = "cpu/instructions/", 21905ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 21915ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name, 21925ea8f2ccSIan Rogers /* 9 */ 21935ea8f2ccSIan Rogers }, 21945ea8f2ccSIan Rogers { 21955ea8f2ccSIan Rogers .name = "cpu/cycles,period=100000,config2/", 21965ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 21975ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_config, 21985ea8f2ccSIan Rogers /* 0 */ 21995ea8f2ccSIan Rogers }, 22005ea8f2ccSIan Rogers { 22015ea8f2ccSIan Rogers .name = "cpu/instructions/h", 22025ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22035ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_modifier, 22045ea8f2ccSIan Rogers /* 1 */ 22055ea8f2ccSIan Rogers }, 22065ea8f2ccSIan Rogers { 22075ea8f2ccSIan Rogers .name = "cpu/instructions/G", 22085ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22095ea8f2ccSIan Rogers .check = test__checkevent_exclude_host_modifier, 22105ea8f2ccSIan Rogers /* 2 */ 22115ea8f2ccSIan Rogers }, 22125ea8f2ccSIan Rogers { 22135ea8f2ccSIan Rogers .name = "cpu/instructions/H", 22145ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22155ea8f2ccSIan Rogers .check = test__checkevent_exclude_guest_modifier, 22165ea8f2ccSIan Rogers /* 3 */ 22175ea8f2ccSIan Rogers }, 22185ea8f2ccSIan Rogers { 22195ea8f2ccSIan Rogers .name = "{cpu/instructions/k,cpu/cycles/upp}", 22205ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22215ea8f2ccSIan Rogers .check = test__group1, 22225ea8f2ccSIan Rogers /* 4 */ 22235ea8f2ccSIan Rogers }, 22245ea8f2ccSIan Rogers { 22255ea8f2ccSIan Rogers .name = "{cpu/cycles/u,cpu/instructions/kp}:p", 22265ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22275ea8f2ccSIan Rogers .check = test__group4, 22285ea8f2ccSIan Rogers /* 5 */ 22295ea8f2ccSIan Rogers }, 22305ea8f2ccSIan Rogers { 22315ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/G}:H", 22325ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22335ea8f2ccSIan Rogers .check = test__group_gh1, 22345ea8f2ccSIan Rogers /* 6 */ 22355ea8f2ccSIan Rogers }, 22365ea8f2ccSIan Rogers { 22375ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/H}:G", 22385ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22395ea8f2ccSIan Rogers .check = test__group_gh2, 22405ea8f2ccSIan Rogers /* 7 */ 22415ea8f2ccSIan Rogers }, 22425ea8f2ccSIan Rogers { 22435ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:u", 22445ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22455ea8f2ccSIan Rogers .check = test__group_gh3, 22465ea8f2ccSIan Rogers /* 8 */ 22475ea8f2ccSIan Rogers }, 22485ea8f2ccSIan Rogers { 22495ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:uG", 22505ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22515ea8f2ccSIan Rogers .check = test__group_gh4, 22525ea8f2ccSIan Rogers /* 9 */ 22535ea8f2ccSIan Rogers }, 22545ea8f2ccSIan Rogers { 22555ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S", 22565ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22575ea8f2ccSIan Rogers .check = test__leader_sample1, 22585ea8f2ccSIan Rogers /* 0 */ 22595ea8f2ccSIan Rogers }, 22605ea8f2ccSIan Rogers { 22615ea8f2ccSIan Rogers .name = "{cpu/instructions/,cpu/branch-misses/}:Su", 22625ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22635ea8f2ccSIan Rogers .check = test__leader_sample2, 22645ea8f2ccSIan Rogers /* 1 */ 22655ea8f2ccSIan Rogers }, 22665ea8f2ccSIan Rogers { 22675ea8f2ccSIan Rogers .name = "cpu/instructions/uDp", 22685ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22695ea8f2ccSIan Rogers .check = test__checkevent_pinned_modifier, 22705ea8f2ccSIan Rogers /* 2 */ 22715ea8f2ccSIan Rogers }, 22725ea8f2ccSIan Rogers { 22735ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D", 22745ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22755ea8f2ccSIan Rogers .check = test__pinned_group, 22765ea8f2ccSIan Rogers /* 3 */ 22775ea8f2ccSIan Rogers }, 22785ea8f2ccSIan Rogers { 22795ea8f2ccSIan Rogers .name = "cpu/instructions/I", 22805ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22815ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier, 22825ea8f2ccSIan Rogers /* 4 */ 22835ea8f2ccSIan Rogers }, 22845ea8f2ccSIan Rogers { 22855ea8f2ccSIan Rogers .name = "cpu/instructions/kIG", 22865ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22875ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier_1, 22885ea8f2ccSIan Rogers /* 5 */ 22895ea8f2ccSIan Rogers }, 22905ea8f2ccSIan Rogers { 22915ea8f2ccSIan Rogers .name = "cpu/cycles/u", 22925ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22935ea8f2ccSIan Rogers .check = test__sym_event_slash, 22945ea8f2ccSIan Rogers /* 6 */ 22955ea8f2ccSIan Rogers }, 22965ea8f2ccSIan Rogers { 22975ea8f2ccSIan Rogers .name = "cpu/cycles/k", 22985ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22995ea8f2ccSIan Rogers .check = test__sym_event_dc, 23005ea8f2ccSIan Rogers /* 7 */ 23015ea8f2ccSIan Rogers }, 23025ea8f2ccSIan Rogers { 23035ea8f2ccSIan Rogers .name = "cpu/instructions/uep", 23045ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23055ea8f2ccSIan Rogers .check = test__checkevent_exclusive_modifier, 23065ea8f2ccSIan Rogers /* 8 */ 23075ea8f2ccSIan Rogers }, 23085ea8f2ccSIan Rogers { 23095ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e", 23105ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23115ea8f2ccSIan Rogers .check = test__exclusive_group, 23125ea8f2ccSIan Rogers /* 9 */ 23135ea8f2ccSIan Rogers }, 2314e831f3ccSIan Rogers { 2315e831f3ccSIan Rogers .name = "cpu/cycles,name=name/", 2316e831f3ccSIan Rogers .valid = test__pmu_cpu_valid, 2317e831f3ccSIan Rogers .check = test__term_equal_term, 2318e831f3ccSIan Rogers /* 0 */ 2319e831f3ccSIan Rogers }, 23202aadca4bSIan Rogers { 23212aadca4bSIan Rogers .name = "cpu/cycles,name=l1d/", 23222aadca4bSIan Rogers .valid = test__pmu_cpu_valid, 23232aadca4bSIan Rogers .check = test__term_equal_legacy, 23242aadca4bSIan Rogers /* 1 */ 23252aadca4bSIan Rogers }, 2326945aea22SJiri Olsa }; 2327945aea22SJiri Olsa 232823b6339bSArnaldo Carvalho de Melo struct terms_test { 2329945aea22SJiri Olsa const char *str; 2330945aea22SJiri Olsa int (*check)(struct list_head *terms); 2331945aea22SJiri Olsa }; 2332945aea22SJiri Olsa 2333b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2334945aea22SJiri Olsa [0] = { 2335204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 2336945aea22SJiri Olsa .check = test__checkterms_simple, 2337945aea22SJiri Olsa }, 2338945aea22SJiri Olsa }; 2339945aea22SJiri Olsa 23408252e791SIan Rogers static int test_event(const struct evlist_test *e) 2341945aea22SJiri Olsa { 2342a910e466SIan Rogers struct parse_events_error err; 234363503dbaSJiri Olsa struct evlist *evlist; 2344945aea22SJiri Olsa int ret; 2345945aea22SJiri Olsa 234616ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 23477741e03eSIan Rogers pr_debug("... SKIP\n"); 23487741e03eSIan Rogers return TEST_OK; 234916ddcfbfSJiri Olsa } 235016ddcfbfSJiri Olsa 23510f98b11cSJiri Olsa evlist = evlist__new(); 23527741e03eSIan Rogers if (evlist == NULL) { 23537741e03eSIan Rogers pr_err("Failed allocation"); 23547741e03eSIan Rogers return TEST_FAIL; 23557741e03eSIan Rogers } 235607eafd4eSIan Rogers parse_events_error__init(&err); 2357933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2358945aea22SJiri Olsa if (ret) { 2359933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2360933ccf20SJiri Olsa e->name, ret, err.str); 23616c191289SIan Rogers parse_events_error__print(&err, e->name); 23627741e03eSIan Rogers ret = TEST_FAIL; 2363aefde50aSIan Rogers if (err.str && strstr(err.str, "can't access trace events")) 23647741e03eSIan Rogers ret = TEST_SKIP; 23652d4352c0SArnaldo Carvalho de Melo } else { 23662d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2367945aea22SJiri Olsa } 236807eafd4eSIan Rogers parse_events_error__exit(&err); 2369c12995a5SJiri Olsa evlist__delete(evlist); 2370945aea22SJiri Olsa 2371945aea22SJiri Olsa return ret; 2372945aea22SJiri Olsa } 2373945aea22SJiri Olsa 2374b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2375b4a7276cSJohn Garry { 2376b4a7276cSJohn Garry struct parse_events_error err; 2377b4a7276cSJohn Garry struct evlist *evlist; 2378b4a7276cSJohn Garry int ret; 2379b4a7276cSJohn Garry 2380b4a7276cSJohn Garry evlist = evlist__new(); 2381b4a7276cSJohn Garry if (!evlist) 2382b4a7276cSJohn Garry return -ENOMEM; 2383b4a7276cSJohn Garry 2384b4a7276cSJohn Garry parse_events_error__init(&err); 2385411ad22eSIan Rogers ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err, 2386411ad22eSIan Rogers &perf_pmu__fake, /*warn_if_reordered=*/true); 2387b4a7276cSJohn Garry if (ret) { 2388b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2389b4a7276cSJohn Garry str, ret, err.str); 2390b4a7276cSJohn Garry parse_events_error__print(&err, str); 2391b4a7276cSJohn Garry } 2392b4a7276cSJohn Garry 2393b4a7276cSJohn Garry parse_events_error__exit(&err); 2394b4a7276cSJohn Garry evlist__delete(evlist); 2395b4a7276cSJohn Garry 2396b4a7276cSJohn Garry return ret; 2397b4a7276cSJohn Garry } 2398b4a7276cSJohn Garry 23997741e03eSIan Rogers static int combine_test_results(int existing, int latest) 24007741e03eSIan Rogers { 24017741e03eSIan Rogers if (existing == TEST_FAIL) 24027741e03eSIan Rogers return TEST_FAIL; 24037741e03eSIan Rogers if (existing == TEST_SKIP) 24047741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 24057741e03eSIan Rogers return latest; 24067741e03eSIan Rogers } 24077741e03eSIan Rogers 24088252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2409945aea22SJiri Olsa { 24107741e03eSIan Rogers int ret = TEST_OK; 2411945aea22SJiri Olsa 24128252e791SIan Rogers for (int i = 0; i < cnt; i++) { 24138252e791SIan Rogers const struct evlist_test *e = &events[i]; 24147741e03eSIan Rogers int test_ret; 2415945aea22SJiri Olsa 24167741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 24177741e03eSIan Rogers test_ret = test_event(e); 24187741e03eSIan Rogers if (test_ret != TEST_OK) { 24197741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 24207741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 24217741e03eSIan Rogers } 2422945aea22SJiri Olsa } 2423945aea22SJiri Olsa 24247741e03eSIan Rogers return ret; 24257741e03eSIan Rogers } 24267741e03eSIan Rogers 24277741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 24287741e03eSIan Rogers { 24297741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2430945aea22SJiri Olsa } 2431945aea22SJiri Olsa 2432b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2433945aea22SJiri Olsa { 2434c549aca5SDavid Ahern struct list_head terms; 2435945aea22SJiri Olsa int ret; 2436945aea22SJiri Olsa 2437c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2438945aea22SJiri Olsa 2439c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2440945aea22SJiri Olsa if (ret) { 2441945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2442945aea22SJiri Olsa t->str , ret); 2443945aea22SJiri Olsa return ret; 2444945aea22SJiri Olsa } 2445945aea22SJiri Olsa 2446c549aca5SDavid Ahern ret = t->check(&terms); 2447682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2448945aea22SJiri Olsa 2449945aea22SJiri Olsa return ret; 2450945aea22SJiri Olsa } 2451945aea22SJiri Olsa 2452b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2453945aea22SJiri Olsa { 2454945aea22SJiri Olsa int ret = 0; 2455945aea22SJiri Olsa 2456b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2457b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2458945aea22SJiri Olsa 2459945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2460945aea22SJiri Olsa ret = test_term(t); 2461945aea22SJiri Olsa if (ret) 2462945aea22SJiri Olsa break; 2463945aea22SJiri Olsa } 2464945aea22SJiri Olsa 2465945aea22SJiri Olsa return ret; 2466945aea22SJiri Olsa } 2467945aea22SJiri Olsa 24687741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 24697741e03eSIan Rogers { 24707741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 24717741e03eSIan Rogers } 24727741e03eSIan Rogers 24737741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2474945aea22SJiri Olsa { 2475f24ebe80SIan Rogers struct perf_pmu *pmu = NULL; 24765a52817eSIan Rogers int ret = TEST_OK; 24775a52817eSIan Rogers 24781eaf496eSIan Rogers while ((pmu = perf_pmus__scan(pmu)) != NULL) { 2479945aea22SJiri Olsa struct stat st; 2480945aea22SJiri Olsa char path[PATH_MAX]; 2481945aea22SJiri Olsa struct dirent *ent; 2482945aea22SJiri Olsa DIR *dir; 24835a52817eSIan Rogers int err; 2484945aea22SJiri Olsa 24855a52817eSIan Rogers snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/", 24865a52817eSIan Rogers sysfs__mountpoint(), pmu->name); 24877741e03eSIan Rogers 24885a52817eSIan Rogers err = stat(path, &st); 24895a52817eSIan Rogers if (err) { 24905a52817eSIan Rogers pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path); 24915a52817eSIan Rogers continue; 2492945aea22SJiri Olsa } 2493945aea22SJiri Olsa 2494945aea22SJiri Olsa dir = opendir(path); 2495945aea22SJiri Olsa if (!dir) { 24967741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 24975a52817eSIan Rogers ret = combine_test_results(ret, TEST_SKIP); 24985a52817eSIan Rogers continue; 2499945aea22SJiri Olsa } 2500945aea22SJiri Olsa 25017741e03eSIan Rogers while ((ent = readdir(dir))) { 25028252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 25032e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 25047741e03eSIan Rogers int test_ret; 2505945aea22SJiri Olsa 250617a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 250717a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2508945aea22SJiri Olsa continue; 2509945aea22SJiri Olsa 25105a52817eSIan Rogers snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name); 2511945aea22SJiri Olsa 2512945aea22SJiri Olsa e.name = name; 2513945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2514945aea22SJiri Olsa 25157741e03eSIan Rogers test_ret = test_event(&e); 25167741e03eSIan Rogers if (test_ret != TEST_OK) { 25177741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 25187741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 25197741e03eSIan Rogers } 25205a52817eSIan Rogers 25215a52817eSIan Rogers if (!is_pmu_core(pmu->name)) 25225a52817eSIan Rogers continue; 25235a52817eSIan Rogers 2524146edff3SIan Rogers /* 2525146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2526146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2527146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2528146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2529146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2530146edff3SIan Rogers * isn't expected after this. As event names in the config 2531146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2532146edff3SIan Rogers * above. 2533146edff3SIan Rogers */ 2534146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2535146edff3SIan Rogers continue; 2536146edff3SIan Rogers 25375a52817eSIan Rogers snprintf(name, sizeof(name), "%s:u,%s/event=%s/u", 25385a52817eSIan Rogers ent->d_name, pmu->name, ent->d_name); 2539ffe59788SKan Liang e.name = name; 2540ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 25417741e03eSIan Rogers test_ret = test_event(&e); 25427741e03eSIan Rogers if (test_ret != TEST_OK) { 25437741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 25447741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 25457741e03eSIan Rogers } 2546945aea22SJiri Olsa } 2547945aea22SJiri Olsa 2548945aea22SJiri Olsa closedir(dir); 25495a52817eSIan Rogers } 2550945aea22SJiri Olsa return ret; 2551945aea22SJiri Olsa } 2552945aea22SJiri Olsa 25537741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 25547741e03eSIan Rogers { 25557741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 25567741e03eSIan Rogers } 25577741e03eSIan Rogers 2558c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2559c7a3828dSJin Yao { 2560c7a3828dSJin Yao char path[PATH_MAX]; 2561c7a3828dSJin Yao DIR *dir; 2562c7a3828dSJin Yao struct dirent *dent; 2563c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2564c7a3828dSJin Yao char buf[128]; 2565c7a3828dSJin Yao FILE *file; 2566c7a3828dSJin Yao 2567c7a3828dSJin Yao if (!sysfs) 2568c7a3828dSJin Yao return false; 2569c7a3828dSJin Yao 2570c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2571c7a3828dSJin Yao dir = opendir(path); 2572c7a3828dSJin Yao if (!dir) 2573c7a3828dSJin Yao return false; 2574c7a3828dSJin Yao 2575c7a3828dSJin Yao while ((dent = readdir(dir))) { 2576c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2577c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2578c7a3828dSJin Yao continue; 2579c7a3828dSJin Yao 2580c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2581c7a3828dSJin Yao sysfs, dent->d_name); 2582c7a3828dSJin Yao 2583c7a3828dSJin Yao if (!file_available(path)) 2584c7a3828dSJin Yao continue; 2585c7a3828dSJin Yao 2586c7a3828dSJin Yao file = fopen(path, "r"); 2587c7a3828dSJin Yao if (!file) 2588c7a3828dSJin Yao continue; 2589c7a3828dSJin Yao 2590c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2591c7a3828dSJin Yao fclose(file); 2592c7a3828dSJin Yao continue; 2593c7a3828dSJin Yao } 2594c7a3828dSJin Yao 2595c7a3828dSJin Yao /* Remove the last '\n' */ 2596c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2597c7a3828dSJin Yao 2598c7a3828dSJin Yao fclose(file); 2599c7a3828dSJin Yao *event = strdup(dent->d_name); 2600c7a3828dSJin Yao *alias = strdup(buf); 2601c7a3828dSJin Yao closedir(dir); 2602c7a3828dSJin Yao 2603c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2604c7a3828dSJin Yao free(*event); 2605c7a3828dSJin Yao free(*alias); 2606c7a3828dSJin Yao return false; 2607c7a3828dSJin Yao } 2608c7a3828dSJin Yao 2609c7a3828dSJin Yao return true; 2610c7a3828dSJin Yao } 2611c7a3828dSJin Yao 2612c7a3828dSJin Yao closedir(dir); 2613c7a3828dSJin Yao return false; 2614c7a3828dSJin Yao } 2615c7a3828dSJin Yao 2616c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2617c7a3828dSJin Yao { 2618c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2619c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2620c7a3828dSJin Yao 2621c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2622c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 26237741e03eSIan Rogers return TEST_OK; 2624c7a3828dSJin Yao } 2625c7a3828dSJin Yao 26267741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2627c7a3828dSJin Yao { 26288252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2629c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2630c7a3828dSJin Yao 2631c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2632c7a3828dSJin Yao event, alias); 2633c7a3828dSJin Yao 2634c7a3828dSJin Yao e.name = name; 2635c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2636c7a3828dSJin Yao return test_event(&e); 2637c7a3828dSJin Yao } 2638c7a3828dSJin Yao 26397741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 26407741e03eSIan Rogers { 26417741e03eSIan Rogers char *event, *alias; 26427741e03eSIan Rogers int ret; 26437741e03eSIan Rogers 26447741e03eSIan Rogers if (!test_alias(&event, &alias)) 26457741e03eSIan Rogers return TEST_SKIP; 26467741e03eSIan Rogers 26477741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 26487741e03eSIan Rogers 26497741e03eSIan Rogers free(event); 26507741e03eSIan Rogers free(alias); 26517741e03eSIan Rogers return ret; 26527741e03eSIan Rogers } 26537741e03eSIan Rogers 26547741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 26557741e03eSIan Rogers int subtest __maybe_unused) 2656b4a7276cSJohn Garry { 2657b4a7276cSJohn Garry static const char events[][30] = { 2658b4a7276cSJohn Garry "event-hyphen", 2659b4a7276cSJohn Garry "event-two-hyph", 2660b4a7276cSJohn Garry }; 26617741e03eSIan Rogers int ret = TEST_OK; 2662b4a7276cSJohn Garry 26637741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 26647741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 26657741e03eSIan Rogers 26667741e03eSIan Rogers if (test_ret != TEST_OK) { 26677741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 26687741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2669b4a7276cSJohn Garry } 2670b4a7276cSJohn Garry } 2671b4a7276cSJohn Garry 2672b4a7276cSJohn Garry return ret; 2673b4a7276cSJohn Garry } 2674b4a7276cSJohn Garry 26757741e03eSIan Rogers static struct test_case tests__parse_events[] = { 26767741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 26777741e03eSIan Rogers events2, 26787741e03eSIan Rogers "permissions"), 26797741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 26807741e03eSIan Rogers pmu_events, 26817741e03eSIan Rogers "permissions"), 26827741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 26837741e03eSIan Rogers pmu_events2, 26847741e03eSIan Rogers "permissions"), 26857741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 26867741e03eSIan Rogers "no aliases in sysfs"), 26877741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 26887741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 26897741e03eSIan Rogers { .name = NULL, } 26907741e03eSIan Rogers }; 2691945aea22SJiri Olsa 26927741e03eSIan Rogers struct test_suite suite__parse_events = { 26937741e03eSIan Rogers .desc = "Parse event definition strings", 26947741e03eSIan Rogers .test_cases = tests__parse_events, 26957741e03eSIan Rogers }; 2696