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) { 111*808ce56eSJames Clark struct perf_pmu *pmu __maybe_unused = NULL; 112aefde50aSIan Rogers bool type_matched = false; 113aefde50aSIan Rogers 114aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 0x1a)); 115*808ce56eSJames Clark TEST_ASSERT_VAL("event not parsed as raw type", 116*808ce56eSJames Clark evsel->attr.type == PERF_TYPE_RAW); 117*808ce56eSJames Clark #if defined(__aarch64__) 118*808ce56eSJames Clark /* 119*808ce56eSJames Clark * Arm doesn't have a real raw type PMU in sysfs, so raw events 120*808ce56eSJames Clark * would never match any PMU. However, RAW events on Arm will 121*808ce56eSJames Clark * always successfully open on the first available core PMU 122*808ce56eSJames Clark * so no need to test for a matching type here. 123*808ce56eSJames Clark */ 124*808ce56eSJames Clark type_matched = raw_type_match = true; 125*808ce56eSJames Clark #else 1261eaf496eSIan Rogers while ((pmu = perf_pmus__scan(pmu)) != NULL) { 127aefde50aSIan Rogers if (pmu->type == evsel->attr.type) { 128aefde50aSIan Rogers TEST_ASSERT_VAL("PMU type expected once", !type_matched); 129aefde50aSIan Rogers type_matched = true; 130aefde50aSIan Rogers if (pmu->type == PERF_TYPE_RAW) 131aefde50aSIan Rogers raw_type_match = true; 132aefde50aSIan Rogers } 133aefde50aSIan Rogers } 134*808ce56eSJames Clark #endif 135aefde50aSIan Rogers TEST_ASSERT_VAL("No PMU found for type", type_matched); 136aefde50aSIan Rogers } 137aefde50aSIan Rogers TEST_ASSERT_VAL("Raw PMU not matched", raw_type_match); 1387741e03eSIan Rogers return TEST_OK; 139945aea22SJiri Olsa } 140945aea22SJiri Olsa 14163503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 142945aea22SJiri Olsa { 143515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 144945aea22SJiri Olsa 1456484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 1479854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 1487741e03eSIan Rogers return TEST_OK; 149945aea22SJiri Olsa } 150945aea22SJiri Olsa 15163503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 152945aea22SJiri Olsa { 153aefde50aSIan Rogers struct perf_evsel *evsel; 154945aea22SJiri Olsa 155aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 156aefde50aSIan Rogers 157aefde50aSIan Rogers perf_evlist__for_each_evsel(&evlist->core, evsel) { 158aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 159aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", 160aefde50aSIan Rogers test_perf_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 161aefde50aSIan Rogers } 1627741e03eSIan Rogers return TEST_OK; 163945aea22SJiri Olsa } 164945aea22SJiri Olsa 16563503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 166945aea22SJiri Olsa { 167aefde50aSIan Rogers struct perf_evsel *evsel; 168945aea22SJiri Olsa 169aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 170aefde50aSIan Rogers 171aefde50aSIan Rogers perf_evlist__for_each_evsel(&evlist->core, evsel) { 172aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 173aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 174ee4c7588SJiri Olsa /* 17578e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 176ee4c7588SJiri Olsa * while this test executes only parse events method. 177ee4c7588SJiri Olsa */ 178aefde50aSIan Rogers TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period); 179aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); 180aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config2", 1 == evsel->attr.config2); 181aefde50aSIan Rogers } 1827741e03eSIan Rogers return TEST_OK; 183945aea22SJiri Olsa } 184945aea22SJiri Olsa 18563503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 186945aea22SJiri Olsa { 187515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 188945aea22SJiri Olsa 1896484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1919854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 1927741e03eSIan Rogers return TEST_OK; 193945aea22SJiri Olsa } 194945aea22SJiri Olsa 19563503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 196945aea22SJiri Olsa { 197aefde50aSIan Rogers struct perf_evsel *evsel; 198945aea22SJiri Olsa 199aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 200aefde50aSIan Rogers 201aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 202aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); 203aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 1 << 16)); 204aefde50aSIan Rogers } 2057741e03eSIan Rogers return TEST_OK; 206945aea22SJiri Olsa } 207945aea22SJiri Olsa 20863503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 209945aea22SJiri Olsa { 210515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 211945aea22SJiri Olsa 2126484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 2131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2149854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 215945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 2161fc632ceSJiri Olsa evsel->core.attr.bp_type); 217945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 2181fc632ceSJiri Olsa evsel->core.attr.bp_len); 2197741e03eSIan Rogers return TEST_OK; 220945aea22SJiri Olsa } 221945aea22SJiri Olsa 22263503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 223945aea22SJiri Olsa { 224515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 225945aea22SJiri Olsa 2266484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 2271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2289854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 229945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2301fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 2311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 2327741e03eSIan Rogers return TEST_OK; 233945aea22SJiri Olsa } 234945aea22SJiri Olsa 23563503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 236945aea22SJiri Olsa { 237515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 238945aea22SJiri Olsa 2396484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 240945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2411fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2429854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 243945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2441fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 245945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2461fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2477741e03eSIan Rogers return TEST_OK; 248945aea22SJiri Olsa } 249945aea22SJiri Olsa 25063503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 251945aea22SJiri Olsa { 252515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 253945aea22SJiri Olsa 2546484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 255945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2561fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2579854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 258945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2591fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 260945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2611fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2627741e03eSIan Rogers return TEST_OK; 263945aea22SJiri Olsa } 264945aea22SJiri Olsa 26563503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 266945aea22SJiri Olsa { 267515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 268945aea22SJiri Olsa 2696484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 270945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2711fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2729854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 273945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2741fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 275945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2761fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2777741e03eSIan Rogers return TEST_OK; 278945aea22SJiri Olsa } 279945aea22SJiri Olsa 280378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 28163503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 282945aea22SJiri Olsa { 283515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 284945aea22SJiri Olsa 2851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 289945aea22SJiri Olsa 290945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 291945aea22SJiri Olsa } 292945aea22SJiri Olsa 293945aea22SJiri Olsa static int 29463503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 295945aea22SJiri Olsa { 296aefde50aSIan Rogers struct perf_evsel *evsel; 297945aea22SJiri Olsa 2986484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 299945aea22SJiri Olsa 300aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 301aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 302aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 303aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 304aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 305945aea22SJiri Olsa } 306945aea22SJiri Olsa 307945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 308945aea22SJiri Olsa } 309378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 310945aea22SJiri Olsa 31163503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 312945aea22SJiri Olsa { 313aefde50aSIan Rogers struct perf_evsel *evsel; 314945aea22SJiri Olsa 315aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 316aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 317aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 318aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 319aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 320aefde50aSIan Rogers } 321945aea22SJiri Olsa return test__checkevent_raw(evlist); 322945aea22SJiri Olsa } 323945aea22SJiri Olsa 32463503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist) 325945aea22SJiri Olsa { 326aefde50aSIan Rogers struct perf_evsel *evsel; 327945aea22SJiri Olsa 328aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 329aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 330aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 331aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 332aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 333aefde50aSIan Rogers } 334945aea22SJiri Olsa return test__checkevent_numeric(evlist); 335945aea22SJiri Olsa } 336945aea22SJiri Olsa 33763503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 338945aea22SJiri Olsa { 33927c9fcfcSIan Rogers struct perf_evsel *evsel; 340945aea22SJiri Olsa 34127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 34227c9fcfcSIan Rogers evlist->core.nr_entries == perf_pmus__num_core_pmus()); 343945aea22SJiri Olsa 34427c9fcfcSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 34527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 34627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 34727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 34827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 34927c9fcfcSIan Rogers } 350945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 351945aea22SJiri Olsa } 352945aea22SJiri Olsa 35363503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 354945aea22SJiri Olsa { 355aefde50aSIan Rogers struct perf_evsel *evsel; 356945aea22SJiri Olsa 357aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 358aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 359aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 360aefde50aSIan Rogers } 361945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 362945aea22SJiri Olsa } 363945aea22SJiri Olsa 36463503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 365945aea22SJiri Olsa { 366aefde50aSIan Rogers struct perf_evsel *evsel; 367945aea22SJiri Olsa 368aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 369aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 370aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 371aefde50aSIan Rogers } 372945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 373945aea22SJiri Olsa } 374945aea22SJiri Olsa 37563503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 376945aea22SJiri Olsa { 377515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 378945aea22SJiri Olsa 3791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 383945aea22SJiri Olsa 384945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 385945aea22SJiri Olsa } 386945aea22SJiri Olsa 38763503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 388945aea22SJiri Olsa { 389aefde50aSIan Rogers struct perf_evsel *evsel; 390945aea22SJiri Olsa 391aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 392aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 393aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 394aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 395aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 396aefde50aSIan Rogers } 397945aea22SJiri Olsa return test__checkevent_genhw(evlist); 398945aea22SJiri Olsa } 399945aea22SJiri Olsa 40063503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 401a1e12da4SJiri Olsa { 402515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 403a1e12da4SJiri Olsa 4041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 4051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 4061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 4071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 411a1e12da4SJiri Olsa 412a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 413a1e12da4SJiri Olsa } 414a1e12da4SJiri Olsa 41563503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 416a1e12da4SJiri Olsa { 417515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 418a1e12da4SJiri Olsa 4191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 4201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 4211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 4221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 426a1e12da4SJiri Olsa 427a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 428a1e12da4SJiri Olsa } 429a1e12da4SJiri Olsa 43063503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 431945aea22SJiri Olsa { 432515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 433945aea22SJiri Olsa 434945aea22SJiri Olsa 4351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 439945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4408ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 441945aea22SJiri Olsa 442945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 443945aea22SJiri Olsa } 444945aea22SJiri Olsa 44563503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 446945aea22SJiri Olsa { 447515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 448945aea22SJiri Olsa 4491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 453945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4548ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 455945aea22SJiri Olsa 456945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 457945aea22SJiri Olsa } 458945aea22SJiri Olsa 45963503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 460945aea22SJiri Olsa { 461515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 462945aea22SJiri Olsa 4631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 467945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4688ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 469945aea22SJiri Olsa 470945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 471945aea22SJiri Olsa } 472945aea22SJiri Olsa 47363503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 474945aea22SJiri Olsa { 475515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 476945aea22SJiri Olsa 4771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 481945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4828ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 483945aea22SJiri Olsa 484945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 485945aea22SJiri Olsa } 486945aea22SJiri Olsa 48763503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 488945aea22SJiri Olsa { 489515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 490945aea22SJiri Olsa 4911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 495945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4968ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 497945aea22SJiri Olsa 498945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 499945aea22SJiri Olsa } 500945aea22SJiri Olsa 501f0617f52SAdrian Hunter static int test__checkevent_breakpoint_modifier_name(struct evlist *evlist) 502f0617f52SAdrian Hunter { 503f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 504f0617f52SAdrian Hunter 505f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 506f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 507f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 508f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 509f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 510f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 511f0617f52SAdrian Hunter 512f0617f52SAdrian Hunter return test__checkevent_breakpoint(evlist); 513f0617f52SAdrian Hunter } 514f0617f52SAdrian Hunter 515f0617f52SAdrian Hunter static int test__checkevent_breakpoint_x_modifier_name(struct evlist *evlist) 516f0617f52SAdrian Hunter { 517f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 518f0617f52SAdrian Hunter 519f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 520f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 521f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 522f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 523f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 524f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 525f0617f52SAdrian Hunter 526f0617f52SAdrian Hunter return test__checkevent_breakpoint_x(evlist); 527f0617f52SAdrian Hunter } 528f0617f52SAdrian Hunter 529f0617f52SAdrian Hunter static int test__checkevent_breakpoint_r_modifier_name(struct evlist *evlist) 530f0617f52SAdrian Hunter { 531f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 532f0617f52SAdrian Hunter 533f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 534f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 535f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 536f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 537f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 538f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 539f0617f52SAdrian Hunter 540f0617f52SAdrian Hunter return test__checkevent_breakpoint_r(evlist); 541f0617f52SAdrian Hunter } 542f0617f52SAdrian Hunter 543f0617f52SAdrian Hunter static int test__checkevent_breakpoint_w_modifier_name(struct evlist *evlist) 544f0617f52SAdrian Hunter { 545f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 546f0617f52SAdrian Hunter 547f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 548f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 549f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 550f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 551f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 552f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 553f0617f52SAdrian Hunter 554f0617f52SAdrian Hunter return test__checkevent_breakpoint_w(evlist); 555f0617f52SAdrian Hunter } 556f0617f52SAdrian Hunter 557f0617f52SAdrian Hunter static int test__checkevent_breakpoint_rw_modifier_name(struct evlist *evlist) 558f0617f52SAdrian Hunter { 559f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 560f0617f52SAdrian Hunter 561f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 562f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 563f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 564f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 565f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 566f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 567f0617f52SAdrian Hunter 568f0617f52SAdrian Hunter return test__checkevent_breakpoint_rw(evlist); 569f0617f52SAdrian Hunter } 570f0617f52SAdrian Hunter 571f0617f52SAdrian Hunter static int test__checkevent_breakpoint_2_events(struct evlist *evlist) 572f0617f52SAdrian Hunter { 573f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 574f0617f52SAdrian Hunter 575f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 576f0617f52SAdrian Hunter 577f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 578f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint1")); 579f0617f52SAdrian Hunter 580f0617f52SAdrian Hunter evsel = evsel__next(evsel); 581f0617f52SAdrian Hunter 582f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 583f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint2")); 584f0617f52SAdrian Hunter 585f0617f52SAdrian Hunter return TEST_OK; 586f0617f52SAdrian Hunter } 587f0617f52SAdrian Hunter 58863503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 589945aea22SJiri Olsa { 590945aea22SJiri Olsa 591515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 592945aea22SJiri Olsa 5936484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5959854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 10)); 5961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 5971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 598204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 599ee4c7588SJiri Olsa /* 60078e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 601ee4c7588SJiri Olsa * while this test executes only parse events method. 602ee4c7588SJiri Olsa */ 6031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 604945aea22SJiri Olsa 6057741e03eSIan Rogers return TEST_OK; 606945aea22SJiri Olsa } 607945aea22SJiri Olsa 608378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 60963503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 610945aea22SJiri Olsa { 611515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 612945aea22SJiri Olsa 613aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 3 <= evlist->core.nr_entries); 614945aea22SJiri Olsa 615945aea22SJiri Olsa /* r1 */ 616aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT != evsel->core.attr.type); 617aefde50aSIan Rogers while (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) { 6189854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 6201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 621204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 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); 626aefde50aSIan Rogers evsel = evsel__next(evsel); 627aefde50aSIan Rogers } 628945aea22SJiri Olsa 62943f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 6301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 631945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 6321fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 6331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 6341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 638945aea22SJiri Olsa 639945aea22SJiri Olsa /* 1:1:hp */ 640e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 6429854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 6451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 6461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 647945aea22SJiri Olsa 6487741e03eSIan Rogers return TEST_OK; 649945aea22SJiri Olsa } 650378ef0f5SIan Rogers #endif 651945aea22SJiri Olsa 65263503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 653945aea22SJiri Olsa { 654515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 655945aea22SJiri Olsa 656945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 6576484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6599854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6608ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 661945aea22SJiri Olsa 662945aea22SJiri Olsa /* cpu/config=2/u" */ 663e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6646484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6669854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 667945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 6688ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 669945aea22SJiri Olsa 6707741e03eSIan Rogers return TEST_OK; 671945aea22SJiri Olsa } 672945aea22SJiri Olsa 67363503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 67471ef150eSKan Liang { 675515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 67671ef150eSKan Liang 67771ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 6786484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6809854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 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 68971ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 690e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6929854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 69371ef150eSKan Liang /* 69478e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 69571ef150eSKan Liang * while this test executes only parse events method. 69671ef150eSKan Liang */ 6971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 69827de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 6991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 70071ef150eSKan Liang 7017741e03eSIan Rogers return TEST_OK; 70271ef150eSKan Liang } 70371ef150eSKan Liang 70463503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 705945aea22SJiri Olsa { 706515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 707945aea22SJiri Olsa 7086484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 7095a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 7105a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 711945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 7121fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 713945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 7141fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 7151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 7180997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 719945aea22SJiri Olsa 7207741e03eSIan Rogers return TEST_OK; 721945aea22SJiri Olsa } 722945aea22SJiri Olsa 723ffe59788SKan Liang 72463503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 725ffe59788SKan Liang { 72627c9fcfcSIan Rogers struct evsel *evsel = NULL; 727ffe59788SKan Liang 72827c9fcfcSIan Rogers /* 72927c9fcfcSIan Rogers * The wild card event will be opened at least once, but it may be 73027c9fcfcSIan Rogers * opened on each core PMU. 73127c9fcfcSIan Rogers */ 73227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries >= 2); 73327c9fcfcSIan Rogers for (int i = 0; i < evlist->core.nr_entries - 1; i++) { 73427c9fcfcSIan Rogers evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 735ffe59788SKan Liang /* pmu-event:u */ 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.exclusive); 74427c9fcfcSIan Rogers } 745ffe59788SKan Liang /* cpu/pmu-event/u*/ 746e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 74727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong type", evsel__find_pmu(evsel)->is_core); 748ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 7491fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 750ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 7511fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 7521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 7550997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 756ffe59788SKan Liang 7577741e03eSIan Rogers return TEST_OK; 758ffe59788SKan Liang } 759ffe59788SKan Liang 760945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 761945aea22SJiri Olsa { 7626cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 763945aea22SJiri Olsa 764945aea22SJiri Olsa /* config=10 */ 7656cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 766945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 767945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 768945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 769945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 770945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 7714f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 772945aea22SJiri Olsa 773945aea22SJiri Olsa /* config1 */ 7746cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 775945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 776945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 777945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 778945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 779945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 7804f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 781945aea22SJiri Olsa 782945aea22SJiri Olsa /* config2=3 */ 7836cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 784945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 785945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 786945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 787945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 788945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 7894f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 790945aea22SJiri Olsa 791204e7c49SRob Herring /* config3=4 */ 792204e7c49SRob Herring term = list_entry(term->list.next, struct parse_events_term, list); 793204e7c49SRob Herring TEST_ASSERT_VAL("wrong type term", 794204e7c49SRob Herring term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); 795204e7c49SRob Herring TEST_ASSERT_VAL("wrong type val", 796204e7c49SRob Herring term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 797204e7c49SRob Herring TEST_ASSERT_VAL("wrong val", term->val.num == 4); 798204e7c49SRob Herring TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); 799204e7c49SRob Herring 800945aea22SJiri Olsa /* umask=1*/ 8016cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 802945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 803945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 804945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 805945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 806945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 807945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 808945aea22SJiri Olsa 8094929e95aSJiri Olsa /* 8104929e95aSJiri Olsa * read 8114929e95aSJiri Olsa * 8124929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 8134929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 8144929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 8154929e95aSJiri Olsa */ 8164929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 8174929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 81870c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 8194929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 82070c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 82170c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "read")); 82270c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 8234929e95aSJiri Olsa 8244929e95aSJiri Olsa /* 8254929e95aSJiri Olsa * r0xead 8264929e95aSJiri Olsa * 8274929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 8284929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 8294929e95aSJiri Olsa */ 8304929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 8314929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 83270c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 8334929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 83470c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 83570c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead")); 83670c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 8377741e03eSIan Rogers return TEST_OK; 838945aea22SJiri Olsa } 839945aea22SJiri Olsa 84063503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 841945aea22SJiri Olsa { 84232dcd021SJiri Olsa struct evsel *evsel, *leader; 843945aea22SJiri Olsa 84427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 84527c9fcfcSIan Rogers evlist->core.nr_entries == (perf_pmus__num_core_pmus() * 2)); 84627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 84727c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 848945aea22SJiri Olsa 84927c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 850945aea22SJiri Olsa /* instructions:k */ 85127c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 8521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8539854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 8541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 860c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8615643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8622bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 863a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 864945aea22SJiri Olsa 865945aea22SJiri Olsa /* cycles:upp */ 866e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8689854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 872945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 876fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8772bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 878a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 87927c9fcfcSIan Rogers } 8807741e03eSIan Rogers return TEST_OK; 881945aea22SJiri Olsa } 882945aea22SJiri Olsa 88363503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 884945aea22SJiri Olsa { 88527c9fcfcSIan Rogers struct evsel *evsel, *leader = NULL; 886945aea22SJiri Olsa 88727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 88827c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus() + 1)); 88927c9fcfcSIan Rogers /* 89027c9fcfcSIan Rogers * TODO: Currently the software event won't be grouped with the hardware 89127c9fcfcSIan Rogers * event except for 1 PMU. 89227c9fcfcSIan Rogers */ 8939d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 894945aea22SJiri Olsa 89527c9fcfcSIan Rogers evlist__for_each_entry(evlist, evsel) { 89627c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_SOFTWARE) { 897945aea22SJiri Olsa /* faults + :ku modifier */ 89827c9fcfcSIan Rogers leader = evsel; 89927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong config", 90027c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 9011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 904943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 907c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9085643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9092bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 910a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 91127c9fcfcSIan Rogers continue; 91227c9fcfcSIan Rogers } 91327c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_HARDWARE && 91427c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)) { 915945aea22SJiri Olsa /* cache-references + :u modifier */ 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 9181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 9191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 92227c9fcfcSIan Rogers if (evsel__has_leader(evsel, leader)) 9232bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 924a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 92527c9fcfcSIan Rogers continue; 92627c9fcfcSIan Rogers } 927945aea22SJiri Olsa /* cycles:k */ 9281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9299854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 9311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 9331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 936c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 937a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 93827c9fcfcSIan Rogers } 9397741e03eSIan Rogers return TEST_OK; 940945aea22SJiri Olsa } 941945aea22SJiri Olsa 942378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 94363503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 944945aea22SJiri Olsa { 94527c9fcfcSIan Rogers struct evsel *evsel, *group1_leader = NULL, *group2_leader = NULL; 946945aea22SJiri Olsa 94727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 94827c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus() + 2)); 94927c9fcfcSIan Rogers /* 95027c9fcfcSIan Rogers * Currently the software event won't be grouped with the hardware event 95127c9fcfcSIan Rogers * except for 1 PMU. This means there are always just 2 groups 95227c9fcfcSIan Rogers * regardless of the number of core PMUs. 95327c9fcfcSIan Rogers */ 9549d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 955945aea22SJiri Olsa 95627c9fcfcSIan Rogers evlist__for_each_entry(evlist, evsel) { 95727c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT) { 95843f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 95927c9fcfcSIan Rogers group1_leader = evsel; 960945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 96127c9fcfcSIan Rogers evsel->core.attr.sample_type == PERF_TP_SAMPLE_TYPE); 9621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 9631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 969c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 97027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group name", !strcmp(evsel->group_name, "group1")); 9715643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9722bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 973a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 97427c9fcfcSIan Rogers continue; 97527c9fcfcSIan Rogers } 97627c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_HARDWARE && 97727c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)) { 97827c9fcfcSIan Rogers if (evsel->core.attr.exclude_user) { 979945aea22SJiri Olsa /* group1 cycles:kppp */ 98027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", 98127c9fcfcSIan Rogers evsel->core.attr.exclude_user); 98227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", 98327c9fcfcSIan Rogers !evsel->core.attr.exclude_kernel); 9841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 985945aea22SJiri Olsa /* use of precise requires exclude_guest */ 98627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", 98727c9fcfcSIan Rogers evsel->core.attr.exclude_guest); 98827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude host", 98927c9fcfcSIan Rogers !evsel->core.attr.exclude_host); 99027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", 99127c9fcfcSIan Rogers evsel->core.attr.precise_ip == 3); 99227c9fcfcSIan Rogers if (evsel__has_leader(evsel, group1_leader)) { 993945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 99427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group_idx", 99527c9fcfcSIan Rogers evsel__group_idx(evsel) == 1); 99627c9fcfcSIan Rogers } 997a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 99827c9fcfcSIan Rogers } else { 999945aea22SJiri Olsa /* group2 cycles + G modifier */ 100027c9fcfcSIan Rogers group2_leader = evsel; 100127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", 100227c9fcfcSIan Rogers !evsel->core.attr.exclude_kernel); 100327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", 100427c9fcfcSIan Rogers !evsel->core.attr.exclude_hv); 100527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", 100627c9fcfcSIan Rogers !evsel->core.attr.exclude_guest); 100727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude host", 100827c9fcfcSIan Rogers evsel->core.attr.exclude_host); 10091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1010c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 101127c9fcfcSIan Rogers if (evsel->core.nr_members == 2) { 101227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group_idx", 101327c9fcfcSIan Rogers evsel__group_idx(evsel) == 0); 101427c9fcfcSIan Rogers } 1015a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 101627c9fcfcSIan Rogers } 101727c9fcfcSIan Rogers continue; 101827c9fcfcSIan Rogers } 101927c9fcfcSIan Rogers if (evsel->core.attr.type == 1) { 1020945aea22SJiri Olsa /* group2 1:3 + G modifier */ 10219854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 3)); 10221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 102827c9fcfcSIan Rogers if (evsel__has_leader(evsel, group2_leader)) 10292bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1030a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 103127c9fcfcSIan Rogers continue; 103227c9fcfcSIan Rogers } 1033945aea22SJiri Olsa /* instructions:u */ 10341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10359854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 10361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1039943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1042c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 1043a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 104427c9fcfcSIan Rogers } 10457741e03eSIan Rogers return TEST_OK; 1046945aea22SJiri Olsa } 1047378ef0f5SIan Rogers #endif 1048945aea22SJiri Olsa 104963503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 1050945aea22SJiri Olsa { 105132dcd021SJiri Olsa struct evsel *evsel, *leader; 1052945aea22SJiri Olsa 105327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 105427c9fcfcSIan Rogers evlist->core.nr_entries == (perf_pmus__num_core_pmus() * 2)); 105527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 105627c9fcfcSIan Rogers perf_pmus__num_core_pmus() == evlist__nr_groups(evlist)); 1057945aea22SJiri Olsa 105827c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1059945aea22SJiri Olsa /* cycles:u + p */ 106027c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 10611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10629854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1066945aea22SJiri Olsa /* use of precise requires exclude_guest */ 10671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 1070945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1071c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10725643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10732bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1074a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1075945aea22SJiri Olsa 1076945aea22SJiri Olsa /* instructions:kp + p */ 1077e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10799854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 10801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 10811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1083945aea22SJiri Olsa /* use of precise requires exclude_guest */ 10841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 1087fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10882bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1089a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 109027c9fcfcSIan Rogers } 10917741e03eSIan Rogers return TEST_OK; 1092945aea22SJiri Olsa } 1093945aea22SJiri Olsa 109463503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 1095945aea22SJiri Olsa { 109627c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1097945aea22SJiri Olsa 109827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 109927c9fcfcSIan Rogers evlist->core.nr_entries == (5 * perf_pmus__num_core_pmus())); 110027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 110127c9fcfcSIan Rogers evlist__nr_groups(evlist) == (2 * perf_pmus__num_core_pmus())); 1102945aea22SJiri Olsa 110327c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1104945aea22SJiri Olsa /* cycles + G */ 110527c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 11061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11079854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1114945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1115c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11165643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11172bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1118a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1119945aea22SJiri Olsa 1120945aea22SJiri Olsa /* instructions + G */ 1121e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11239854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 11241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1130fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11312bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1132a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 113327c9fcfcSIan Rogers } 113427c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1135945aea22SJiri Olsa /* cycles:G */ 1136e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 11371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11389854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1145945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1146c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11475643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11482bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1149a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1150945aea22SJiri Olsa 1151945aea22SJiri Olsa /* instructions:G */ 1152e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11549854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 11551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1161fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11622bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 116327c9fcfcSIan Rogers } 116427c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1165945aea22SJiri Olsa /* cycles */ 1166e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11689854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1175c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 117627c9fcfcSIan Rogers } 11777741e03eSIan Rogers return TEST_OK; 1178945aea22SJiri Olsa } 1179945aea22SJiri Olsa 118063503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 11815a30a99fSJiri Olsa { 118227c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 11835a30a99fSJiri Olsa 118427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 118527c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 118627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 118727c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 11885a30a99fSJiri Olsa 118927c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 11905a30a99fSJiri Olsa /* cycles + :H group modifier */ 119127c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 11921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11939854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12005a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1201c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 12025643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 12032bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 12045a30a99fSJiri Olsa 12055a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1206e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12089854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1215fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12162bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 121727c9fcfcSIan Rogers } 12187741e03eSIan Rogers return TEST_OK; 12195a30a99fSJiri Olsa } 12205a30a99fSJiri Olsa 122163503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 12225a30a99fSJiri Olsa { 122327c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 12245a30a99fSJiri Olsa 122527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 122627c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 122727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 122827c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 12295a30a99fSJiri Olsa 123027c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 12315a30a99fSJiri Olsa /* cycles + :G group modifier */ 123227c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 12331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12349854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 12351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 12401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12415a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1242c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 12435643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 12442bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 12455a30a99fSJiri Olsa 12465a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1247e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12499854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1256fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12572bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 125827c9fcfcSIan Rogers } 12597741e03eSIan Rogers return TEST_OK; 12605a30a99fSJiri Olsa } 12615a30a99fSJiri Olsa 126263503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 12635a30a99fSJiri Olsa { 126427c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 12655a30a99fSJiri Olsa 126627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 126727c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 126827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 126927c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 12705a30a99fSJiri Olsa 127127c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 12725a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 127327c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 12741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12759854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 12761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 12811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12825a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1283c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 12845643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 12852bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 12865a30a99fSJiri Olsa 12875a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1288e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12909854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1297fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12982bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 129927c9fcfcSIan Rogers } 13007741e03eSIan Rogers return TEST_OK; 13015a30a99fSJiri Olsa } 13025a30a99fSJiri Olsa 130363503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 13045a30a99fSJiri Olsa { 130527c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 13065a30a99fSJiri Olsa 130727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 130827c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 130927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 131027c9fcfcSIan Rogers evlist__nr_groups(evlist) == perf_pmus__num_core_pmus()); 13115a30a99fSJiri Olsa 131227c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 13135a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 131427c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 13151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13169854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 13171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 13211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 13221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 13235a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1324c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 13255643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 13262bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 13275a30a99fSJiri Olsa 13285a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1329e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13319854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 13361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1338fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13392bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 134027c9fcfcSIan Rogers } 13417741e03eSIan Rogers return TEST_OK; 13425a30a99fSJiri Olsa } 13435a30a99fSJiri Olsa 134463503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1345a9f93f97SJiri Olsa { 134627c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1347a9f93f97SJiri Olsa 134827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 134927c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus())); 1350a9f93f97SJiri Olsa 135127c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1352a9f93f97SJiri Olsa /* cycles - sampling group leader */ 135327c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 13541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13559854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 13561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 13581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 13591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 13601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1362a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1363fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1364a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1365a9f93f97SJiri Olsa 1366a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1367e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13699854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 13721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 13731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 13741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1376fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1377a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1378a9f93f97SJiri Olsa 1379a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1380e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13829854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 13831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 13851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 13861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 13871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1389a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1390fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1391a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 139227c9fcfcSIan Rogers } 13937741e03eSIan Rogers return TEST_OK; 1394a9f93f97SJiri Olsa } 1395a9f93f97SJiri Olsa 139663503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1397a9f93f97SJiri Olsa { 139827c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1399a9f93f97SJiri Olsa 140027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 140127c9fcfcSIan Rogers evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus())); 1402a9f93f97SJiri Olsa 140327c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1404a9f93f97SJiri Olsa /* instructions - sampling group leader */ 140527c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 14061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14079854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 14081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 14121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 14131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1414a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1415fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1416a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1417a9f93f97SJiri Olsa 1418a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1419e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14219854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 14221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 14261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 14271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1428a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1429fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1430a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 143127c9fcfcSIan Rogers } 14327741e03eSIan Rogers return TEST_OK; 1433a9f93f97SJiri Olsa } 1434a9f93f97SJiri Olsa 143563503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1436c9ee780fSMichael Ellerman { 143727c9fcfcSIan Rogers struct evsel *evsel = NULL; 1438c9ee780fSMichael Ellerman 143927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 144027c9fcfcSIan Rogers evlist->core.nr_entries == perf_pmus__num_core_pmus()); 144127c9fcfcSIan Rogers 144227c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 144327c9fcfcSIan Rogers evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 14441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 14481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 144927c9fcfcSIan Rogers } 1450c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1451c9ee780fSMichael Ellerman } 1452c9ee780fSMichael Ellerman 145363503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1454c9ee780fSMichael Ellerman { 145527c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1456c9ee780fSMichael Ellerman 145727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 145827c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus())); 1459c9ee780fSMichael Ellerman 146027c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 1461c9ee780fSMichael Ellerman /* cycles - group leader */ 146227c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 14631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14649854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1465c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1466fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 146727c9fcfcSIan Rogers /* TODO: The group modifier is not copied to the split group leader. */ 146827c9fcfcSIan Rogers if (perf_pmus__num_core_pmus() == 1) 14691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1470c9ee780fSMichael Ellerman 1471c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1472e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14749854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 14751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1476c9ee780fSMichael Ellerman 1477c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1478e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14799854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 14801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 148127c9fcfcSIan Rogers } 14827741e03eSIan Rogers return TEST_OK; 1483c9ee780fSMichael Ellerman } 1484c9ee780fSMichael Ellerman 14850997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 14860997a266SAndi Kleen { 14870997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 14880997a266SAndi Kleen 14890997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14900997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14910997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14920997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 14930997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 14940997a266SAndi Kleen 14950997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 14960997a266SAndi Kleen } 14970997a266SAndi Kleen 14980997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 14990997a266SAndi Kleen { 150027c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 15010997a266SAndi Kleen 150227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 150327c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus())); 15040997a266SAndi Kleen 150527c9fcfcSIan Rogers for (int i = 0; i < perf_pmus__num_core_pmus(); i++) { 15060997a266SAndi Kleen /* cycles - group leader */ 150727c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 15080997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 15099854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 15100997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1511fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 151227c9fcfcSIan Rogers /* TODO: The group modifier is not copied to the split group leader. */ 151327c9fcfcSIan Rogers if (perf_pmus__num_core_pmus() == 1) 15140997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 15150997a266SAndi Kleen 15160997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 15170997a266SAndi Kleen evsel = evsel__next(evsel); 15180997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 15199854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 15200997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 15210997a266SAndi Kleen 15220997a266SAndi Kleen /* branch-misses - ditto */ 15230997a266SAndi Kleen evsel = evsel__next(evsel); 15249854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 15250997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 152627c9fcfcSIan Rogers } 15277741e03eSIan Rogers return TEST_OK; 15280997a266SAndi Kleen } 152963503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1530ec32398cSJacob Shin { 1531515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1532ec32398cSJacob Shin 15336484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 15359854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1536ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 15371fc632ceSJiri Olsa evsel->core.attr.bp_type); 1538ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 15391fc632ceSJiri Olsa evsel->core.attr.bp_len); 1540ec32398cSJacob Shin 15417741e03eSIan Rogers return TEST_OK; 1542ec32398cSJacob Shin } 1543ec32398cSJacob Shin 154463503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1545ec32398cSJacob Shin { 1546515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1547ec32398cSJacob Shin 15486484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 15509854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1551ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 15521fc632ceSJiri Olsa evsel->core.attr.bp_type); 1553ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 15541fc632ceSJiri Olsa evsel->core.attr.bp_len); 1555ec32398cSJacob Shin 15567741e03eSIan Rogers return TEST_OK; 1557ec32398cSJacob Shin } 1558ec32398cSJacob Shin 1559ec32398cSJacob Shin static int 156063503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1561ec32398cSJacob Shin { 1562515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1563ec32398cSJacob Shin 15641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 15651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 15661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 15671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1568ec32398cSJacob Shin 1569ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1570ec32398cSJacob Shin } 1571ec32398cSJacob Shin 157263503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1573ddd83c97SJiri Olsa { 1574515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1575ddd83c97SJiri Olsa 157627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 157727c9fcfcSIan Rogers evlist->core.nr_entries == (1 + perf_pmus__num_core_pmus())); 15781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 15799854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK)); 15807741e03eSIan Rogers return TEST_OK; 1581ddd83c97SJiri Olsa } 1582ddd83c97SJiri Olsa 158363503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 158410bf358aSWang Nan { 1585515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 158610bf358aSWang Nan 1587ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn")); 15887741e03eSIan Rogers return TEST_OK; 158910bf358aSWang Nan } 159010bf358aSWang Nan 159163503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 159210bf358aSWang Nan { 1593515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 159410bf358aSWang Nan 1595ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu")); 15967741e03eSIan Rogers return TEST_OK; 159710bf358aSWang Nan } 159810bf358aSWang Nan 159963503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 160010bf358aSWang Nan { 1601515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 160210bf358aSWang Nan 1603ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu")); 16047741e03eSIan Rogers return TEST_OK; 160510bf358aSWang Nan } 160610bf358aSWang Nan 160763503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 160843d0b978SWang Nan { 1609515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 161043d0b978SWang Nan 1611ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu")); 16124a7c4eafSIan Rogers return test__checkevent_genhw(evlist); 161343d0b978SWang Nan } 161410bf358aSWang Nan 16158f8c1068SIan Rogers static bool test__pmu_cpu_valid(void) 16168f8c1068SIan Rogers { 16171eaf496eSIan Rogers return !!perf_pmus__find("cpu"); 16188f8c1068SIan Rogers } 16198f8c1068SIan Rogers 162016ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 162116ddcfbfSJiri Olsa { 16221eaf496eSIan Rogers return !!perf_pmus__find("intel_pt"); 162316ddcfbfSJiri Olsa } 162416ddcfbfSJiri Olsa 162563503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1626b3f58c8dSArnaldo Carvalho de Melo { 1627515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1628b3f58c8dSArnaldo Carvalho de Melo 1629ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u")); 16307741e03eSIan Rogers return TEST_OK; 1631b3f58c8dSArnaldo Carvalho de Melo } 1632b3f58c8dSArnaldo Carvalho de Melo 163363503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 163406dc5bf2SAlexey Budankov { 1635515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 163606dc5bf2SAlexey Budankov 16379854934bSIan Rogers TEST_ASSERT_VAL("wrong complex name parsing", 16389854934bSIan Rogers evsel__name_is(evsel, 16399854934bSIan Rogers "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks")); 16407741e03eSIan Rogers return TEST_OK; 164106dc5bf2SAlexey Budankov } 164206dc5bf2SAlexey Budankov 16433a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 16443a6c51e4SJiri Olsa { 16453a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 16463a6c51e4SJiri Olsa 16473a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16483a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 16499854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 16507741e03eSIan Rogers return TEST_OK; 16513a6c51e4SJiri Olsa } 16523a6c51e4SJiri Olsa 165363503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1654714a92d8SJiri Olsa { 1655515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1656714a92d8SJiri Olsa 16571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16589854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 16607741e03eSIan Rogers return TEST_OK; 1661714a92d8SJiri Olsa } 1662714a92d8SJiri Olsa 166363503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1664714a92d8SJiri Olsa { 1665515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1666714a92d8SJiri Olsa 16671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16689854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 16707741e03eSIan Rogers return TEST_OK; 1671714a92d8SJiri Olsa } 1672714a92d8SJiri Olsa 1673e831f3ccSIan Rogers static int test__term_equal_term(struct evlist *evlist) 1674e831f3ccSIan Rogers { 1675e831f3ccSIan Rogers struct evsel *evsel = evlist__first(evlist); 1676e831f3ccSIan Rogers 1677e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 1678e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1679e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "name") == 0); 1680e831f3ccSIan Rogers return TEST_OK; 1681e831f3ccSIan Rogers } 1682e831f3ccSIan Rogers 16832aadca4bSIan Rogers static int test__term_equal_legacy(struct evlist *evlist) 16842aadca4bSIan Rogers { 16852aadca4bSIan Rogers struct evsel *evsel = evlist__first(evlist); 16862aadca4bSIan Rogers 16872aadca4bSIan Rogers TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16882aadca4bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16892aadca4bSIan Rogers TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "l1d") == 0); 16902aadca4bSIan Rogers return TEST_OK; 16912aadca4bSIan Rogers } 16922aadca4bSIan Rogers 1693378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 169482ce75d9SJiri Olsa static int count_tracepoints(void) 169582ce75d9SJiri Olsa { 169682ce75d9SJiri Olsa struct dirent *events_ent; 169782ce75d9SJiri Olsa DIR *events_dir; 169882ce75d9SJiri Olsa int cnt = 0; 169982ce75d9SJiri Olsa 17007014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 170182ce75d9SJiri Olsa 170282ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 170382ce75d9SJiri Olsa 170482ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 170525a7d914SArnaldo Carvalho de Melo char *sys_path; 170682ce75d9SJiri Olsa struct dirent *sys_ent; 170782ce75d9SJiri Olsa DIR *sys_dir; 170882ce75d9SJiri Olsa 170982ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 171082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 171182ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 171282ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 171382ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 171482ce75d9SJiri Olsa continue; 171582ce75d9SJiri Olsa 171625a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 171725a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 171882ce75d9SJiri Olsa 171982ce75d9SJiri Olsa sys_dir = opendir(sys_path); 172082ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 172182ce75d9SJiri Olsa 172282ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 172382ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 172482ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 172582ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 172682ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 172782ce75d9SJiri Olsa continue; 172882ce75d9SJiri Olsa 172982ce75d9SJiri Olsa cnt++; 173082ce75d9SJiri Olsa } 173182ce75d9SJiri Olsa 173282ce75d9SJiri Olsa closedir(sys_dir); 173325a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 173482ce75d9SJiri Olsa } 173582ce75d9SJiri Olsa 173682ce75d9SJiri Olsa closedir(events_dir); 173782ce75d9SJiri Olsa return cnt; 173882ce75d9SJiri Olsa } 173982ce75d9SJiri Olsa 174063503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 174182ce75d9SJiri Olsa { 174282ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 17436484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 174482ce75d9SJiri Olsa 174582ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 174682ce75d9SJiri Olsa } 1747378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 174882ce75d9SJiri Olsa 174923b6339bSArnaldo Carvalho de Melo struct evlist_test { 1750945aea22SJiri Olsa const char *name; 175116ddcfbfSJiri Olsa bool (*valid)(void); 175263503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1753945aea22SJiri Olsa }; 1754945aea22SJiri Olsa 17558252e791SIan Rogers static const struct evlist_test test__events[] = { 1756378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1757615b8f99SAlexander Yarygin { 175843f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1759945aea22SJiri Olsa .check = test__checkevent_tracepoint, 17608252e791SIan Rogers /* 0 */ 1761945aea22SJiri Olsa }, 1762615b8f99SAlexander Yarygin { 1763945aea22SJiri Olsa .name = "syscalls:*", 1764945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 17658252e791SIan Rogers /* 1 */ 1766945aea22SJiri Olsa }, 1767378ef0f5SIan Rogers #endif 1768615b8f99SAlexander Yarygin { 1769945aea22SJiri Olsa .name = "r1a", 1770945aea22SJiri Olsa .check = test__checkevent_raw, 17718252e791SIan Rogers /* 2 */ 1772945aea22SJiri Olsa }, 1773615b8f99SAlexander Yarygin { 1774945aea22SJiri Olsa .name = "1:1", 1775945aea22SJiri Olsa .check = test__checkevent_numeric, 17768252e791SIan Rogers /* 3 */ 1777945aea22SJiri Olsa }, 1778615b8f99SAlexander Yarygin { 1779945aea22SJiri Olsa .name = "instructions", 1780945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 17818252e791SIan Rogers /* 4 */ 1782945aea22SJiri Olsa }, 1783615b8f99SAlexander Yarygin { 1784945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1785945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 17868252e791SIan Rogers /* 5 */ 1787945aea22SJiri Olsa }, 1788615b8f99SAlexander Yarygin { 1789945aea22SJiri Olsa .name = "faults", 1790945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 17918252e791SIan Rogers /* 6 */ 1792945aea22SJiri Olsa }, 1793615b8f99SAlexander Yarygin { 1794945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1795945aea22SJiri Olsa .check = test__checkevent_genhw, 17968252e791SIan Rogers /* 7 */ 1797945aea22SJiri Olsa }, 1798615b8f99SAlexander Yarygin { 1799945aea22SJiri Olsa .name = "mem:0", 1800945aea22SJiri Olsa .check = test__checkevent_breakpoint, 18018252e791SIan Rogers /* 8 */ 1802945aea22SJiri Olsa }, 1803615b8f99SAlexander Yarygin { 1804945aea22SJiri Olsa .name = "mem:0:x", 1805945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 18068252e791SIan Rogers /* 9 */ 1807945aea22SJiri Olsa }, 1808615b8f99SAlexander Yarygin { 1809945aea22SJiri Olsa .name = "mem:0:r", 1810945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 18118252e791SIan Rogers /* 0 */ 1812945aea22SJiri Olsa }, 1813615b8f99SAlexander Yarygin { 1814945aea22SJiri Olsa .name = "mem:0:w", 1815945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 18168252e791SIan Rogers /* 1 */ 1817945aea22SJiri Olsa }, 1818378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1819615b8f99SAlexander Yarygin { 182043f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1821945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 18228252e791SIan Rogers /* 2 */ 1823945aea22SJiri Olsa }, 1824615b8f99SAlexander Yarygin { 1825945aea22SJiri Olsa .name = "syscalls:*:u", 1826945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 18278252e791SIan Rogers /* 3 */ 1828945aea22SJiri Olsa }, 1829378ef0f5SIan Rogers #endif 1830615b8f99SAlexander Yarygin { 1831945aea22SJiri Olsa .name = "r1a:kp", 1832945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 18338252e791SIan Rogers /* 4 */ 1834945aea22SJiri Olsa }, 1835615b8f99SAlexander Yarygin { 1836945aea22SJiri Olsa .name = "1:1:hp", 1837945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 18388252e791SIan Rogers /* 5 */ 1839945aea22SJiri Olsa }, 1840615b8f99SAlexander Yarygin { 1841945aea22SJiri Olsa .name = "instructions:h", 1842945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 18438252e791SIan Rogers /* 6 */ 1844945aea22SJiri Olsa }, 1845615b8f99SAlexander Yarygin { 1846945aea22SJiri Olsa .name = "faults:u", 1847945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 18488252e791SIan Rogers /* 7 */ 1849945aea22SJiri Olsa }, 1850615b8f99SAlexander Yarygin { 1851945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1852945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 18538252e791SIan Rogers /* 8 */ 1854945aea22SJiri Olsa }, 1855615b8f99SAlexander Yarygin { 1856945aea22SJiri Olsa .name = "mem:0:u", 1857945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 18588252e791SIan Rogers /* 9 */ 1859945aea22SJiri Olsa }, 1860615b8f99SAlexander Yarygin { 1861945aea22SJiri Olsa .name = "mem:0:x:k", 1862945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 18638252e791SIan Rogers /* 0 */ 1864945aea22SJiri Olsa }, 1865615b8f99SAlexander Yarygin { 1866945aea22SJiri Olsa .name = "mem:0:r:hp", 1867945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 18688252e791SIan Rogers /* 1 */ 1869945aea22SJiri Olsa }, 1870615b8f99SAlexander Yarygin { 1871945aea22SJiri Olsa .name = "mem:0:w:up", 1872945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 18738252e791SIan Rogers /* 2 */ 1874945aea22SJiri Olsa }, 1875378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1876615b8f99SAlexander Yarygin { 187743f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1878945aea22SJiri Olsa .check = test__checkevent_list, 18798252e791SIan Rogers /* 3 */ 1880945aea22SJiri Olsa }, 1881378ef0f5SIan Rogers #endif 1882615b8f99SAlexander Yarygin { 1883945aea22SJiri Olsa .name = "instructions:G", 1884945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 18858252e791SIan Rogers /* 4 */ 1886945aea22SJiri Olsa }, 1887615b8f99SAlexander Yarygin { 1888945aea22SJiri Olsa .name = "instructions:H", 1889945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 18908252e791SIan Rogers /* 5 */ 1891945aea22SJiri Olsa }, 1892615b8f99SAlexander Yarygin { 1893945aea22SJiri Olsa .name = "mem:0:rw", 1894945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 18958252e791SIan Rogers /* 6 */ 1896945aea22SJiri Olsa }, 1897615b8f99SAlexander Yarygin { 1898945aea22SJiri Olsa .name = "mem:0:rw:kp", 1899945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 19008252e791SIan Rogers /* 7 */ 1901945aea22SJiri Olsa }, 1902615b8f99SAlexander Yarygin { 1903945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1904945aea22SJiri Olsa .check = test__group1, 19058252e791SIan Rogers /* 8 */ 1906945aea22SJiri Olsa }, 1907615b8f99SAlexander Yarygin { 1908945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1909945aea22SJiri Olsa .check = test__group2, 19108252e791SIan Rogers /* 9 */ 1911945aea22SJiri Olsa }, 1912378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1913615b8f99SAlexander Yarygin { 191443f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1915945aea22SJiri Olsa .check = test__group3, 19168252e791SIan Rogers /* 0 */ 1917945aea22SJiri Olsa }, 1918378ef0f5SIan Rogers #endif 1919615b8f99SAlexander Yarygin { 1920945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1921945aea22SJiri Olsa .check = test__group4, 19228252e791SIan Rogers /* 1 */ 1923945aea22SJiri Olsa }, 1924615b8f99SAlexander Yarygin { 1925945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1926945aea22SJiri Olsa .check = test__group5, 19278252e791SIan Rogers /* 2 */ 1928945aea22SJiri Olsa }, 1929378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1930615b8f99SAlexander Yarygin { 193182ce75d9SJiri Olsa .name = "*:*", 193282ce75d9SJiri Olsa .check = test__all_tracepoints, 19338252e791SIan Rogers /* 3 */ 193482ce75d9SJiri Olsa }, 1935378ef0f5SIan Rogers #endif 1936615b8f99SAlexander Yarygin { 19375a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 19385a30a99fSJiri Olsa .check = test__group_gh1, 19398252e791SIan Rogers /* 4 */ 19405a30a99fSJiri Olsa }, 1941615b8f99SAlexander Yarygin { 19425a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 19435a30a99fSJiri Olsa .check = test__group_gh2, 19448252e791SIan Rogers /* 5 */ 19455a30a99fSJiri Olsa }, 1946615b8f99SAlexander Yarygin { 19475a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 19485a30a99fSJiri Olsa .check = test__group_gh3, 19498252e791SIan Rogers /* 6 */ 19505a30a99fSJiri Olsa }, 1951615b8f99SAlexander Yarygin { 19525a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 19535a30a99fSJiri Olsa .check = test__group_gh4, 19548252e791SIan Rogers /* 7 */ 19555a30a99fSJiri Olsa }, 1956615b8f99SAlexander Yarygin { 1957a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1958a9f93f97SJiri Olsa .check = test__leader_sample1, 19598252e791SIan Rogers /* 8 */ 1960a9f93f97SJiri Olsa }, 1961615b8f99SAlexander Yarygin { 1962a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1963a9f93f97SJiri Olsa .check = test__leader_sample2, 19648252e791SIan Rogers /* 9 */ 1965a9f93f97SJiri Olsa }, 1966615b8f99SAlexander Yarygin { 1967c9ee780fSMichael Ellerman .name = "instructions:uDp", 1968c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 19698252e791SIan Rogers /* 0 */ 1970c9ee780fSMichael Ellerman }, 1971615b8f99SAlexander Yarygin { 1972c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1973c9ee780fSMichael Ellerman .check = test__pinned_group, 19748252e791SIan Rogers /* 1 */ 1975c9ee780fSMichael Ellerman }, 1976ec32398cSJacob Shin { 1977ec32398cSJacob Shin .name = "mem:0/1", 1978ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 19798252e791SIan Rogers /* 2 */ 1980ec32398cSJacob Shin }, 1981ec32398cSJacob Shin { 1982ec32398cSJacob Shin .name = "mem:0/2:w", 1983ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 19848252e791SIan Rogers /* 3 */ 1985ec32398cSJacob Shin }, 1986ec32398cSJacob Shin { 1987ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1988ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 19898252e791SIan Rogers /* 4 */ 1990ec32398cSJacob Shin }, 1991378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 1992c0bc8c6dSAlexander Yarygin { 1993c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1994c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 199553fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 19968252e791SIan Rogers /* 0 */ 1997c0bc8c6dSAlexander Yarygin }, 1998c0bc8c6dSAlexander Yarygin #endif 1999a1e12da4SJiri Olsa { 2000a1e12da4SJiri Olsa .name = "instructions:I", 2001a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 20028252e791SIan Rogers /* 5 */ 2003a1e12da4SJiri Olsa }, 2004a1e12da4SJiri Olsa { 2005a1e12da4SJiri Olsa .name = "instructions:kIG", 2006a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 20078252e791SIan Rogers /* 6 */ 2008a1e12da4SJiri Olsa }, 2009ddd83c97SJiri Olsa { 2010ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 2011ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 20128252e791SIan Rogers /* 7 */ 2013ddd83c97SJiri Olsa }, 201410bf358aSWang Nan { 201510bf358aSWang Nan .name = "instructions/name=insn/", 201610bf358aSWang Nan .check = test__checkevent_config_symbol, 20178252e791SIan Rogers /* 8 */ 201810bf358aSWang Nan }, 201910bf358aSWang Nan { 202010bf358aSWang Nan .name = "r1234/name=rawpmu/", 202110bf358aSWang Nan .check = test__checkevent_config_raw, 20228252e791SIan Rogers /* 9 */ 202310bf358aSWang Nan }, 202410bf358aSWang Nan { 202510bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 202610bf358aSWang Nan .check = test__checkevent_config_num, 20278252e791SIan Rogers /* 0 */ 202810bf358aSWang Nan }, 202943d0b978SWang Nan { 203043d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 203143d0b978SWang Nan .check = test__checkevent_config_cache, 20328252e791SIan Rogers /* 1 */ 203343d0b978SWang Nan }, 2034b3f58c8dSArnaldo Carvalho de Melo { 2035b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 203616ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 2037b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 20388252e791SIan Rogers /* 2 */ 2039b3f58c8dSArnaldo Carvalho de Melo }, 204006dc5bf2SAlexey Budankov { 204106dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 204206dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 20438252e791SIan Rogers /* 3 */ 2044714a92d8SJiri Olsa }, 2045714a92d8SJiri Olsa { 2046714a92d8SJiri Olsa .name = "cycles//u", 2047714a92d8SJiri Olsa .check = test__sym_event_slash, 20488252e791SIan Rogers /* 4 */ 2049714a92d8SJiri Olsa }, 2050714a92d8SJiri Olsa { 2051714a92d8SJiri Olsa .name = "cycles:k", 2052714a92d8SJiri Olsa .check = test__sym_event_dc, 20538252e791SIan Rogers /* 5 */ 20540997a266SAndi Kleen }, 20550997a266SAndi Kleen { 20560997a266SAndi Kleen .name = "instructions:uep", 20570997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 20588252e791SIan Rogers /* 6 */ 20590997a266SAndi Kleen }, 20600997a266SAndi Kleen { 20610997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 20620997a266SAndi Kleen .check = test__exclusive_group, 20638252e791SIan Rogers /* 7 */ 20640997a266SAndi Kleen }, 2065e831f3ccSIan Rogers { 2066e831f3ccSIan Rogers .name = "cycles/name=name/", 2067e831f3ccSIan Rogers .check = test__term_equal_term, 2068e831f3ccSIan Rogers /* 8 */ 2069e831f3ccSIan Rogers }, 20702aadca4bSIan Rogers { 20712aadca4bSIan Rogers .name = "cycles/name=l1d/", 20722aadca4bSIan Rogers .check = test__term_equal_legacy, 20732aadca4bSIan Rogers /* 9 */ 20742aadca4bSIan Rogers }, 2075f0617f52SAdrian Hunter { 2076f0617f52SAdrian Hunter .name = "mem:0/name=breakpoint/", 2077f0617f52SAdrian Hunter .check = test__checkevent_breakpoint, 2078f0617f52SAdrian Hunter /* 0 */ 2079f0617f52SAdrian Hunter }, 2080f0617f52SAdrian Hunter { 2081f0617f52SAdrian Hunter .name = "mem:0:x/name=breakpoint/", 2082f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_x, 2083f0617f52SAdrian Hunter /* 1 */ 2084f0617f52SAdrian Hunter }, 2085f0617f52SAdrian Hunter { 2086f0617f52SAdrian Hunter .name = "mem:0:r/name=breakpoint/", 2087f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_r, 2088f0617f52SAdrian Hunter /* 2 */ 2089f0617f52SAdrian Hunter }, 2090f0617f52SAdrian Hunter { 2091f0617f52SAdrian Hunter .name = "mem:0:w/name=breakpoint/", 2092f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_w, 2093f0617f52SAdrian Hunter /* 3 */ 2094f0617f52SAdrian Hunter }, 2095f0617f52SAdrian Hunter { 2096f0617f52SAdrian Hunter .name = "mem:0/name=breakpoint/u", 2097f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_modifier_name, 2098f0617f52SAdrian Hunter /* 4 */ 2099f0617f52SAdrian Hunter }, 2100f0617f52SAdrian Hunter { 2101f0617f52SAdrian Hunter .name = "mem:0:x/name=breakpoint/k", 2102f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_x_modifier_name, 2103f0617f52SAdrian Hunter /* 5 */ 2104f0617f52SAdrian Hunter }, 2105f0617f52SAdrian Hunter { 2106f0617f52SAdrian Hunter .name = "mem:0:r/name=breakpoint/hp", 2107f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_r_modifier_name, 2108f0617f52SAdrian Hunter /* 6 */ 2109f0617f52SAdrian Hunter }, 2110f0617f52SAdrian Hunter { 2111f0617f52SAdrian Hunter .name = "mem:0:w/name=breakpoint/up", 2112f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_w_modifier_name, 2113f0617f52SAdrian Hunter /* 7 */ 2114f0617f52SAdrian Hunter }, 2115f0617f52SAdrian Hunter { 2116f0617f52SAdrian Hunter .name = "mem:0:rw/name=breakpoint/", 2117f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_rw, 2118f0617f52SAdrian Hunter /* 8 */ 2119f0617f52SAdrian Hunter }, 2120f0617f52SAdrian Hunter { 2121f0617f52SAdrian Hunter .name = "mem:0:rw/name=breakpoint/kp", 2122f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_rw_modifier_name, 2123f0617f52SAdrian Hunter /* 9 */ 2124f0617f52SAdrian Hunter }, 2125f0617f52SAdrian Hunter { 2126f0617f52SAdrian Hunter .name = "mem:0/1/name=breakpoint/", 2127f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len, 2128f0617f52SAdrian Hunter /* 0 */ 2129f0617f52SAdrian Hunter }, 2130f0617f52SAdrian Hunter { 2131f0617f52SAdrian Hunter .name = "mem:0/2:w/name=breakpoint/", 2132f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len_w, 2133f0617f52SAdrian Hunter /* 1 */ 2134f0617f52SAdrian Hunter }, 2135f0617f52SAdrian Hunter { 2136f0617f52SAdrian Hunter .name = "mem:0/4:rw/name=breakpoint/u", 2137f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len_rw_modifier, 2138f0617f52SAdrian Hunter /* 2 */ 2139f0617f52SAdrian Hunter }, 2140f0617f52SAdrian Hunter { 2141f0617f52SAdrian Hunter .name = "mem:0/1/name=breakpoint1/,mem:0/4:rw/name=breakpoint2/", 2142f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_2_events, 2143f0617f52SAdrian Hunter /* 3 */ 2144f0617f52SAdrian Hunter }, 2145945aea22SJiri Olsa }; 2146945aea22SJiri Olsa 21478252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 2148615b8f99SAlexander Yarygin { 2149945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 21508f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 2151945aea22SJiri Olsa .check = test__checkevent_pmu, 21528252e791SIan Rogers /* 0 */ 2153945aea22SJiri Olsa }, 2154615b8f99SAlexander Yarygin { 2155945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 21568f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 2157945aea22SJiri Olsa .check = test__checkevent_pmu_name, 21588252e791SIan Rogers /* 1 */ 2159945aea22SJiri Olsa }, 216071ef150eSKan Liang { 216171ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 21628f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 216371ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 21648252e791SIan Rogers /* 2 */ 216571ef150eSKan Liang }, 216606dc5bf2SAlexey Budankov { 2167a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 21688f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 216906dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 21708252e791SIan Rogers /* 3 */ 21713a6c51e4SJiri Olsa }, 21723a6c51e4SJiri Olsa { 21733a6c51e4SJiri Olsa .name = "software/r1a/", 21743a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 21758252e791SIan Rogers /* 4 */ 21763a6c51e4SJiri Olsa }, 2177c33cdf54SJiri Olsa { 2178c33cdf54SJiri Olsa .name = "software/r0x1a/", 2179c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 21808252e791SIan Rogers /* 5 */ 2181c33cdf54SJiri Olsa }, 21826fd1e519SIan Rogers { 21836fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/", 21846fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 21856fd1e519SIan Rogers .check = test__checkevent_genhw, 21866fd1e519SIan Rogers /* 6 */ 21876fd1e519SIan Rogers }, 21886fd1e519SIan Rogers { 21896fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/kp", 21906fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 21916fd1e519SIan Rogers .check = test__checkevent_genhw_modifier, 21926fd1e519SIan Rogers /* 7 */ 21936fd1e519SIan Rogers }, 21946fd1e519SIan Rogers { 21956fd1e519SIan Rogers .name = "cpu/L1-dcache-misses,name=cachepmu/", 21966fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 21976fd1e519SIan Rogers .check = test__checkevent_config_cache, 21986fd1e519SIan Rogers /* 8 */ 21996fd1e519SIan Rogers }, 22005ea8f2ccSIan Rogers { 22015ea8f2ccSIan Rogers .name = "cpu/instructions/", 22025ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22035ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name, 22045ea8f2ccSIan Rogers /* 9 */ 22055ea8f2ccSIan Rogers }, 22065ea8f2ccSIan Rogers { 22075ea8f2ccSIan Rogers .name = "cpu/cycles,period=100000,config2/", 22085ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22095ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_config, 22105ea8f2ccSIan Rogers /* 0 */ 22115ea8f2ccSIan Rogers }, 22125ea8f2ccSIan Rogers { 22135ea8f2ccSIan Rogers .name = "cpu/instructions/h", 22145ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22155ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_modifier, 22165ea8f2ccSIan Rogers /* 1 */ 22175ea8f2ccSIan Rogers }, 22185ea8f2ccSIan Rogers { 22195ea8f2ccSIan Rogers .name = "cpu/instructions/G", 22205ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22215ea8f2ccSIan Rogers .check = test__checkevent_exclude_host_modifier, 22225ea8f2ccSIan Rogers /* 2 */ 22235ea8f2ccSIan Rogers }, 22245ea8f2ccSIan Rogers { 22255ea8f2ccSIan Rogers .name = "cpu/instructions/H", 22265ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22275ea8f2ccSIan Rogers .check = test__checkevent_exclude_guest_modifier, 22285ea8f2ccSIan Rogers /* 3 */ 22295ea8f2ccSIan Rogers }, 22305ea8f2ccSIan Rogers { 22315ea8f2ccSIan Rogers .name = "{cpu/instructions/k,cpu/cycles/upp}", 22325ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22335ea8f2ccSIan Rogers .check = test__group1, 22345ea8f2ccSIan Rogers /* 4 */ 22355ea8f2ccSIan Rogers }, 22365ea8f2ccSIan Rogers { 22375ea8f2ccSIan Rogers .name = "{cpu/cycles/u,cpu/instructions/kp}:p", 22385ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22395ea8f2ccSIan Rogers .check = test__group4, 22405ea8f2ccSIan Rogers /* 5 */ 22415ea8f2ccSIan Rogers }, 22425ea8f2ccSIan Rogers { 22435ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/G}:H", 22445ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22455ea8f2ccSIan Rogers .check = test__group_gh1, 22465ea8f2ccSIan Rogers /* 6 */ 22475ea8f2ccSIan Rogers }, 22485ea8f2ccSIan Rogers { 22495ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/H}:G", 22505ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22515ea8f2ccSIan Rogers .check = test__group_gh2, 22525ea8f2ccSIan Rogers /* 7 */ 22535ea8f2ccSIan Rogers }, 22545ea8f2ccSIan Rogers { 22555ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:u", 22565ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22575ea8f2ccSIan Rogers .check = test__group_gh3, 22585ea8f2ccSIan Rogers /* 8 */ 22595ea8f2ccSIan Rogers }, 22605ea8f2ccSIan Rogers { 22615ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:uG", 22625ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22635ea8f2ccSIan Rogers .check = test__group_gh4, 22645ea8f2ccSIan Rogers /* 9 */ 22655ea8f2ccSIan Rogers }, 22665ea8f2ccSIan Rogers { 22675ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S", 22685ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22695ea8f2ccSIan Rogers .check = test__leader_sample1, 22705ea8f2ccSIan Rogers /* 0 */ 22715ea8f2ccSIan Rogers }, 22725ea8f2ccSIan Rogers { 22735ea8f2ccSIan Rogers .name = "{cpu/instructions/,cpu/branch-misses/}:Su", 22745ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22755ea8f2ccSIan Rogers .check = test__leader_sample2, 22765ea8f2ccSIan Rogers /* 1 */ 22775ea8f2ccSIan Rogers }, 22785ea8f2ccSIan Rogers { 22795ea8f2ccSIan Rogers .name = "cpu/instructions/uDp", 22805ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22815ea8f2ccSIan Rogers .check = test__checkevent_pinned_modifier, 22825ea8f2ccSIan Rogers /* 2 */ 22835ea8f2ccSIan Rogers }, 22845ea8f2ccSIan Rogers { 22855ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D", 22865ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22875ea8f2ccSIan Rogers .check = test__pinned_group, 22885ea8f2ccSIan Rogers /* 3 */ 22895ea8f2ccSIan Rogers }, 22905ea8f2ccSIan Rogers { 22915ea8f2ccSIan Rogers .name = "cpu/instructions/I", 22925ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22935ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier, 22945ea8f2ccSIan Rogers /* 4 */ 22955ea8f2ccSIan Rogers }, 22965ea8f2ccSIan Rogers { 22975ea8f2ccSIan Rogers .name = "cpu/instructions/kIG", 22985ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22995ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier_1, 23005ea8f2ccSIan Rogers /* 5 */ 23015ea8f2ccSIan Rogers }, 23025ea8f2ccSIan Rogers { 23035ea8f2ccSIan Rogers .name = "cpu/cycles/u", 23045ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23055ea8f2ccSIan Rogers .check = test__sym_event_slash, 23065ea8f2ccSIan Rogers /* 6 */ 23075ea8f2ccSIan Rogers }, 23085ea8f2ccSIan Rogers { 23095ea8f2ccSIan Rogers .name = "cpu/cycles/k", 23105ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23115ea8f2ccSIan Rogers .check = test__sym_event_dc, 23125ea8f2ccSIan Rogers /* 7 */ 23135ea8f2ccSIan Rogers }, 23145ea8f2ccSIan Rogers { 23155ea8f2ccSIan Rogers .name = "cpu/instructions/uep", 23165ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23175ea8f2ccSIan Rogers .check = test__checkevent_exclusive_modifier, 23185ea8f2ccSIan Rogers /* 8 */ 23195ea8f2ccSIan Rogers }, 23205ea8f2ccSIan Rogers { 23215ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e", 23225ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23235ea8f2ccSIan Rogers .check = test__exclusive_group, 23245ea8f2ccSIan Rogers /* 9 */ 23255ea8f2ccSIan Rogers }, 2326e831f3ccSIan Rogers { 2327e831f3ccSIan Rogers .name = "cpu/cycles,name=name/", 2328e831f3ccSIan Rogers .valid = test__pmu_cpu_valid, 2329e831f3ccSIan Rogers .check = test__term_equal_term, 2330e831f3ccSIan Rogers /* 0 */ 2331e831f3ccSIan Rogers }, 23322aadca4bSIan Rogers { 23332aadca4bSIan Rogers .name = "cpu/cycles,name=l1d/", 23342aadca4bSIan Rogers .valid = test__pmu_cpu_valid, 23352aadca4bSIan Rogers .check = test__term_equal_legacy, 23362aadca4bSIan Rogers /* 1 */ 23372aadca4bSIan Rogers }, 2338945aea22SJiri Olsa }; 2339945aea22SJiri Olsa 234023b6339bSArnaldo Carvalho de Melo struct terms_test { 2341945aea22SJiri Olsa const char *str; 2342945aea22SJiri Olsa int (*check)(struct list_head *terms); 2343945aea22SJiri Olsa }; 2344945aea22SJiri Olsa 2345b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2346945aea22SJiri Olsa [0] = { 2347204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 2348945aea22SJiri Olsa .check = test__checkterms_simple, 2349945aea22SJiri Olsa }, 2350945aea22SJiri Olsa }; 2351945aea22SJiri Olsa 23528252e791SIan Rogers static int test_event(const struct evlist_test *e) 2353945aea22SJiri Olsa { 2354a910e466SIan Rogers struct parse_events_error err; 235563503dbaSJiri Olsa struct evlist *evlist; 2356945aea22SJiri Olsa int ret; 2357945aea22SJiri Olsa 235816ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 23597741e03eSIan Rogers pr_debug("... SKIP\n"); 23607741e03eSIan Rogers return TEST_OK; 236116ddcfbfSJiri Olsa } 236216ddcfbfSJiri Olsa 23630f98b11cSJiri Olsa evlist = evlist__new(); 23647741e03eSIan Rogers if (evlist == NULL) { 23657741e03eSIan Rogers pr_err("Failed allocation"); 23667741e03eSIan Rogers return TEST_FAIL; 23677741e03eSIan Rogers } 236807eafd4eSIan Rogers parse_events_error__init(&err); 2369933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2370945aea22SJiri Olsa if (ret) { 2371933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2372933ccf20SJiri Olsa e->name, ret, err.str); 23736c191289SIan Rogers parse_events_error__print(&err, e->name); 23747741e03eSIan Rogers ret = TEST_FAIL; 2375aefde50aSIan Rogers if (err.str && strstr(err.str, "can't access trace events")) 23767741e03eSIan Rogers ret = TEST_SKIP; 23772d4352c0SArnaldo Carvalho de Melo } else { 23782d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2379945aea22SJiri Olsa } 238007eafd4eSIan Rogers parse_events_error__exit(&err); 2381c12995a5SJiri Olsa evlist__delete(evlist); 2382945aea22SJiri Olsa 2383945aea22SJiri Olsa return ret; 2384945aea22SJiri Olsa } 2385945aea22SJiri Olsa 2386b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2387b4a7276cSJohn Garry { 2388b4a7276cSJohn Garry struct parse_events_error err; 2389b4a7276cSJohn Garry struct evlist *evlist; 2390b4a7276cSJohn Garry int ret; 2391b4a7276cSJohn Garry 2392b4a7276cSJohn Garry evlist = evlist__new(); 2393b4a7276cSJohn Garry if (!evlist) 2394b4a7276cSJohn Garry return -ENOMEM; 2395b4a7276cSJohn Garry 2396b4a7276cSJohn Garry parse_events_error__init(&err); 2397411ad22eSIan Rogers ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err, 2398411ad22eSIan Rogers &perf_pmu__fake, /*warn_if_reordered=*/true); 2399b4a7276cSJohn Garry if (ret) { 2400b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2401b4a7276cSJohn Garry str, ret, err.str); 2402b4a7276cSJohn Garry parse_events_error__print(&err, str); 2403b4a7276cSJohn Garry } 2404b4a7276cSJohn Garry 2405b4a7276cSJohn Garry parse_events_error__exit(&err); 2406b4a7276cSJohn Garry evlist__delete(evlist); 2407b4a7276cSJohn Garry 2408b4a7276cSJohn Garry return ret; 2409b4a7276cSJohn Garry } 2410b4a7276cSJohn Garry 24117741e03eSIan Rogers static int combine_test_results(int existing, int latest) 24127741e03eSIan Rogers { 24137741e03eSIan Rogers if (existing == TEST_FAIL) 24147741e03eSIan Rogers return TEST_FAIL; 24157741e03eSIan Rogers if (existing == TEST_SKIP) 24167741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 24177741e03eSIan Rogers return latest; 24187741e03eSIan Rogers } 24197741e03eSIan Rogers 24208252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2421945aea22SJiri Olsa { 24227741e03eSIan Rogers int ret = TEST_OK; 2423945aea22SJiri Olsa 24248252e791SIan Rogers for (int i = 0; i < cnt; i++) { 24258252e791SIan Rogers const struct evlist_test *e = &events[i]; 24267741e03eSIan Rogers int test_ret; 2427945aea22SJiri Olsa 24287741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 24297741e03eSIan Rogers test_ret = test_event(e); 24307741e03eSIan Rogers if (test_ret != TEST_OK) { 24317741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 24327741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 24337741e03eSIan Rogers } 2434945aea22SJiri Olsa } 2435945aea22SJiri Olsa 24367741e03eSIan Rogers return ret; 24377741e03eSIan Rogers } 24387741e03eSIan Rogers 24397741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 24407741e03eSIan Rogers { 24417741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2442945aea22SJiri Olsa } 2443945aea22SJiri Olsa 2444b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2445945aea22SJiri Olsa { 2446c549aca5SDavid Ahern struct list_head terms; 2447945aea22SJiri Olsa int ret; 2448945aea22SJiri Olsa 2449c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2450945aea22SJiri Olsa 2451c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2452945aea22SJiri Olsa if (ret) { 2453945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2454945aea22SJiri Olsa t->str , ret); 2455945aea22SJiri Olsa return ret; 2456945aea22SJiri Olsa } 2457945aea22SJiri Olsa 2458c549aca5SDavid Ahern ret = t->check(&terms); 2459682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2460945aea22SJiri Olsa 2461945aea22SJiri Olsa return ret; 2462945aea22SJiri Olsa } 2463945aea22SJiri Olsa 2464b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2465945aea22SJiri Olsa { 2466945aea22SJiri Olsa int ret = 0; 2467945aea22SJiri Olsa 2468b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2469b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2470945aea22SJiri Olsa 2471945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2472945aea22SJiri Olsa ret = test_term(t); 2473945aea22SJiri Olsa if (ret) 2474945aea22SJiri Olsa break; 2475945aea22SJiri Olsa } 2476945aea22SJiri Olsa 2477945aea22SJiri Olsa return ret; 2478945aea22SJiri Olsa } 2479945aea22SJiri Olsa 24807741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 24817741e03eSIan Rogers { 24827741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 24837741e03eSIan Rogers } 24847741e03eSIan Rogers 24857741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2486945aea22SJiri Olsa { 2487f24ebe80SIan Rogers struct perf_pmu *pmu = NULL; 24885a52817eSIan Rogers int ret = TEST_OK; 24895a52817eSIan Rogers 24901eaf496eSIan Rogers while ((pmu = perf_pmus__scan(pmu)) != NULL) { 2491945aea22SJiri Olsa struct stat st; 2492945aea22SJiri Olsa char path[PATH_MAX]; 2493945aea22SJiri Olsa struct dirent *ent; 2494945aea22SJiri Olsa DIR *dir; 24955a52817eSIan Rogers int err; 2496945aea22SJiri Olsa 24975a52817eSIan Rogers snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/", 24985a52817eSIan Rogers sysfs__mountpoint(), pmu->name); 24997741e03eSIan Rogers 25005a52817eSIan Rogers err = stat(path, &st); 25015a52817eSIan Rogers if (err) { 25025a52817eSIan Rogers pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path); 25035a52817eSIan Rogers continue; 2504945aea22SJiri Olsa } 2505945aea22SJiri Olsa 2506945aea22SJiri Olsa dir = opendir(path); 2507945aea22SJiri Olsa if (!dir) { 25087741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 25095a52817eSIan Rogers ret = combine_test_results(ret, TEST_SKIP); 25105a52817eSIan Rogers continue; 2511945aea22SJiri Olsa } 2512945aea22SJiri Olsa 25137741e03eSIan Rogers while ((ent = readdir(dir))) { 25148252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 25152e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 25167741e03eSIan Rogers int test_ret; 2517945aea22SJiri Olsa 251817a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 251917a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2520945aea22SJiri Olsa continue; 2521945aea22SJiri Olsa 25225a52817eSIan Rogers snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name); 2523945aea22SJiri Olsa 2524945aea22SJiri Olsa e.name = name; 2525945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2526945aea22SJiri Olsa 25277741e03eSIan Rogers test_ret = test_event(&e); 25287741e03eSIan Rogers if (test_ret != TEST_OK) { 25297741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 25307741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 25317741e03eSIan Rogers } 25325a52817eSIan Rogers 25335a52817eSIan Rogers if (!is_pmu_core(pmu->name)) 25345a52817eSIan Rogers continue; 25355a52817eSIan Rogers 2536146edff3SIan Rogers /* 2537146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2538146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2539146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2540146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2541146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2542146edff3SIan Rogers * isn't expected after this. As event names in the config 2543146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2544146edff3SIan Rogers * above. 2545146edff3SIan Rogers */ 2546146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2547146edff3SIan Rogers continue; 2548146edff3SIan Rogers 25495a52817eSIan Rogers snprintf(name, sizeof(name), "%s:u,%s/event=%s/u", 25505a52817eSIan Rogers ent->d_name, pmu->name, ent->d_name); 2551ffe59788SKan Liang e.name = name; 2552ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 25537741e03eSIan Rogers test_ret = test_event(&e); 25547741e03eSIan Rogers if (test_ret != TEST_OK) { 25557741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 25567741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 25577741e03eSIan Rogers } 2558945aea22SJiri Olsa } 2559945aea22SJiri Olsa 2560945aea22SJiri Olsa closedir(dir); 25615a52817eSIan Rogers } 2562945aea22SJiri Olsa return ret; 2563945aea22SJiri Olsa } 2564945aea22SJiri Olsa 25657741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 25667741e03eSIan Rogers { 25677741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 25687741e03eSIan Rogers } 25697741e03eSIan Rogers 2570c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2571c7a3828dSJin Yao { 2572c7a3828dSJin Yao char path[PATH_MAX]; 2573c7a3828dSJin Yao DIR *dir; 2574c7a3828dSJin Yao struct dirent *dent; 2575c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2576c7a3828dSJin Yao char buf[128]; 2577c7a3828dSJin Yao FILE *file; 2578c7a3828dSJin Yao 2579c7a3828dSJin Yao if (!sysfs) 2580c7a3828dSJin Yao return false; 2581c7a3828dSJin Yao 2582c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2583c7a3828dSJin Yao dir = opendir(path); 2584c7a3828dSJin Yao if (!dir) 2585c7a3828dSJin Yao return false; 2586c7a3828dSJin Yao 2587c7a3828dSJin Yao while ((dent = readdir(dir))) { 2588c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2589c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2590c7a3828dSJin Yao continue; 2591c7a3828dSJin Yao 2592c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2593c7a3828dSJin Yao sysfs, dent->d_name); 2594c7a3828dSJin Yao 2595c7a3828dSJin Yao if (!file_available(path)) 2596c7a3828dSJin Yao continue; 2597c7a3828dSJin Yao 2598c7a3828dSJin Yao file = fopen(path, "r"); 2599c7a3828dSJin Yao if (!file) 2600c7a3828dSJin Yao continue; 2601c7a3828dSJin Yao 2602c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2603c7a3828dSJin Yao fclose(file); 2604c7a3828dSJin Yao continue; 2605c7a3828dSJin Yao } 2606c7a3828dSJin Yao 2607c7a3828dSJin Yao /* Remove the last '\n' */ 2608c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2609c7a3828dSJin Yao 2610c7a3828dSJin Yao fclose(file); 2611c7a3828dSJin Yao *event = strdup(dent->d_name); 2612c7a3828dSJin Yao *alias = strdup(buf); 2613c7a3828dSJin Yao closedir(dir); 2614c7a3828dSJin Yao 2615c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2616c7a3828dSJin Yao free(*event); 2617c7a3828dSJin Yao free(*alias); 2618c7a3828dSJin Yao return false; 2619c7a3828dSJin Yao } 2620c7a3828dSJin Yao 2621c7a3828dSJin Yao return true; 2622c7a3828dSJin Yao } 2623c7a3828dSJin Yao 2624c7a3828dSJin Yao closedir(dir); 2625c7a3828dSJin Yao return false; 2626c7a3828dSJin Yao } 2627c7a3828dSJin Yao 2628c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2629c7a3828dSJin Yao { 2630c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2631c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2632c7a3828dSJin Yao 2633c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2634c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 26357741e03eSIan Rogers return TEST_OK; 2636c7a3828dSJin Yao } 2637c7a3828dSJin Yao 26387741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2639c7a3828dSJin Yao { 26408252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2641c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2642c7a3828dSJin Yao 2643c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2644c7a3828dSJin Yao event, alias); 2645c7a3828dSJin Yao 2646c7a3828dSJin Yao e.name = name; 2647c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2648c7a3828dSJin Yao return test_event(&e); 2649c7a3828dSJin Yao } 2650c7a3828dSJin Yao 26517741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 26527741e03eSIan Rogers { 26537741e03eSIan Rogers char *event, *alias; 26547741e03eSIan Rogers int ret; 26557741e03eSIan Rogers 26567741e03eSIan Rogers if (!test_alias(&event, &alias)) 26577741e03eSIan Rogers return TEST_SKIP; 26587741e03eSIan Rogers 26597741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 26607741e03eSIan Rogers 26617741e03eSIan Rogers free(event); 26627741e03eSIan Rogers free(alias); 26637741e03eSIan Rogers return ret; 26647741e03eSIan Rogers } 26657741e03eSIan Rogers 26667741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 26677741e03eSIan Rogers int subtest __maybe_unused) 2668b4a7276cSJohn Garry { 2669b4a7276cSJohn Garry static const char events[][30] = { 2670b4a7276cSJohn Garry "event-hyphen", 2671b4a7276cSJohn Garry "event-two-hyph", 2672b4a7276cSJohn Garry }; 26737741e03eSIan Rogers int ret = TEST_OK; 2674b4a7276cSJohn Garry 26757741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 26767741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 26777741e03eSIan Rogers 26787741e03eSIan Rogers if (test_ret != TEST_OK) { 26797741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 26807741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2681b4a7276cSJohn Garry } 2682b4a7276cSJohn Garry } 2683b4a7276cSJohn Garry 2684b4a7276cSJohn Garry return ret; 2685b4a7276cSJohn Garry } 2686b4a7276cSJohn Garry 26877741e03eSIan Rogers static struct test_case tests__parse_events[] = { 26887741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 26897741e03eSIan Rogers events2, 26907741e03eSIan Rogers "permissions"), 26917741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 26927741e03eSIan Rogers pmu_events, 26937741e03eSIan Rogers "permissions"), 26947741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 26957741e03eSIan Rogers pmu_events2, 26967741e03eSIan Rogers "permissions"), 26977741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 26987741e03eSIan Rogers "no aliases in sysfs"), 26997741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 27007741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 27017741e03eSIan Rogers { .name = NULL, } 27027741e03eSIan Rogers }; 2703945aea22SJiri Olsa 27047741e03eSIan Rogers struct test_suite suite__parse_events = { 27057741e03eSIan Rogers .desc = "Parse event definition strings", 27067741e03eSIan Rogers .test_cases = tests__parse_events, 27077741e03eSIan Rogers }; 2708