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 23*bcd981dbSJames Clark static int num_core_entries(void) 24*bcd981dbSJames Clark { 25*bcd981dbSJames Clark /* 26*bcd981dbSJames Clark * If the kernel supports extended type, expect events to be 27*bcd981dbSJames Clark * opened once for each core PMU type. Otherwise fall back to the legacy 28*bcd981dbSJames Clark * behavior of opening only one event even though there are multiple 29*bcd981dbSJames Clark * PMUs 30*bcd981dbSJames Clark */ 31*bcd981dbSJames Clark if (perf_pmus__supports_extended_type()) 32*bcd981dbSJames Clark return perf_pmus__num_core_pmus(); 33*bcd981dbSJames Clark 34*bcd981dbSJames Clark return 1; 35*bcd981dbSJames Clark } 36*bcd981dbSJames Clark 379854934bSIan Rogers static bool test_config(const struct evsel *evsel, __u64 expected_config) 389854934bSIan Rogers { 399854934bSIan Rogers __u32 type = evsel->core.attr.type; 409854934bSIan Rogers __u64 config = evsel->core.attr.config; 419854934bSIan Rogers 429854934bSIan Rogers if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) { 439854934bSIan Rogers /* 449854934bSIan Rogers * HARDWARE and HW_CACHE events encode the PMU's extended type 459854934bSIan Rogers * in the top 32-bits. Mask in order to ignore. 469854934bSIan Rogers */ 479854934bSIan Rogers config &= PERF_HW_EVENT_MASK; 489854934bSIan Rogers } 499854934bSIan Rogers return config == expected_config; 509854934bSIan Rogers } 519854934bSIan Rogers 52aefde50aSIan Rogers static bool test_perf_config(const struct perf_evsel *evsel, __u64 expected_config) 53aefde50aSIan Rogers { 54aefde50aSIan Rogers return (evsel->attr.config & PERF_HW_EVENT_MASK) == expected_config; 55aefde50aSIan Rogers } 56aefde50aSIan Rogers 57378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 58378ef0f5SIan Rogers 5953fe307dSThomas Richter #if defined(__s390x__) 6053fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 614d39c89fSIngo Molnar * and return success when trace point kvm_s390_create_vm 6253fe307dSThomas Richter * exists. Otherwise this test always fails. 6353fe307dSThomas Richter */ 6453fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 6553fe307dSThomas Richter { 6653fe307dSThomas Richter char *eventfile; 6753fe307dSThomas Richter bool rc = false; 6853fe307dSThomas Richter 6953fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 7053fe307dSThomas Richter 7153fe307dSThomas Richter if (eventfile) { 7253fe307dSThomas Richter DIR *mydir = opendir(eventfile); 7353fe307dSThomas Richter 7453fe307dSThomas Richter if (mydir) { 7553fe307dSThomas Richter rc = true; 7653fe307dSThomas Richter closedir(mydir); 7753fe307dSThomas Richter } 7853fe307dSThomas Richter put_events_file(eventfile); 7953fe307dSThomas Richter } 8053fe307dSThomas Richter 8153fe307dSThomas Richter return rc; 8253fe307dSThomas Richter } 8353fe307dSThomas Richter #endif 8453fe307dSThomas Richter 8563503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 86945aea22SJiri Olsa { 87515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 88945aea22SJiri Olsa 896484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 909d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 92945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 931fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 957741e03eSIan Rogers return TEST_OK; 96945aea22SJiri Olsa } 97945aea22SJiri Olsa 9863503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 99945aea22SJiri Olsa { 10032dcd021SJiri Olsa struct evsel *evsel; 101945aea22SJiri Olsa 1026484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 1039d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 104945aea22SJiri Olsa 105e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 106945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1071fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 108945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 1091fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 110945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1111fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 112945aea22SJiri Olsa } 1137741e03eSIan Rogers return TEST_OK; 114945aea22SJiri Olsa } 115378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 116945aea22SJiri Olsa 11763503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 118945aea22SJiri Olsa { 119aefde50aSIan Rogers struct perf_evsel *evsel; 120aefde50aSIan Rogers bool raw_type_match = false; 121945aea22SJiri Olsa 122aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 123aefde50aSIan Rogers 124aefde50aSIan Rogers perf_evlist__for_each_evsel(&evlist->core, evsel) { 125808ce56eSJames Clark struct perf_pmu *pmu __maybe_unused = NULL; 126aefde50aSIan Rogers bool type_matched = false; 127aefde50aSIan Rogers 128aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 0x1a)); 129808ce56eSJames Clark TEST_ASSERT_VAL("event not parsed as raw type", 130808ce56eSJames Clark evsel->attr.type == PERF_TYPE_RAW); 131808ce56eSJames Clark #if defined(__aarch64__) 132808ce56eSJames Clark /* 133808ce56eSJames Clark * Arm doesn't have a real raw type PMU in sysfs, so raw events 134808ce56eSJames Clark * would never match any PMU. However, RAW events on Arm will 135808ce56eSJames Clark * always successfully open on the first available core PMU 136808ce56eSJames Clark * so no need to test for a matching type here. 137808ce56eSJames Clark */ 138808ce56eSJames Clark type_matched = raw_type_match = true; 139808ce56eSJames Clark #else 1401eaf496eSIan Rogers while ((pmu = perf_pmus__scan(pmu)) != NULL) { 141aefde50aSIan Rogers if (pmu->type == evsel->attr.type) { 142aefde50aSIan Rogers TEST_ASSERT_VAL("PMU type expected once", !type_matched); 143aefde50aSIan Rogers type_matched = true; 144aefde50aSIan Rogers if (pmu->type == PERF_TYPE_RAW) 145aefde50aSIan Rogers raw_type_match = true; 146aefde50aSIan Rogers } 147aefde50aSIan Rogers } 148808ce56eSJames Clark #endif 149aefde50aSIan Rogers TEST_ASSERT_VAL("No PMU found for type", type_matched); 150aefde50aSIan Rogers } 151aefde50aSIan Rogers TEST_ASSERT_VAL("Raw PMU not matched", raw_type_match); 1527741e03eSIan Rogers return TEST_OK; 153945aea22SJiri Olsa } 154945aea22SJiri Olsa 15563503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 156945aea22SJiri Olsa { 157515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 158945aea22SJiri Olsa 1596484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 1619854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 1627741e03eSIan Rogers return TEST_OK; 163945aea22SJiri Olsa } 164945aea22SJiri Olsa 16563503dbaSJiri Olsa static int test__checkevent_symbolic_name(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", 174aefde50aSIan Rogers test_perf_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 175aefde50aSIan Rogers } 1767741e03eSIan Rogers return TEST_OK; 177945aea22SJiri Olsa } 178945aea22SJiri Olsa 17963503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 180945aea22SJiri Olsa { 181aefde50aSIan Rogers struct perf_evsel *evsel; 182945aea22SJiri Olsa 183aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 184aefde50aSIan Rogers 185aefde50aSIan Rogers perf_evlist__for_each_evsel(&evlist->core, evsel) { 186aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); 187aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 188ee4c7588SJiri Olsa /* 18978e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 190ee4c7588SJiri Olsa * while this test executes only parse events method. 191ee4c7588SJiri Olsa */ 192aefde50aSIan Rogers TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period); 193aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); 194aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config2", 1 == evsel->attr.config2); 195aefde50aSIan Rogers } 1967741e03eSIan Rogers return TEST_OK; 197945aea22SJiri Olsa } 198945aea22SJiri Olsa 19963503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 200945aea22SJiri Olsa { 201515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 202945aea22SJiri Olsa 2036484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 2041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 2059854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 2067741e03eSIan Rogers return TEST_OK; 207945aea22SJiri Olsa } 208945aea22SJiri Olsa 20963503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 210945aea22SJiri Olsa { 211aefde50aSIan Rogers struct perf_evsel *evsel; 212945aea22SJiri Olsa 213aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries); 214aefde50aSIan Rogers 215aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 216aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); 217aefde50aSIan Rogers TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 1 << 16)); 218aefde50aSIan Rogers } 2197741e03eSIan Rogers return TEST_OK; 220945aea22SJiri Olsa } 221945aea22SJiri Olsa 22263503dbaSJiri Olsa static int test__checkevent_breakpoint(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", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 2301fc632ceSJiri Olsa evsel->core.attr.bp_type); 231945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 2321fc632ceSJiri Olsa evsel->core.attr.bp_len); 2337741e03eSIan Rogers return TEST_OK; 234945aea22SJiri Olsa } 235945aea22SJiri Olsa 23663503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 237945aea22SJiri Olsa { 238515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 239945aea22SJiri Olsa 2406484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 2411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 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_X == evsel->core.attr.bp_type); 2451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 2467741e03eSIan Rogers return TEST_OK; 247945aea22SJiri Olsa } 248945aea22SJiri Olsa 24963503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 250945aea22SJiri Olsa { 251515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 252945aea22SJiri Olsa 2536484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 254945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2551fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2569854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 257945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2581fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 259945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2601fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2617741e03eSIan Rogers return TEST_OK; 262945aea22SJiri Olsa } 263945aea22SJiri Olsa 26463503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 265945aea22SJiri Olsa { 266515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 267945aea22SJiri Olsa 2686484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 269945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2701fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2719854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 272945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2731fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 274945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2751fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2767741e03eSIan Rogers return TEST_OK; 277945aea22SJiri Olsa } 278945aea22SJiri Olsa 27963503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 280945aea22SJiri Olsa { 281515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 282945aea22SJiri Olsa 2836484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 284945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2851fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2869854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 287945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2881fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 289945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2901fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2917741e03eSIan Rogers return TEST_OK; 292945aea22SJiri Olsa } 293945aea22SJiri Olsa 294378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 29563503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 296945aea22SJiri Olsa { 297515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 298945aea22SJiri Olsa 2991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 303945aea22SJiri Olsa 304945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 305945aea22SJiri Olsa } 306945aea22SJiri Olsa 307945aea22SJiri Olsa static int 30863503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 309945aea22SJiri Olsa { 310aefde50aSIan Rogers struct perf_evsel *evsel; 311945aea22SJiri Olsa 3126484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 313945aea22SJiri Olsa 314aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 315aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); 316aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 317aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 318aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 319945aea22SJiri Olsa } 320945aea22SJiri Olsa 321945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 322945aea22SJiri Olsa } 323378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 324945aea22SJiri Olsa 32563503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 326945aea22SJiri Olsa { 327aefde50aSIan Rogers struct perf_evsel *evsel; 328945aea22SJiri Olsa 329aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 330aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 331aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 332aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 333aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 334aefde50aSIan Rogers } 335945aea22SJiri Olsa return test__checkevent_raw(evlist); 336945aea22SJiri Olsa } 337945aea22SJiri Olsa 33863503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist) 339945aea22SJiri Olsa { 340aefde50aSIan Rogers struct perf_evsel *evsel; 341945aea22SJiri Olsa 342aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 343aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 344aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 345aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 346aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 347aefde50aSIan Rogers } 348945aea22SJiri Olsa return test__checkevent_numeric(evlist); 349945aea22SJiri Olsa } 350945aea22SJiri Olsa 35163503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 352945aea22SJiri Olsa { 35327c9fcfcSIan Rogers struct perf_evsel *evsel; 354945aea22SJiri Olsa 35527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 356*bcd981dbSJames Clark evlist->core.nr_entries == num_core_entries()); 357945aea22SJiri Olsa 35827c9fcfcSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 35927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 36027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); 36127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); 36227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); 36327c9fcfcSIan Rogers } 364945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 365945aea22SJiri Olsa } 366945aea22SJiri Olsa 36763503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 368945aea22SJiri Olsa { 369aefde50aSIan Rogers struct perf_evsel *evsel; 370945aea22SJiri Olsa 371aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 372aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); 373aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); 374aefde50aSIan Rogers } 375945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 376945aea22SJiri Olsa } 377945aea22SJiri Olsa 37863503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 379945aea22SJiri Olsa { 380aefde50aSIan Rogers struct perf_evsel *evsel; 381945aea22SJiri Olsa 382aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 383aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); 384aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); 385aefde50aSIan Rogers } 386945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 387945aea22SJiri Olsa } 388945aea22SJiri Olsa 38963503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 390945aea22SJiri Olsa { 391515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 392945aea22SJiri Olsa 3931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 397945aea22SJiri Olsa 398945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 399945aea22SJiri Olsa } 400945aea22SJiri Olsa 40163503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 402945aea22SJiri Olsa { 403aefde50aSIan Rogers struct perf_evsel *evsel; 404945aea22SJiri Olsa 405aefde50aSIan Rogers perf_evlist__for_each_entry(&evlist->core, evsel) { 406aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); 407aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); 408aefde50aSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); 409aefde50aSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); 410aefde50aSIan Rogers } 411945aea22SJiri Olsa return test__checkevent_genhw(evlist); 412945aea22SJiri Olsa } 413945aea22SJiri Olsa 41463503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 415a1e12da4SJiri Olsa { 416515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 417a1e12da4SJiri Olsa 4181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 4191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 4201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 4211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 425a1e12da4SJiri Olsa 426a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 427a1e12da4SJiri Olsa } 428a1e12da4SJiri Olsa 42963503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 430a1e12da4SJiri Olsa { 431515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 432a1e12da4SJiri Olsa 4331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 4341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 4351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 4361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 440a1e12da4SJiri Olsa 441a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 442a1e12da4SJiri Olsa } 443a1e12da4SJiri Olsa 44463503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 445945aea22SJiri Olsa { 446515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 447945aea22SJiri Olsa 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:u")); 455945aea22SJiri Olsa 456945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 457945aea22SJiri Olsa } 458945aea22SJiri Olsa 45963503dbaSJiri Olsa static int test__checkevent_breakpoint_x_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:x:k")); 469945aea22SJiri Olsa 470945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 471945aea22SJiri Olsa } 472945aea22SJiri Olsa 47363503dbaSJiri Olsa static int test__checkevent_breakpoint_r_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:r:hp")); 483945aea22SJiri Olsa 484945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 485945aea22SJiri Olsa } 486945aea22SJiri Olsa 48763503dbaSJiri Olsa static int test__checkevent_breakpoint_w_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:w:up")); 497945aea22SJiri Olsa 498945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 499945aea22SJiri Olsa } 500945aea22SJiri Olsa 50163503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 502945aea22SJiri Olsa { 503515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 504945aea22SJiri Olsa 5051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 5061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 5071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 509945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5108ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 511945aea22SJiri Olsa 512945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 513945aea22SJiri Olsa } 514945aea22SJiri Olsa 515f0617f52SAdrian Hunter static int test__checkevent_breakpoint_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(evlist); 527f0617f52SAdrian Hunter } 528f0617f52SAdrian Hunter 529f0617f52SAdrian Hunter static int test__checkevent_breakpoint_x_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_x(evlist); 541f0617f52SAdrian Hunter } 542f0617f52SAdrian Hunter 543f0617f52SAdrian Hunter static int test__checkevent_breakpoint_r_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_r(evlist); 555f0617f52SAdrian Hunter } 556f0617f52SAdrian Hunter 557f0617f52SAdrian Hunter static int test__checkevent_breakpoint_w_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_w(evlist); 569f0617f52SAdrian Hunter } 570f0617f52SAdrian Hunter 571f0617f52SAdrian Hunter static int test__checkevent_breakpoint_rw_modifier_name(struct evlist *evlist) 572f0617f52SAdrian Hunter { 573f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 574f0617f52SAdrian Hunter 575f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 576f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 577f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 578f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 579f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", 580f0617f52SAdrian Hunter !strcmp(evsel__name(evsel), "breakpoint")); 581f0617f52SAdrian Hunter 582f0617f52SAdrian Hunter return test__checkevent_breakpoint_rw(evlist); 583f0617f52SAdrian Hunter } 584f0617f52SAdrian Hunter 585f0617f52SAdrian Hunter static int test__checkevent_breakpoint_2_events(struct evlist *evlist) 586f0617f52SAdrian Hunter { 587f0617f52SAdrian Hunter struct evsel *evsel = evlist__first(evlist); 588f0617f52SAdrian Hunter 589f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 590f0617f52SAdrian Hunter 591f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 592f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint1")); 593f0617f52SAdrian Hunter 594f0617f52SAdrian Hunter evsel = evsel__next(evsel); 595f0617f52SAdrian Hunter 596f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 597f0617f52SAdrian Hunter TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint2")); 598f0617f52SAdrian Hunter 599f0617f52SAdrian Hunter return TEST_OK; 600f0617f52SAdrian Hunter } 601f0617f52SAdrian Hunter 60263503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 603945aea22SJiri Olsa { 604945aea22SJiri Olsa 605515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 606945aea22SJiri Olsa 6076484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 6081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6099854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 10)); 6101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 6111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 612204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 613ee4c7588SJiri Olsa /* 61478e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 615ee4c7588SJiri Olsa * while this test executes only parse events method. 616ee4c7588SJiri Olsa */ 6171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 618945aea22SJiri Olsa 6197741e03eSIan Rogers return TEST_OK; 620945aea22SJiri Olsa } 621945aea22SJiri Olsa 622378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 62363503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 624945aea22SJiri Olsa { 625515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 626945aea22SJiri Olsa 627aefde50aSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 3 <= evlist->core.nr_entries); 628945aea22SJiri Olsa 629945aea22SJiri Olsa /* r1 */ 630aefde50aSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT != evsel->core.attr.type); 631aefde50aSIan Rogers while (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) { 6329854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 6341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 635204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 6361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 6371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 6391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 640aefde50aSIan Rogers evsel = evsel__next(evsel); 641aefde50aSIan Rogers } 642945aea22SJiri Olsa 64343f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 6441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 645945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 6461fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 6471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 6481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 6501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 652945aea22SJiri Olsa 653945aea22SJiri Olsa /* 1:1:hp */ 654e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 6569854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 6581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 6591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 6601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 661945aea22SJiri Olsa 6627741e03eSIan Rogers return TEST_OK; 663945aea22SJiri Olsa } 664378ef0f5SIan Rogers #endif 665945aea22SJiri Olsa 66663503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 667945aea22SJiri Olsa { 668515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 669945aea22SJiri Olsa 670945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 6716484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6739854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 6748ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 675945aea22SJiri Olsa 676945aea22SJiri Olsa /* cpu/config=2/u" */ 677e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 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, 2)); 681945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 6828ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 683945aea22SJiri Olsa 6847741e03eSIan Rogers return TEST_OK; 685945aea22SJiri Olsa } 686945aea22SJiri Olsa 68763503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 68871ef150eSKan Liang { 689515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 69071ef150eSKan Liang 69171ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 6926484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 6949854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 69571ef150eSKan Liang /* 69678e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 69771ef150eSKan Liang * while this test executes only parse events method. 69871ef150eSKan Liang */ 6991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 70027de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 7011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 70271ef150eSKan Liang 70371ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 704e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 7069854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 70771ef150eSKan Liang /* 70878e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 70971ef150eSKan Liang * while this test executes only parse events method. 71071ef150eSKan Liang */ 7111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 71227de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 7131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 71471ef150eSKan Liang 7157741e03eSIan Rogers return TEST_OK; 71671ef150eSKan Liang } 71771ef150eSKan Liang 71863503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 719945aea22SJiri Olsa { 720515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 721945aea22SJiri Olsa 7226484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 7235a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 7245a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 725945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 7261fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 727945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 7281fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 7291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 7320997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 733945aea22SJiri Olsa 7347741e03eSIan Rogers return TEST_OK; 735945aea22SJiri Olsa } 736945aea22SJiri Olsa 737ffe59788SKan Liang 73863503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 739ffe59788SKan Liang { 74027c9fcfcSIan Rogers struct evsel *evsel = NULL; 741ffe59788SKan Liang 74227c9fcfcSIan Rogers /* 74327c9fcfcSIan Rogers * The wild card event will be opened at least once, but it may be 74427c9fcfcSIan Rogers * opened on each core PMU. 74527c9fcfcSIan Rogers */ 74627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries >= 2); 74727c9fcfcSIan Rogers for (int i = 0; i < evlist->core.nr_entries - 1; i++) { 74827c9fcfcSIan Rogers evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 749ffe59788SKan Liang /* pmu-event:u */ 750ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 7511fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 752ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 7531fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 7541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 7570997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 75827c9fcfcSIan Rogers } 759ffe59788SKan Liang /* cpu/pmu-event/u*/ 760e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 76127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong type", evsel__find_pmu(evsel)->is_core); 762ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 7631fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 764ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 7651fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 7661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 7681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 7690997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 770ffe59788SKan Liang 7717741e03eSIan Rogers return TEST_OK; 772ffe59788SKan Liang } 773ffe59788SKan Liang 774945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 775945aea22SJiri Olsa { 7766cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 777945aea22SJiri Olsa 778945aea22SJiri Olsa /* config=10 */ 7796cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 780945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 781945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 782945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 783945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 784945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 7854f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 786945aea22SJiri Olsa 787945aea22SJiri Olsa /* config1 */ 7886cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 789945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 790945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 791945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 792945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 793945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 7944f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 795945aea22SJiri Olsa 796945aea22SJiri Olsa /* config2=3 */ 7976cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 798945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 799945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 800945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 801945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 802945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 8034f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 804945aea22SJiri Olsa 805204e7c49SRob Herring /* config3=4 */ 806204e7c49SRob Herring term = list_entry(term->list.next, struct parse_events_term, list); 807204e7c49SRob Herring TEST_ASSERT_VAL("wrong type term", 808204e7c49SRob Herring term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); 809204e7c49SRob Herring TEST_ASSERT_VAL("wrong type val", 810204e7c49SRob Herring term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 811204e7c49SRob Herring TEST_ASSERT_VAL("wrong val", term->val.num == 4); 812204e7c49SRob Herring TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); 813204e7c49SRob Herring 814945aea22SJiri Olsa /* umask=1*/ 8156cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 816945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 817945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 818945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 819945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 820945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 821945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 822945aea22SJiri Olsa 8234929e95aSJiri Olsa /* 8244929e95aSJiri Olsa * read 8254929e95aSJiri Olsa * 8264929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 8274929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 8284929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 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, "read")); 83670c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 8374929e95aSJiri Olsa 8384929e95aSJiri Olsa /* 8394929e95aSJiri Olsa * r0xead 8404929e95aSJiri Olsa * 8414929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 8424929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 8434929e95aSJiri Olsa */ 8444929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 8454929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 84670c90e4aSIan Rogers term->type_term == PARSE_EVENTS__TERM_TYPE_RAW); 8474929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 84870c90e4aSIan Rogers term->type_val == PARSE_EVENTS__TERM_TYPE_STR); 84970c90e4aSIan Rogers TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead")); 85070c90e4aSIan Rogers TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw")); 8517741e03eSIan Rogers return TEST_OK; 852945aea22SJiri Olsa } 853945aea22SJiri Olsa 85463503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 855945aea22SJiri Olsa { 85632dcd021SJiri Olsa struct evsel *evsel, *leader; 857945aea22SJiri Olsa 85827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 859*bcd981dbSJames Clark evlist->core.nr_entries == (num_core_entries() * 2)); 86027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 861*bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 862945aea22SJiri Olsa 863*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 864945aea22SJiri Olsa /* instructions:k */ 86527c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 8661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8679854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 8681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 8711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 874c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 8755643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8762bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 877a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 878945aea22SJiri Olsa 879945aea22SJiri Olsa /* cycles:upp */ 880e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8829854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 886945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 890fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8912bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 892a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 89327c9fcfcSIan Rogers } 8947741e03eSIan Rogers return TEST_OK; 895945aea22SJiri Olsa } 896945aea22SJiri Olsa 89763503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 898945aea22SJiri Olsa { 89927c9fcfcSIan Rogers struct evsel *evsel, *leader = NULL; 900945aea22SJiri Olsa 90127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 902*bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries() + 1)); 90327c9fcfcSIan Rogers /* 90427c9fcfcSIan Rogers * TODO: Currently the software event won't be grouped with the hardware 90527c9fcfcSIan Rogers * event except for 1 PMU. 90627c9fcfcSIan Rogers */ 9079d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 908945aea22SJiri Olsa 90927c9fcfcSIan Rogers evlist__for_each_entry(evlist, evsel) { 91027c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_SOFTWARE) { 911945aea22SJiri Olsa /* faults + :ku modifier */ 91227c9fcfcSIan Rogers leader = evsel; 91327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong config", 91427c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 9151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 918943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 921c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9225643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9232bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 924a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 92527c9fcfcSIan Rogers continue; 92627c9fcfcSIan Rogers } 92727c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_HARDWARE && 92827c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)) { 929945aea22SJiri Olsa /* cache-references + :u modifier */ 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); 93627c9fcfcSIan Rogers if (evsel__has_leader(evsel, leader)) 9372bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 938a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 93927c9fcfcSIan Rogers continue; 94027c9fcfcSIan Rogers } 941945aea22SJiri Olsa /* cycles:k */ 9421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9439854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 9451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 9471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 950c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 951a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 95227c9fcfcSIan Rogers } 9537741e03eSIan Rogers return TEST_OK; 954945aea22SJiri Olsa } 955945aea22SJiri Olsa 956378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 95763503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 958945aea22SJiri Olsa { 95927c9fcfcSIan Rogers struct evsel *evsel, *group1_leader = NULL, *group2_leader = NULL; 960945aea22SJiri Olsa 96127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 96227c9fcfcSIan Rogers evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus() + 2)); 96327c9fcfcSIan Rogers /* 96427c9fcfcSIan Rogers * Currently the software event won't be grouped with the hardware event 96527c9fcfcSIan Rogers * except for 1 PMU. This means there are always just 2 groups 96627c9fcfcSIan Rogers * regardless of the number of core PMUs. 96727c9fcfcSIan Rogers */ 9689d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 969945aea22SJiri Olsa 97027c9fcfcSIan Rogers evlist__for_each_entry(evlist, evsel) { 97127c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT) { 97243f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 97327c9fcfcSIan Rogers group1_leader = evsel; 974945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 97527c9fcfcSIan Rogers evsel->core.attr.sample_type == PERF_TP_SAMPLE_TYPE); 9761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 9771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 983c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 98427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group name", !strcmp(evsel->group_name, "group1")); 9855643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9862bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 987a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 98827c9fcfcSIan Rogers continue; 98927c9fcfcSIan Rogers } 99027c9fcfcSIan Rogers if (evsel->core.attr.type == PERF_TYPE_HARDWARE && 99127c9fcfcSIan Rogers test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)) { 99227c9fcfcSIan Rogers if (evsel->core.attr.exclude_user) { 993945aea22SJiri Olsa /* group1 cycles:kppp */ 99427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_user", 99527c9fcfcSIan Rogers evsel->core.attr.exclude_user); 99627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", 99727c9fcfcSIan Rogers !evsel->core.attr.exclude_kernel); 9981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 999945aea22SJiri Olsa /* use of precise requires exclude_guest */ 100027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", 100127c9fcfcSIan Rogers evsel->core.attr.exclude_guest); 100227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude host", 100327c9fcfcSIan Rogers !evsel->core.attr.exclude_host); 100427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong precise_ip", 100527c9fcfcSIan Rogers evsel->core.attr.precise_ip == 3); 100627c9fcfcSIan Rogers if (evsel__has_leader(evsel, group1_leader)) { 1007945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 100827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group_idx", 100927c9fcfcSIan Rogers evsel__group_idx(evsel) == 1); 101027c9fcfcSIan Rogers } 1011a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 101227c9fcfcSIan Rogers } else { 1013945aea22SJiri Olsa /* group2 cycles + G modifier */ 101427c9fcfcSIan Rogers group2_leader = evsel; 101527c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_kernel", 101627c9fcfcSIan Rogers !evsel->core.attr.exclude_kernel); 101727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude_hv", 101827c9fcfcSIan Rogers !evsel->core.attr.exclude_hv); 101927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude guest", 102027c9fcfcSIan Rogers !evsel->core.attr.exclude_guest); 102127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong exclude host", 102227c9fcfcSIan Rogers evsel->core.attr.exclude_host); 10231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1024c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 102527c9fcfcSIan Rogers if (evsel->core.nr_members == 2) { 102627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong group_idx", 102727c9fcfcSIan Rogers evsel__group_idx(evsel) == 0); 102827c9fcfcSIan Rogers } 1029a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 103027c9fcfcSIan Rogers } 103127c9fcfcSIan Rogers continue; 103227c9fcfcSIan Rogers } 103327c9fcfcSIan Rogers if (evsel->core.attr.type == 1) { 1034945aea22SJiri Olsa /* group2 1:3 + G modifier */ 10359854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 3)); 10361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 104227c9fcfcSIan Rogers if (evsel__has_leader(evsel, group2_leader)) 10432bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1044a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 104527c9fcfcSIan Rogers continue; 104627c9fcfcSIan Rogers } 1047945aea22SJiri Olsa /* instructions:u */ 10481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10499854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 10501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1053943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1056c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 1057a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 105827c9fcfcSIan Rogers } 10597741e03eSIan Rogers return TEST_OK; 1060945aea22SJiri Olsa } 1061378ef0f5SIan Rogers #endif 1062945aea22SJiri Olsa 106363503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 1064945aea22SJiri Olsa { 106532dcd021SJiri Olsa struct evsel *evsel, *leader; 1066945aea22SJiri Olsa 106727c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1068*bcd981dbSJames Clark evlist->core.nr_entries == (num_core_entries() * 2)); 106927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1070*bcd981dbSJames Clark num_core_entries() == evlist__nr_groups(evlist)); 1071945aea22SJiri Olsa 1072*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 1073945aea22SJiri Olsa /* cycles:u + p */ 107427c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 10751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10769854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 10791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1080945aea22SJiri Olsa /* use of precise requires exclude_guest */ 10811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 1084945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1085c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10865643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10872bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1088a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1089945aea22SJiri Olsa 1090945aea22SJiri Olsa /* instructions:kp + p */ 1091e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10939854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 10941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 10951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 1097945aea22SJiri Olsa /* use of precise requires exclude_guest */ 10981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 1101fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11022bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1103a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 110427c9fcfcSIan Rogers } 11057741e03eSIan Rogers return TEST_OK; 1106945aea22SJiri Olsa } 1107945aea22SJiri Olsa 110863503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 1109945aea22SJiri Olsa { 111027c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1111945aea22SJiri Olsa 111227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1113*bcd981dbSJames Clark evlist->core.nr_entries == (5 * num_core_entries())); 111427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1115*bcd981dbSJames Clark evlist__nr_groups(evlist) == (2 * num_core_entries())); 1116945aea22SJiri Olsa 1117*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 1118945aea22SJiri Olsa /* cycles + G */ 111927c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 11201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11219854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1128945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1129c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11305643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11312bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1132a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1133945aea22SJiri Olsa 1134945aea22SJiri Olsa /* instructions + G */ 1135e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11379854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 11381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1144fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 1146a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 114727c9fcfcSIan Rogers } 1148*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 1149945aea22SJiri Olsa /* cycles:G */ 1150e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 11511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11529854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1159945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1160c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11615643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11622bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 1163a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 1164945aea22SJiri Olsa 1165945aea22SJiri Olsa /* instructions:G */ 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_INSTRUCTIONS)); 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); 1175fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11762bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 117727c9fcfcSIan Rogers } 1178*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 1179945aea22SJiri Olsa /* cycles */ 1180e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11829854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1189c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 119027c9fcfcSIan Rogers } 11917741e03eSIan Rogers return TEST_OK; 1192945aea22SJiri Olsa } 1193945aea22SJiri Olsa 119463503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 11955a30a99fSJiri Olsa { 119627c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 11975a30a99fSJiri Olsa 119827c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1199*bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 120027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1201*bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 12025a30a99fSJiri Olsa 1203*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 12045a30a99fSJiri Olsa /* cycles + :H group modifier */ 120527c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 12061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12079854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 12081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12145a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1215c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 12165643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 12172bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 12185a30a99fSJiri Olsa 12195a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1220e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12229854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1229fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12302bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 123127c9fcfcSIan Rogers } 12327741e03eSIan Rogers return TEST_OK; 12335a30a99fSJiri Olsa } 12345a30a99fSJiri Olsa 123563503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 12365a30a99fSJiri Olsa { 123727c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 12385a30a99fSJiri Olsa 123927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1240*bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 124127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1242*bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 12435a30a99fSJiri Olsa 1244*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 12455a30a99fSJiri Olsa /* cycles + :G group modifier */ 124627c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 12471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12489854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 12491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 12541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12555a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1256c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 12575643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 12582bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 12595a30a99fSJiri Olsa 12605a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1261e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12639854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1270fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12712bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 127227c9fcfcSIan Rogers } 12737741e03eSIan Rogers return TEST_OK; 12745a30a99fSJiri Olsa } 12755a30a99fSJiri Olsa 127663503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 12775a30a99fSJiri Olsa { 127827c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 12795a30a99fSJiri Olsa 128027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1281*bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 128227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1283*bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 12845a30a99fSJiri Olsa 1285*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 12865a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 128727c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 12881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12899854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 12901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 12941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 12951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 12965a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1297c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 12985643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 12992bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 13005a30a99fSJiri Olsa 13015a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1302e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13049854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 13091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1311fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13122bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 131327c9fcfcSIan Rogers } 13147741e03eSIan Rogers return TEST_OK; 13155a30a99fSJiri Olsa } 13165a30a99fSJiri Olsa 131763503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 13185a30a99fSJiri Olsa { 131927c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 13205a30a99fSJiri Olsa 132127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1322*bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 132327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1324*bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 13255a30a99fSJiri Olsa 1326*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 13275a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 132827c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 13291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13309854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 13311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 13351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 13361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 13375a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1338c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 13395643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 13402bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 13415a30a99fSJiri Olsa 13425a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1343e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13459854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 13501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1352fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13532bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 135427c9fcfcSIan Rogers } 13557741e03eSIan Rogers return TEST_OK; 13565a30a99fSJiri Olsa } 13575a30a99fSJiri Olsa 135863503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1359a9f93f97SJiri Olsa { 136027c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1361a9f93f97SJiri Olsa 136227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1363*bcd981dbSJames Clark evlist->core.nr_entries == (3 * num_core_entries())); 1364a9f93f97SJiri Olsa 1365*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 1366a9f93f97SJiri Olsa /* cycles - sampling group leader */ 136727c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : 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_CPU_CYCLES)); 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); 1376a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1377fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1378a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1379a9f93f97SJiri Olsa 1380a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1381e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13839854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 13861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 13871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 13881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 13891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1390fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1391a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1392a9f93f97SJiri Olsa 1393a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1394e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 13951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13969854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 13971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 13991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 14001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 14011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 14021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1403a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1404fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1405a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 140627c9fcfcSIan Rogers } 14077741e03eSIan Rogers return TEST_OK; 1408a9f93f97SJiri Olsa } 1409a9f93f97SJiri Olsa 141063503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1411a9f93f97SJiri Olsa { 141227c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1413a9f93f97SJiri Olsa 141427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1415*bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 1416a9f93f97SJiri Olsa 1417*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 1418a9f93f97SJiri Olsa /* instructions - sampling group leader */ 141927c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : 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_INSTRUCTIONS)); 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); 1431a9f93f97SJiri Olsa 1432a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1433e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14359854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 14361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 14401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 14411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1442a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1443fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1444a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 144527c9fcfcSIan Rogers } 14467741e03eSIan Rogers return TEST_OK; 1447a9f93f97SJiri Olsa } 1448a9f93f97SJiri Olsa 144963503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1450c9ee780fSMichael Ellerman { 145127c9fcfcSIan Rogers struct evsel *evsel = NULL; 1452c9ee780fSMichael Ellerman 145327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1454*bcd981dbSJames Clark evlist->core.nr_entries == num_core_entries()); 145527c9fcfcSIan Rogers 1456*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 145727c9fcfcSIan Rogers evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 14581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 14591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 14611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 14621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 146327c9fcfcSIan Rogers } 1464c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1465c9ee780fSMichael Ellerman } 1466c9ee780fSMichael Ellerman 146763503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1468c9ee780fSMichael Ellerman { 146927c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 1470c9ee780fSMichael Ellerman 147127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1472*bcd981dbSJames Clark evlist->core.nr_entries == (3 * num_core_entries())); 1473c9ee780fSMichael Ellerman 1474*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 1475c9ee780fSMichael Ellerman /* cycles - group leader */ 147627c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 14771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14789854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1479c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1480fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 148127c9fcfcSIan Rogers /* TODO: The group modifier is not copied to the split group leader. */ 148227c9fcfcSIan Rogers if (perf_pmus__num_core_pmus() == 1) 14831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1484c9ee780fSMichael Ellerman 1485c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1486e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 14889854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 14891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1490c9ee780fSMichael Ellerman 1491c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1492e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 14939854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 14941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 149527c9fcfcSIan Rogers } 14967741e03eSIan Rogers return TEST_OK; 1497c9ee780fSMichael Ellerman } 1498c9ee780fSMichael Ellerman 14990997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 15000997a266SAndi Kleen { 15010997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 15020997a266SAndi Kleen 15030997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 15040997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 15050997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 15060997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 15070997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 15080997a266SAndi Kleen 15090997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 15100997a266SAndi Kleen } 15110997a266SAndi Kleen 15120997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 15130997a266SAndi Kleen { 151427c9fcfcSIan Rogers struct evsel *evsel = NULL, *leader; 15150997a266SAndi Kleen 151627c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1517*bcd981dbSJames Clark evlist->core.nr_entries == 3 * num_core_entries()); 15180997a266SAndi Kleen 1519*bcd981dbSJames Clark for (int i = 0; i < num_core_entries(); i++) { 15200997a266SAndi Kleen /* cycles - group leader */ 152127c9fcfcSIan Rogers evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel)); 15220997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 15239854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 15240997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1525fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 152627c9fcfcSIan Rogers /* TODO: The group modifier is not copied to the split group leader. */ 152727c9fcfcSIan Rogers if (perf_pmus__num_core_pmus() == 1) 15280997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 15290997a266SAndi Kleen 15300997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 15310997a266SAndi Kleen evsel = evsel__next(evsel); 15320997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 15339854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 15340997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 15350997a266SAndi Kleen 15360997a266SAndi Kleen /* branch-misses - ditto */ 15370997a266SAndi Kleen evsel = evsel__next(evsel); 15389854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 15390997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 154027c9fcfcSIan Rogers } 15417741e03eSIan Rogers return TEST_OK; 15420997a266SAndi Kleen } 154363503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1544ec32398cSJacob Shin { 1545515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1546ec32398cSJacob Shin 15476484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 15499854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1550ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 15511fc632ceSJiri Olsa evsel->core.attr.bp_type); 1552ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 15531fc632ceSJiri Olsa evsel->core.attr.bp_len); 1554ec32398cSJacob Shin 15557741e03eSIan Rogers return TEST_OK; 1556ec32398cSJacob Shin } 1557ec32398cSJacob Shin 155863503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1559ec32398cSJacob Shin { 1560515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1561ec32398cSJacob Shin 15626484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 15649854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1565ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 15661fc632ceSJiri Olsa evsel->core.attr.bp_type); 1567ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 15681fc632ceSJiri Olsa evsel->core.attr.bp_len); 1569ec32398cSJacob Shin 15707741e03eSIan Rogers return TEST_OK; 1571ec32398cSJacob Shin } 1572ec32398cSJacob Shin 1573ec32398cSJacob Shin static int 157463503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1575ec32398cSJacob Shin { 1576515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1577ec32398cSJacob Shin 15781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 15791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 15801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 15811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1582ec32398cSJacob Shin 1583ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1584ec32398cSJacob Shin } 1585ec32398cSJacob Shin 158663503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1587ddd83c97SJiri Olsa { 1588515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1589ddd83c97SJiri Olsa 159027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of entries", 1591*bcd981dbSJames Clark evlist->core.nr_entries == 1 + num_core_entries()); 15921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 15939854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK)); 15947741e03eSIan Rogers return TEST_OK; 1595ddd83c97SJiri Olsa } 1596ddd83c97SJiri Olsa 159763503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 159810bf358aSWang Nan { 1599515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 160010bf358aSWang Nan 1601ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn")); 16027741e03eSIan Rogers return TEST_OK; 160310bf358aSWang Nan } 160410bf358aSWang Nan 160563503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 160610bf358aSWang Nan { 1607515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 160810bf358aSWang Nan 1609ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu")); 16107741e03eSIan Rogers return TEST_OK; 161110bf358aSWang Nan } 161210bf358aSWang Nan 161363503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 161410bf358aSWang Nan { 1615515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 161610bf358aSWang Nan 1617ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu")); 16187741e03eSIan Rogers return TEST_OK; 161910bf358aSWang Nan } 162010bf358aSWang Nan 162163503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 162243d0b978SWang Nan { 1623515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 162443d0b978SWang Nan 1625ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu")); 16264a7c4eafSIan Rogers return test__checkevent_genhw(evlist); 162743d0b978SWang Nan } 162810bf358aSWang Nan 16298f8c1068SIan Rogers static bool test__pmu_cpu_valid(void) 16308f8c1068SIan Rogers { 16311eaf496eSIan Rogers return !!perf_pmus__find("cpu"); 16328f8c1068SIan Rogers } 16338f8c1068SIan Rogers 163416ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 163516ddcfbfSJiri Olsa { 16361eaf496eSIan Rogers return !!perf_pmus__find("intel_pt"); 163716ddcfbfSJiri Olsa } 163816ddcfbfSJiri Olsa 163963503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1640b3f58c8dSArnaldo Carvalho de Melo { 1641515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1642b3f58c8dSArnaldo Carvalho de Melo 1643ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u")); 16447741e03eSIan Rogers return TEST_OK; 1645b3f58c8dSArnaldo Carvalho de Melo } 1646b3f58c8dSArnaldo Carvalho de Melo 164763503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 164806dc5bf2SAlexey Budankov { 1649515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 165006dc5bf2SAlexey Budankov 16519854934bSIan Rogers TEST_ASSERT_VAL("wrong complex name parsing", 16529854934bSIan Rogers evsel__name_is(evsel, 16539854934bSIan Rogers "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks")); 16547741e03eSIan Rogers return TEST_OK; 165506dc5bf2SAlexey Budankov } 165606dc5bf2SAlexey Budankov 16573a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 16583a6c51e4SJiri Olsa { 16593a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 16603a6c51e4SJiri Olsa 16613a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16623a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 16639854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 16647741e03eSIan Rogers return TEST_OK; 16653a6c51e4SJiri Olsa } 16663a6c51e4SJiri Olsa 166763503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1668714a92d8SJiri Olsa { 1669515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1670714a92d8SJiri Olsa 16711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16729854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 16747741e03eSIan Rogers return TEST_OK; 1675714a92d8SJiri Olsa } 1676714a92d8SJiri Olsa 167763503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1678714a92d8SJiri Olsa { 1679515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1680714a92d8SJiri Olsa 16811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16829854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 16847741e03eSIan Rogers return TEST_OK; 1685714a92d8SJiri Olsa } 1686714a92d8SJiri Olsa 1687e831f3ccSIan Rogers static int test__term_equal_term(struct evlist *evlist) 1688e831f3ccSIan Rogers { 1689e831f3ccSIan Rogers struct evsel *evsel = evlist__first(evlist); 1690e831f3ccSIan Rogers 1691e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 1692e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1693e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "name") == 0); 1694e831f3ccSIan Rogers return TEST_OK; 1695e831f3ccSIan Rogers } 1696e831f3ccSIan Rogers 16972aadca4bSIan Rogers static int test__term_equal_legacy(struct evlist *evlist) 16982aadca4bSIan Rogers { 16992aadca4bSIan Rogers struct evsel *evsel = evlist__first(evlist); 17002aadca4bSIan Rogers 17012aadca4bSIan Rogers TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 17022aadca4bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 17032aadca4bSIan Rogers TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "l1d") == 0); 17042aadca4bSIan Rogers return TEST_OK; 17052aadca4bSIan Rogers } 17062aadca4bSIan Rogers 1707378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 170882ce75d9SJiri Olsa static int count_tracepoints(void) 170982ce75d9SJiri Olsa { 171082ce75d9SJiri Olsa struct dirent *events_ent; 171182ce75d9SJiri Olsa DIR *events_dir; 171282ce75d9SJiri Olsa int cnt = 0; 171382ce75d9SJiri Olsa 17147014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 171582ce75d9SJiri Olsa 171682ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 171782ce75d9SJiri Olsa 171882ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 171925a7d914SArnaldo Carvalho de Melo char *sys_path; 172082ce75d9SJiri Olsa struct dirent *sys_ent; 172182ce75d9SJiri Olsa DIR *sys_dir; 172282ce75d9SJiri Olsa 172382ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 172482ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 172582ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 172682ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 172782ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 172882ce75d9SJiri Olsa continue; 172982ce75d9SJiri Olsa 173025a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 173125a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 173282ce75d9SJiri Olsa 173382ce75d9SJiri Olsa sys_dir = opendir(sys_path); 173482ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 173582ce75d9SJiri Olsa 173682ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 173782ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 173882ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 173982ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 174082ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 174182ce75d9SJiri Olsa continue; 174282ce75d9SJiri Olsa 174382ce75d9SJiri Olsa cnt++; 174482ce75d9SJiri Olsa } 174582ce75d9SJiri Olsa 174682ce75d9SJiri Olsa closedir(sys_dir); 174725a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 174882ce75d9SJiri Olsa } 174982ce75d9SJiri Olsa 175082ce75d9SJiri Olsa closedir(events_dir); 175182ce75d9SJiri Olsa return cnt; 175282ce75d9SJiri Olsa } 175382ce75d9SJiri Olsa 175463503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 175582ce75d9SJiri Olsa { 175682ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 17576484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 175882ce75d9SJiri Olsa 175982ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 176082ce75d9SJiri Olsa } 1761378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 176282ce75d9SJiri Olsa 176323b6339bSArnaldo Carvalho de Melo struct evlist_test { 1764945aea22SJiri Olsa const char *name; 176516ddcfbfSJiri Olsa bool (*valid)(void); 176663503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1767945aea22SJiri Olsa }; 1768945aea22SJiri Olsa 17698252e791SIan Rogers static const struct evlist_test test__events[] = { 1770378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1771615b8f99SAlexander Yarygin { 177243f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1773945aea22SJiri Olsa .check = test__checkevent_tracepoint, 17748252e791SIan Rogers /* 0 */ 1775945aea22SJiri Olsa }, 1776615b8f99SAlexander Yarygin { 1777945aea22SJiri Olsa .name = "syscalls:*", 1778945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 17798252e791SIan Rogers /* 1 */ 1780945aea22SJiri Olsa }, 1781378ef0f5SIan Rogers #endif 1782615b8f99SAlexander Yarygin { 1783945aea22SJiri Olsa .name = "r1a", 1784945aea22SJiri Olsa .check = test__checkevent_raw, 17858252e791SIan Rogers /* 2 */ 1786945aea22SJiri Olsa }, 1787615b8f99SAlexander Yarygin { 1788945aea22SJiri Olsa .name = "1:1", 1789945aea22SJiri Olsa .check = test__checkevent_numeric, 17908252e791SIan Rogers /* 3 */ 1791945aea22SJiri Olsa }, 1792615b8f99SAlexander Yarygin { 1793945aea22SJiri Olsa .name = "instructions", 1794945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 17958252e791SIan Rogers /* 4 */ 1796945aea22SJiri Olsa }, 1797615b8f99SAlexander Yarygin { 1798945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1799945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 18008252e791SIan Rogers /* 5 */ 1801945aea22SJiri Olsa }, 1802615b8f99SAlexander Yarygin { 1803945aea22SJiri Olsa .name = "faults", 1804945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 18058252e791SIan Rogers /* 6 */ 1806945aea22SJiri Olsa }, 1807615b8f99SAlexander Yarygin { 1808945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1809945aea22SJiri Olsa .check = test__checkevent_genhw, 18108252e791SIan Rogers /* 7 */ 1811945aea22SJiri Olsa }, 1812615b8f99SAlexander Yarygin { 1813945aea22SJiri Olsa .name = "mem:0", 1814945aea22SJiri Olsa .check = test__checkevent_breakpoint, 18158252e791SIan Rogers /* 8 */ 1816945aea22SJiri Olsa }, 1817615b8f99SAlexander Yarygin { 1818945aea22SJiri Olsa .name = "mem:0:x", 1819945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 18208252e791SIan Rogers /* 9 */ 1821945aea22SJiri Olsa }, 1822615b8f99SAlexander Yarygin { 1823945aea22SJiri Olsa .name = "mem:0:r", 1824945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 18258252e791SIan Rogers /* 0 */ 1826945aea22SJiri Olsa }, 1827615b8f99SAlexander Yarygin { 1828945aea22SJiri Olsa .name = "mem:0:w", 1829945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 18308252e791SIan Rogers /* 1 */ 1831945aea22SJiri Olsa }, 1832378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1833615b8f99SAlexander Yarygin { 183443f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1835945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 18368252e791SIan Rogers /* 2 */ 1837945aea22SJiri Olsa }, 1838615b8f99SAlexander Yarygin { 1839945aea22SJiri Olsa .name = "syscalls:*:u", 1840945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 18418252e791SIan Rogers /* 3 */ 1842945aea22SJiri Olsa }, 1843378ef0f5SIan Rogers #endif 1844615b8f99SAlexander Yarygin { 1845945aea22SJiri Olsa .name = "r1a:kp", 1846945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 18478252e791SIan Rogers /* 4 */ 1848945aea22SJiri Olsa }, 1849615b8f99SAlexander Yarygin { 1850945aea22SJiri Olsa .name = "1:1:hp", 1851945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 18528252e791SIan Rogers /* 5 */ 1853945aea22SJiri Olsa }, 1854615b8f99SAlexander Yarygin { 1855945aea22SJiri Olsa .name = "instructions:h", 1856945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 18578252e791SIan Rogers /* 6 */ 1858945aea22SJiri Olsa }, 1859615b8f99SAlexander Yarygin { 1860945aea22SJiri Olsa .name = "faults:u", 1861945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 18628252e791SIan Rogers /* 7 */ 1863945aea22SJiri Olsa }, 1864615b8f99SAlexander Yarygin { 1865945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1866945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 18678252e791SIan Rogers /* 8 */ 1868945aea22SJiri Olsa }, 1869615b8f99SAlexander Yarygin { 1870945aea22SJiri Olsa .name = "mem:0:u", 1871945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 18728252e791SIan Rogers /* 9 */ 1873945aea22SJiri Olsa }, 1874615b8f99SAlexander Yarygin { 1875945aea22SJiri Olsa .name = "mem:0:x:k", 1876945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 18778252e791SIan Rogers /* 0 */ 1878945aea22SJiri Olsa }, 1879615b8f99SAlexander Yarygin { 1880945aea22SJiri Olsa .name = "mem:0:r:hp", 1881945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 18828252e791SIan Rogers /* 1 */ 1883945aea22SJiri Olsa }, 1884615b8f99SAlexander Yarygin { 1885945aea22SJiri Olsa .name = "mem:0:w:up", 1886945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 18878252e791SIan Rogers /* 2 */ 1888945aea22SJiri Olsa }, 1889378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1890615b8f99SAlexander Yarygin { 189143f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1892945aea22SJiri Olsa .check = test__checkevent_list, 18938252e791SIan Rogers /* 3 */ 1894945aea22SJiri Olsa }, 1895378ef0f5SIan Rogers #endif 1896615b8f99SAlexander Yarygin { 1897945aea22SJiri Olsa .name = "instructions:G", 1898945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 18998252e791SIan Rogers /* 4 */ 1900945aea22SJiri Olsa }, 1901615b8f99SAlexander Yarygin { 1902945aea22SJiri Olsa .name = "instructions:H", 1903945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 19048252e791SIan Rogers /* 5 */ 1905945aea22SJiri Olsa }, 1906615b8f99SAlexander Yarygin { 1907945aea22SJiri Olsa .name = "mem:0:rw", 1908945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 19098252e791SIan Rogers /* 6 */ 1910945aea22SJiri Olsa }, 1911615b8f99SAlexander Yarygin { 1912945aea22SJiri Olsa .name = "mem:0:rw:kp", 1913945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 19148252e791SIan Rogers /* 7 */ 1915945aea22SJiri Olsa }, 1916615b8f99SAlexander Yarygin { 1917945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1918945aea22SJiri Olsa .check = test__group1, 19198252e791SIan Rogers /* 8 */ 1920945aea22SJiri Olsa }, 1921615b8f99SAlexander Yarygin { 1922945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1923945aea22SJiri Olsa .check = test__group2, 19248252e791SIan Rogers /* 9 */ 1925945aea22SJiri Olsa }, 1926378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1927615b8f99SAlexander Yarygin { 192843f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1929945aea22SJiri Olsa .check = test__group3, 19308252e791SIan Rogers /* 0 */ 1931945aea22SJiri Olsa }, 1932378ef0f5SIan Rogers #endif 1933615b8f99SAlexander Yarygin { 1934945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1935945aea22SJiri Olsa .check = test__group4, 19368252e791SIan Rogers /* 1 */ 1937945aea22SJiri Olsa }, 1938615b8f99SAlexander Yarygin { 1939945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1940945aea22SJiri Olsa .check = test__group5, 19418252e791SIan Rogers /* 2 */ 1942945aea22SJiri Olsa }, 1943378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1944615b8f99SAlexander Yarygin { 194582ce75d9SJiri Olsa .name = "*:*", 194682ce75d9SJiri Olsa .check = test__all_tracepoints, 19478252e791SIan Rogers /* 3 */ 194882ce75d9SJiri Olsa }, 1949378ef0f5SIan Rogers #endif 1950615b8f99SAlexander Yarygin { 19515a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 19525a30a99fSJiri Olsa .check = test__group_gh1, 19538252e791SIan Rogers /* 4 */ 19545a30a99fSJiri Olsa }, 1955615b8f99SAlexander Yarygin { 19565a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 19575a30a99fSJiri Olsa .check = test__group_gh2, 19588252e791SIan Rogers /* 5 */ 19595a30a99fSJiri Olsa }, 1960615b8f99SAlexander Yarygin { 19615a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 19625a30a99fSJiri Olsa .check = test__group_gh3, 19638252e791SIan Rogers /* 6 */ 19645a30a99fSJiri Olsa }, 1965615b8f99SAlexander Yarygin { 19665a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 19675a30a99fSJiri Olsa .check = test__group_gh4, 19688252e791SIan Rogers /* 7 */ 19695a30a99fSJiri Olsa }, 1970615b8f99SAlexander Yarygin { 1971a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1972a9f93f97SJiri Olsa .check = test__leader_sample1, 19738252e791SIan Rogers /* 8 */ 1974a9f93f97SJiri Olsa }, 1975615b8f99SAlexander Yarygin { 1976a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1977a9f93f97SJiri Olsa .check = test__leader_sample2, 19788252e791SIan Rogers /* 9 */ 1979a9f93f97SJiri Olsa }, 1980615b8f99SAlexander Yarygin { 1981c9ee780fSMichael Ellerman .name = "instructions:uDp", 1982c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 19838252e791SIan Rogers /* 0 */ 1984c9ee780fSMichael Ellerman }, 1985615b8f99SAlexander Yarygin { 1986c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1987c9ee780fSMichael Ellerman .check = test__pinned_group, 19888252e791SIan Rogers /* 1 */ 1989c9ee780fSMichael Ellerman }, 1990ec32398cSJacob Shin { 1991ec32398cSJacob Shin .name = "mem:0/1", 1992ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 19938252e791SIan Rogers /* 2 */ 1994ec32398cSJacob Shin }, 1995ec32398cSJacob Shin { 1996ec32398cSJacob Shin .name = "mem:0/2:w", 1997ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 19988252e791SIan Rogers /* 3 */ 1999ec32398cSJacob Shin }, 2000ec32398cSJacob Shin { 2001ec32398cSJacob Shin .name = "mem:0/4:rw:u", 2002ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 20038252e791SIan Rogers /* 4 */ 2004ec32398cSJacob Shin }, 2005378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 2006c0bc8c6dSAlexander Yarygin { 2007c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 2008c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 200953fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 20108252e791SIan Rogers /* 0 */ 2011c0bc8c6dSAlexander Yarygin }, 2012c0bc8c6dSAlexander Yarygin #endif 2013a1e12da4SJiri Olsa { 2014a1e12da4SJiri Olsa .name = "instructions:I", 2015a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 20168252e791SIan Rogers /* 5 */ 2017a1e12da4SJiri Olsa }, 2018a1e12da4SJiri Olsa { 2019a1e12da4SJiri Olsa .name = "instructions:kIG", 2020a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 20218252e791SIan Rogers /* 6 */ 2022a1e12da4SJiri Olsa }, 2023ddd83c97SJiri Olsa { 2024ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 2025ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 20268252e791SIan Rogers /* 7 */ 2027ddd83c97SJiri Olsa }, 202810bf358aSWang Nan { 202910bf358aSWang Nan .name = "instructions/name=insn/", 203010bf358aSWang Nan .check = test__checkevent_config_symbol, 20318252e791SIan Rogers /* 8 */ 203210bf358aSWang Nan }, 203310bf358aSWang Nan { 203410bf358aSWang Nan .name = "r1234/name=rawpmu/", 203510bf358aSWang Nan .check = test__checkevent_config_raw, 20368252e791SIan Rogers /* 9 */ 203710bf358aSWang Nan }, 203810bf358aSWang Nan { 203910bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 204010bf358aSWang Nan .check = test__checkevent_config_num, 20418252e791SIan Rogers /* 0 */ 204210bf358aSWang Nan }, 204343d0b978SWang Nan { 204443d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 204543d0b978SWang Nan .check = test__checkevent_config_cache, 20468252e791SIan Rogers /* 1 */ 204743d0b978SWang Nan }, 2048b3f58c8dSArnaldo Carvalho de Melo { 2049b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 205016ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 2051b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 20528252e791SIan Rogers /* 2 */ 2053b3f58c8dSArnaldo Carvalho de Melo }, 205406dc5bf2SAlexey Budankov { 205506dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 205606dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 20578252e791SIan Rogers /* 3 */ 2058714a92d8SJiri Olsa }, 2059714a92d8SJiri Olsa { 2060714a92d8SJiri Olsa .name = "cycles//u", 2061714a92d8SJiri Olsa .check = test__sym_event_slash, 20628252e791SIan Rogers /* 4 */ 2063714a92d8SJiri Olsa }, 2064714a92d8SJiri Olsa { 2065714a92d8SJiri Olsa .name = "cycles:k", 2066714a92d8SJiri Olsa .check = test__sym_event_dc, 20678252e791SIan Rogers /* 5 */ 20680997a266SAndi Kleen }, 20690997a266SAndi Kleen { 20700997a266SAndi Kleen .name = "instructions:uep", 20710997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 20728252e791SIan Rogers /* 6 */ 20730997a266SAndi Kleen }, 20740997a266SAndi Kleen { 20750997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 20760997a266SAndi Kleen .check = test__exclusive_group, 20778252e791SIan Rogers /* 7 */ 20780997a266SAndi Kleen }, 2079e831f3ccSIan Rogers { 2080e831f3ccSIan Rogers .name = "cycles/name=name/", 2081e831f3ccSIan Rogers .check = test__term_equal_term, 2082e831f3ccSIan Rogers /* 8 */ 2083e831f3ccSIan Rogers }, 20842aadca4bSIan Rogers { 20852aadca4bSIan Rogers .name = "cycles/name=l1d/", 20862aadca4bSIan Rogers .check = test__term_equal_legacy, 20872aadca4bSIan Rogers /* 9 */ 20882aadca4bSIan Rogers }, 2089f0617f52SAdrian Hunter { 2090f0617f52SAdrian Hunter .name = "mem:0/name=breakpoint/", 2091f0617f52SAdrian Hunter .check = test__checkevent_breakpoint, 2092f0617f52SAdrian Hunter /* 0 */ 2093f0617f52SAdrian Hunter }, 2094f0617f52SAdrian Hunter { 2095f0617f52SAdrian Hunter .name = "mem:0:x/name=breakpoint/", 2096f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_x, 2097f0617f52SAdrian Hunter /* 1 */ 2098f0617f52SAdrian Hunter }, 2099f0617f52SAdrian Hunter { 2100f0617f52SAdrian Hunter .name = "mem:0:r/name=breakpoint/", 2101f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_r, 2102f0617f52SAdrian Hunter /* 2 */ 2103f0617f52SAdrian Hunter }, 2104f0617f52SAdrian Hunter { 2105f0617f52SAdrian Hunter .name = "mem:0:w/name=breakpoint/", 2106f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_w, 2107f0617f52SAdrian Hunter /* 3 */ 2108f0617f52SAdrian Hunter }, 2109f0617f52SAdrian Hunter { 2110f0617f52SAdrian Hunter .name = "mem:0/name=breakpoint/u", 2111f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_modifier_name, 2112f0617f52SAdrian Hunter /* 4 */ 2113f0617f52SAdrian Hunter }, 2114f0617f52SAdrian Hunter { 2115f0617f52SAdrian Hunter .name = "mem:0:x/name=breakpoint/k", 2116f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_x_modifier_name, 2117f0617f52SAdrian Hunter /* 5 */ 2118f0617f52SAdrian Hunter }, 2119f0617f52SAdrian Hunter { 2120f0617f52SAdrian Hunter .name = "mem:0:r/name=breakpoint/hp", 2121f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_r_modifier_name, 2122f0617f52SAdrian Hunter /* 6 */ 2123f0617f52SAdrian Hunter }, 2124f0617f52SAdrian Hunter { 2125f0617f52SAdrian Hunter .name = "mem:0:w/name=breakpoint/up", 2126f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_w_modifier_name, 2127f0617f52SAdrian Hunter /* 7 */ 2128f0617f52SAdrian Hunter }, 2129f0617f52SAdrian Hunter { 2130f0617f52SAdrian Hunter .name = "mem:0:rw/name=breakpoint/", 2131f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_rw, 2132f0617f52SAdrian Hunter /* 8 */ 2133f0617f52SAdrian Hunter }, 2134f0617f52SAdrian Hunter { 2135f0617f52SAdrian Hunter .name = "mem:0:rw/name=breakpoint/kp", 2136f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_rw_modifier_name, 2137f0617f52SAdrian Hunter /* 9 */ 2138f0617f52SAdrian Hunter }, 2139f0617f52SAdrian Hunter { 2140f0617f52SAdrian Hunter .name = "mem:0/1/name=breakpoint/", 2141f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len, 2142f0617f52SAdrian Hunter /* 0 */ 2143f0617f52SAdrian Hunter }, 2144f0617f52SAdrian Hunter { 2145f0617f52SAdrian Hunter .name = "mem:0/2:w/name=breakpoint/", 2146f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len_w, 2147f0617f52SAdrian Hunter /* 1 */ 2148f0617f52SAdrian Hunter }, 2149f0617f52SAdrian Hunter { 2150f0617f52SAdrian Hunter .name = "mem:0/4:rw/name=breakpoint/u", 2151f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len_rw_modifier, 2152f0617f52SAdrian Hunter /* 2 */ 2153f0617f52SAdrian Hunter }, 2154f0617f52SAdrian Hunter { 2155f0617f52SAdrian Hunter .name = "mem:0/1/name=breakpoint1/,mem:0/4:rw/name=breakpoint2/", 2156f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_2_events, 2157f0617f52SAdrian Hunter /* 3 */ 2158f0617f52SAdrian Hunter }, 2159945aea22SJiri Olsa }; 2160945aea22SJiri Olsa 21618252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 2162615b8f99SAlexander Yarygin { 2163945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 21648f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 2165945aea22SJiri Olsa .check = test__checkevent_pmu, 21668252e791SIan Rogers /* 0 */ 2167945aea22SJiri Olsa }, 2168615b8f99SAlexander Yarygin { 2169945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 21708f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 2171945aea22SJiri Olsa .check = test__checkevent_pmu_name, 21728252e791SIan Rogers /* 1 */ 2173945aea22SJiri Olsa }, 217471ef150eSKan Liang { 217571ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 21768f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 217771ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 21788252e791SIan Rogers /* 2 */ 217971ef150eSKan Liang }, 218006dc5bf2SAlexey Budankov { 2181a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 21828f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 218306dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 21848252e791SIan Rogers /* 3 */ 21853a6c51e4SJiri Olsa }, 21863a6c51e4SJiri Olsa { 21873a6c51e4SJiri Olsa .name = "software/r1a/", 21883a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 21898252e791SIan Rogers /* 4 */ 21903a6c51e4SJiri Olsa }, 2191c33cdf54SJiri Olsa { 2192c33cdf54SJiri Olsa .name = "software/r0x1a/", 2193c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 21948252e791SIan Rogers /* 5 */ 2195c33cdf54SJiri Olsa }, 21966fd1e519SIan Rogers { 21976fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/", 21986fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 21996fd1e519SIan Rogers .check = test__checkevent_genhw, 22006fd1e519SIan Rogers /* 6 */ 22016fd1e519SIan Rogers }, 22026fd1e519SIan Rogers { 22036fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/kp", 22046fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 22056fd1e519SIan Rogers .check = test__checkevent_genhw_modifier, 22066fd1e519SIan Rogers /* 7 */ 22076fd1e519SIan Rogers }, 22086fd1e519SIan Rogers { 22096fd1e519SIan Rogers .name = "cpu/L1-dcache-misses,name=cachepmu/", 22106fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 22116fd1e519SIan Rogers .check = test__checkevent_config_cache, 22126fd1e519SIan Rogers /* 8 */ 22136fd1e519SIan Rogers }, 22145ea8f2ccSIan Rogers { 22155ea8f2ccSIan Rogers .name = "cpu/instructions/", 22165ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22175ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name, 22185ea8f2ccSIan Rogers /* 9 */ 22195ea8f2ccSIan Rogers }, 22205ea8f2ccSIan Rogers { 22215ea8f2ccSIan Rogers .name = "cpu/cycles,period=100000,config2/", 22225ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22235ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_config, 22245ea8f2ccSIan Rogers /* 0 */ 22255ea8f2ccSIan Rogers }, 22265ea8f2ccSIan Rogers { 22275ea8f2ccSIan Rogers .name = "cpu/instructions/h", 22285ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22295ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_modifier, 22305ea8f2ccSIan Rogers /* 1 */ 22315ea8f2ccSIan Rogers }, 22325ea8f2ccSIan Rogers { 22335ea8f2ccSIan Rogers .name = "cpu/instructions/G", 22345ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22355ea8f2ccSIan Rogers .check = test__checkevent_exclude_host_modifier, 22365ea8f2ccSIan Rogers /* 2 */ 22375ea8f2ccSIan Rogers }, 22385ea8f2ccSIan Rogers { 22395ea8f2ccSIan Rogers .name = "cpu/instructions/H", 22405ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22415ea8f2ccSIan Rogers .check = test__checkevent_exclude_guest_modifier, 22425ea8f2ccSIan Rogers /* 3 */ 22435ea8f2ccSIan Rogers }, 22445ea8f2ccSIan Rogers { 22455ea8f2ccSIan Rogers .name = "{cpu/instructions/k,cpu/cycles/upp}", 22465ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22475ea8f2ccSIan Rogers .check = test__group1, 22485ea8f2ccSIan Rogers /* 4 */ 22495ea8f2ccSIan Rogers }, 22505ea8f2ccSIan Rogers { 22515ea8f2ccSIan Rogers .name = "{cpu/cycles/u,cpu/instructions/kp}:p", 22525ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22535ea8f2ccSIan Rogers .check = test__group4, 22545ea8f2ccSIan Rogers /* 5 */ 22555ea8f2ccSIan Rogers }, 22565ea8f2ccSIan Rogers { 22575ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/G}:H", 22585ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22595ea8f2ccSIan Rogers .check = test__group_gh1, 22605ea8f2ccSIan Rogers /* 6 */ 22615ea8f2ccSIan Rogers }, 22625ea8f2ccSIan Rogers { 22635ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/H}:G", 22645ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22655ea8f2ccSIan Rogers .check = test__group_gh2, 22665ea8f2ccSIan Rogers /* 7 */ 22675ea8f2ccSIan Rogers }, 22685ea8f2ccSIan Rogers { 22695ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:u", 22705ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22715ea8f2ccSIan Rogers .check = test__group_gh3, 22725ea8f2ccSIan Rogers /* 8 */ 22735ea8f2ccSIan Rogers }, 22745ea8f2ccSIan Rogers { 22755ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:uG", 22765ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22775ea8f2ccSIan Rogers .check = test__group_gh4, 22785ea8f2ccSIan Rogers /* 9 */ 22795ea8f2ccSIan Rogers }, 22805ea8f2ccSIan Rogers { 22815ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S", 22825ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22835ea8f2ccSIan Rogers .check = test__leader_sample1, 22845ea8f2ccSIan Rogers /* 0 */ 22855ea8f2ccSIan Rogers }, 22865ea8f2ccSIan Rogers { 22875ea8f2ccSIan Rogers .name = "{cpu/instructions/,cpu/branch-misses/}:Su", 22885ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22895ea8f2ccSIan Rogers .check = test__leader_sample2, 22905ea8f2ccSIan Rogers /* 1 */ 22915ea8f2ccSIan Rogers }, 22925ea8f2ccSIan Rogers { 22935ea8f2ccSIan Rogers .name = "cpu/instructions/uDp", 22945ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22955ea8f2ccSIan Rogers .check = test__checkevent_pinned_modifier, 22965ea8f2ccSIan Rogers /* 2 */ 22975ea8f2ccSIan Rogers }, 22985ea8f2ccSIan Rogers { 22995ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D", 23005ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23015ea8f2ccSIan Rogers .check = test__pinned_group, 23025ea8f2ccSIan Rogers /* 3 */ 23035ea8f2ccSIan Rogers }, 23045ea8f2ccSIan Rogers { 23055ea8f2ccSIan Rogers .name = "cpu/instructions/I", 23065ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23075ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier, 23085ea8f2ccSIan Rogers /* 4 */ 23095ea8f2ccSIan Rogers }, 23105ea8f2ccSIan Rogers { 23115ea8f2ccSIan Rogers .name = "cpu/instructions/kIG", 23125ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23135ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier_1, 23145ea8f2ccSIan Rogers /* 5 */ 23155ea8f2ccSIan Rogers }, 23165ea8f2ccSIan Rogers { 23175ea8f2ccSIan Rogers .name = "cpu/cycles/u", 23185ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23195ea8f2ccSIan Rogers .check = test__sym_event_slash, 23205ea8f2ccSIan Rogers /* 6 */ 23215ea8f2ccSIan Rogers }, 23225ea8f2ccSIan Rogers { 23235ea8f2ccSIan Rogers .name = "cpu/cycles/k", 23245ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23255ea8f2ccSIan Rogers .check = test__sym_event_dc, 23265ea8f2ccSIan Rogers /* 7 */ 23275ea8f2ccSIan Rogers }, 23285ea8f2ccSIan Rogers { 23295ea8f2ccSIan Rogers .name = "cpu/instructions/uep", 23305ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23315ea8f2ccSIan Rogers .check = test__checkevent_exclusive_modifier, 23325ea8f2ccSIan Rogers /* 8 */ 23335ea8f2ccSIan Rogers }, 23345ea8f2ccSIan Rogers { 23355ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e", 23365ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23375ea8f2ccSIan Rogers .check = test__exclusive_group, 23385ea8f2ccSIan Rogers /* 9 */ 23395ea8f2ccSIan Rogers }, 2340e831f3ccSIan Rogers { 2341e831f3ccSIan Rogers .name = "cpu/cycles,name=name/", 2342e831f3ccSIan Rogers .valid = test__pmu_cpu_valid, 2343e831f3ccSIan Rogers .check = test__term_equal_term, 2344e831f3ccSIan Rogers /* 0 */ 2345e831f3ccSIan Rogers }, 23462aadca4bSIan Rogers { 23472aadca4bSIan Rogers .name = "cpu/cycles,name=l1d/", 23482aadca4bSIan Rogers .valid = test__pmu_cpu_valid, 23492aadca4bSIan Rogers .check = test__term_equal_legacy, 23502aadca4bSIan Rogers /* 1 */ 23512aadca4bSIan Rogers }, 2352945aea22SJiri Olsa }; 2353945aea22SJiri Olsa 235423b6339bSArnaldo Carvalho de Melo struct terms_test { 2355945aea22SJiri Olsa const char *str; 2356945aea22SJiri Olsa int (*check)(struct list_head *terms); 2357945aea22SJiri Olsa }; 2358945aea22SJiri Olsa 2359b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2360945aea22SJiri Olsa [0] = { 2361204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 2362945aea22SJiri Olsa .check = test__checkterms_simple, 2363945aea22SJiri Olsa }, 2364945aea22SJiri Olsa }; 2365945aea22SJiri Olsa 23668252e791SIan Rogers static int test_event(const struct evlist_test *e) 2367945aea22SJiri Olsa { 2368a910e466SIan Rogers struct parse_events_error err; 236963503dbaSJiri Olsa struct evlist *evlist; 2370945aea22SJiri Olsa int ret; 2371945aea22SJiri Olsa 237216ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 23737741e03eSIan Rogers pr_debug("... SKIP\n"); 23747741e03eSIan Rogers return TEST_OK; 237516ddcfbfSJiri Olsa } 237616ddcfbfSJiri Olsa 23770f98b11cSJiri Olsa evlist = evlist__new(); 23787741e03eSIan Rogers if (evlist == NULL) { 23797741e03eSIan Rogers pr_err("Failed allocation"); 23807741e03eSIan Rogers return TEST_FAIL; 23817741e03eSIan Rogers } 238207eafd4eSIan Rogers parse_events_error__init(&err); 2383933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2384945aea22SJiri Olsa if (ret) { 2385933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2386933ccf20SJiri Olsa e->name, ret, err.str); 23876c191289SIan Rogers parse_events_error__print(&err, e->name); 23887741e03eSIan Rogers ret = TEST_FAIL; 2389aefde50aSIan Rogers if (err.str && strstr(err.str, "can't access trace events")) 23907741e03eSIan Rogers ret = TEST_SKIP; 23912d4352c0SArnaldo Carvalho de Melo } else { 23922d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2393945aea22SJiri Olsa } 239407eafd4eSIan Rogers parse_events_error__exit(&err); 2395c12995a5SJiri Olsa evlist__delete(evlist); 2396945aea22SJiri Olsa 2397945aea22SJiri Olsa return ret; 2398945aea22SJiri Olsa } 2399945aea22SJiri Olsa 2400b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2401b4a7276cSJohn Garry { 2402b4a7276cSJohn Garry struct parse_events_error err; 2403b4a7276cSJohn Garry struct evlist *evlist; 2404b4a7276cSJohn Garry int ret; 2405b4a7276cSJohn Garry 2406b4a7276cSJohn Garry evlist = evlist__new(); 2407b4a7276cSJohn Garry if (!evlist) 2408b4a7276cSJohn Garry return -ENOMEM; 2409b4a7276cSJohn Garry 2410b4a7276cSJohn Garry parse_events_error__init(&err); 2411411ad22eSIan Rogers ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err, 2412411ad22eSIan Rogers &perf_pmu__fake, /*warn_if_reordered=*/true); 2413b4a7276cSJohn Garry if (ret) { 2414b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2415b4a7276cSJohn Garry str, ret, err.str); 2416b4a7276cSJohn Garry parse_events_error__print(&err, str); 2417b4a7276cSJohn Garry } 2418b4a7276cSJohn Garry 2419b4a7276cSJohn Garry parse_events_error__exit(&err); 2420b4a7276cSJohn Garry evlist__delete(evlist); 2421b4a7276cSJohn Garry 2422b4a7276cSJohn Garry return ret; 2423b4a7276cSJohn Garry } 2424b4a7276cSJohn Garry 24257741e03eSIan Rogers static int combine_test_results(int existing, int latest) 24267741e03eSIan Rogers { 24277741e03eSIan Rogers if (existing == TEST_FAIL) 24287741e03eSIan Rogers return TEST_FAIL; 24297741e03eSIan Rogers if (existing == TEST_SKIP) 24307741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 24317741e03eSIan Rogers return latest; 24327741e03eSIan Rogers } 24337741e03eSIan Rogers 24348252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2435945aea22SJiri Olsa { 24367741e03eSIan Rogers int ret = TEST_OK; 2437945aea22SJiri Olsa 24388252e791SIan Rogers for (int i = 0; i < cnt; i++) { 24398252e791SIan Rogers const struct evlist_test *e = &events[i]; 24407741e03eSIan Rogers int test_ret; 2441945aea22SJiri Olsa 24427741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 24437741e03eSIan Rogers test_ret = test_event(e); 24447741e03eSIan Rogers if (test_ret != TEST_OK) { 24457741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 24467741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 24477741e03eSIan Rogers } 2448945aea22SJiri Olsa } 2449945aea22SJiri Olsa 24507741e03eSIan Rogers return ret; 24517741e03eSIan Rogers } 24527741e03eSIan Rogers 24537741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 24547741e03eSIan Rogers { 24557741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2456945aea22SJiri Olsa } 2457945aea22SJiri Olsa 2458b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2459945aea22SJiri Olsa { 2460c549aca5SDavid Ahern struct list_head terms; 2461945aea22SJiri Olsa int ret; 2462945aea22SJiri Olsa 2463c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2464945aea22SJiri Olsa 2465c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2466945aea22SJiri Olsa if (ret) { 2467945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2468945aea22SJiri Olsa t->str , ret); 2469945aea22SJiri Olsa return ret; 2470945aea22SJiri Olsa } 2471945aea22SJiri Olsa 2472c549aca5SDavid Ahern ret = t->check(&terms); 2473682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2474945aea22SJiri Olsa 2475945aea22SJiri Olsa return ret; 2476945aea22SJiri Olsa } 2477945aea22SJiri Olsa 2478b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2479945aea22SJiri Olsa { 2480945aea22SJiri Olsa int ret = 0; 2481945aea22SJiri Olsa 2482b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2483b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2484945aea22SJiri Olsa 2485945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2486945aea22SJiri Olsa ret = test_term(t); 2487945aea22SJiri Olsa if (ret) 2488945aea22SJiri Olsa break; 2489945aea22SJiri Olsa } 2490945aea22SJiri Olsa 2491945aea22SJiri Olsa return ret; 2492945aea22SJiri Olsa } 2493945aea22SJiri Olsa 24947741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 24957741e03eSIan Rogers { 24967741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 24977741e03eSIan Rogers } 24987741e03eSIan Rogers 24997741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2500945aea22SJiri Olsa { 2501f24ebe80SIan Rogers struct perf_pmu *pmu = NULL; 25025a52817eSIan Rogers int ret = TEST_OK; 25035a52817eSIan Rogers 25041eaf496eSIan Rogers while ((pmu = perf_pmus__scan(pmu)) != NULL) { 2505945aea22SJiri Olsa struct stat st; 2506945aea22SJiri Olsa char path[PATH_MAX]; 2507945aea22SJiri Olsa struct dirent *ent; 2508945aea22SJiri Olsa DIR *dir; 25095a52817eSIan Rogers int err; 2510945aea22SJiri Olsa 25115a52817eSIan Rogers snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/", 25125a52817eSIan Rogers sysfs__mountpoint(), pmu->name); 25137741e03eSIan Rogers 25145a52817eSIan Rogers err = stat(path, &st); 25155a52817eSIan Rogers if (err) { 25165a52817eSIan Rogers pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path); 25175a52817eSIan Rogers continue; 2518945aea22SJiri Olsa } 2519945aea22SJiri Olsa 2520945aea22SJiri Olsa dir = opendir(path); 2521945aea22SJiri Olsa if (!dir) { 25227741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 25235a52817eSIan Rogers ret = combine_test_results(ret, TEST_SKIP); 25245a52817eSIan Rogers continue; 2525945aea22SJiri Olsa } 2526945aea22SJiri Olsa 25277741e03eSIan Rogers while ((ent = readdir(dir))) { 25288252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 25292e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 25307741e03eSIan Rogers int test_ret; 2531945aea22SJiri Olsa 253217a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 253317a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2534945aea22SJiri Olsa continue; 2535945aea22SJiri Olsa 25365a52817eSIan Rogers snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name); 2537945aea22SJiri Olsa 2538945aea22SJiri Olsa e.name = name; 2539945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2540945aea22SJiri Olsa 25417741e03eSIan Rogers test_ret = test_event(&e); 25427741e03eSIan Rogers if (test_ret != TEST_OK) { 25437741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 25447741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 25457741e03eSIan Rogers } 25465a52817eSIan Rogers 25475a52817eSIan Rogers if (!is_pmu_core(pmu->name)) 25485a52817eSIan Rogers continue; 25495a52817eSIan Rogers 2550146edff3SIan Rogers /* 2551146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2552146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2553146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2554146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2555146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2556146edff3SIan Rogers * isn't expected after this. As event names in the config 2557146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2558146edff3SIan Rogers * above. 2559146edff3SIan Rogers */ 2560146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2561146edff3SIan Rogers continue; 2562146edff3SIan Rogers 25635a52817eSIan Rogers snprintf(name, sizeof(name), "%s:u,%s/event=%s/u", 25645a52817eSIan Rogers ent->d_name, pmu->name, ent->d_name); 2565ffe59788SKan Liang e.name = name; 2566ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 25677741e03eSIan Rogers test_ret = test_event(&e); 25687741e03eSIan Rogers if (test_ret != TEST_OK) { 25697741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 25707741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 25717741e03eSIan Rogers } 2572945aea22SJiri Olsa } 2573945aea22SJiri Olsa 2574945aea22SJiri Olsa closedir(dir); 25755a52817eSIan Rogers } 2576945aea22SJiri Olsa return ret; 2577945aea22SJiri Olsa } 2578945aea22SJiri Olsa 25797741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 25807741e03eSIan Rogers { 25817741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 25827741e03eSIan Rogers } 25837741e03eSIan Rogers 2584c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2585c7a3828dSJin Yao { 2586c7a3828dSJin Yao char path[PATH_MAX]; 2587c7a3828dSJin Yao DIR *dir; 2588c7a3828dSJin Yao struct dirent *dent; 2589c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2590c7a3828dSJin Yao char buf[128]; 2591c7a3828dSJin Yao FILE *file; 2592c7a3828dSJin Yao 2593c7a3828dSJin Yao if (!sysfs) 2594c7a3828dSJin Yao return false; 2595c7a3828dSJin Yao 2596c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2597c7a3828dSJin Yao dir = opendir(path); 2598c7a3828dSJin Yao if (!dir) 2599c7a3828dSJin Yao return false; 2600c7a3828dSJin Yao 2601c7a3828dSJin Yao while ((dent = readdir(dir))) { 2602c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2603c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2604c7a3828dSJin Yao continue; 2605c7a3828dSJin Yao 2606c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2607c7a3828dSJin Yao sysfs, dent->d_name); 2608c7a3828dSJin Yao 2609c7a3828dSJin Yao if (!file_available(path)) 2610c7a3828dSJin Yao continue; 2611c7a3828dSJin Yao 2612c7a3828dSJin Yao file = fopen(path, "r"); 2613c7a3828dSJin Yao if (!file) 2614c7a3828dSJin Yao continue; 2615c7a3828dSJin Yao 2616c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2617c7a3828dSJin Yao fclose(file); 2618c7a3828dSJin Yao continue; 2619c7a3828dSJin Yao } 2620c7a3828dSJin Yao 2621c7a3828dSJin Yao /* Remove the last '\n' */ 2622c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2623c7a3828dSJin Yao 2624c7a3828dSJin Yao fclose(file); 2625c7a3828dSJin Yao *event = strdup(dent->d_name); 2626c7a3828dSJin Yao *alias = strdup(buf); 2627c7a3828dSJin Yao closedir(dir); 2628c7a3828dSJin Yao 2629c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2630c7a3828dSJin Yao free(*event); 2631c7a3828dSJin Yao free(*alias); 2632c7a3828dSJin Yao return false; 2633c7a3828dSJin Yao } 2634c7a3828dSJin Yao 2635c7a3828dSJin Yao return true; 2636c7a3828dSJin Yao } 2637c7a3828dSJin Yao 2638c7a3828dSJin Yao closedir(dir); 2639c7a3828dSJin Yao return false; 2640c7a3828dSJin Yao } 2641c7a3828dSJin Yao 2642c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2643c7a3828dSJin Yao { 2644c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2645c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2646c7a3828dSJin Yao 2647c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2648c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 26497741e03eSIan Rogers return TEST_OK; 2650c7a3828dSJin Yao } 2651c7a3828dSJin Yao 26527741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2653c7a3828dSJin Yao { 26548252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2655c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2656c7a3828dSJin Yao 2657c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2658c7a3828dSJin Yao event, alias); 2659c7a3828dSJin Yao 2660c7a3828dSJin Yao e.name = name; 2661c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2662c7a3828dSJin Yao return test_event(&e); 2663c7a3828dSJin Yao } 2664c7a3828dSJin Yao 26657741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 26667741e03eSIan Rogers { 26677741e03eSIan Rogers char *event, *alias; 26687741e03eSIan Rogers int ret; 26697741e03eSIan Rogers 26707741e03eSIan Rogers if (!test_alias(&event, &alias)) 26717741e03eSIan Rogers return TEST_SKIP; 26727741e03eSIan Rogers 26737741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 26747741e03eSIan Rogers 26757741e03eSIan Rogers free(event); 26767741e03eSIan Rogers free(alias); 26777741e03eSIan Rogers return ret; 26787741e03eSIan Rogers } 26797741e03eSIan Rogers 26807741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 26817741e03eSIan Rogers int subtest __maybe_unused) 2682b4a7276cSJohn Garry { 2683b4a7276cSJohn Garry static const char events[][30] = { 2684b4a7276cSJohn Garry "event-hyphen", 2685b4a7276cSJohn Garry "event-two-hyph", 2686b4a7276cSJohn Garry }; 26877741e03eSIan Rogers int ret = TEST_OK; 2688b4a7276cSJohn Garry 26897741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 26907741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 26917741e03eSIan Rogers 26927741e03eSIan Rogers if (test_ret != TEST_OK) { 26937741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 26947741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2695b4a7276cSJohn Garry } 2696b4a7276cSJohn Garry } 2697b4a7276cSJohn Garry 2698b4a7276cSJohn Garry return ret; 2699b4a7276cSJohn Garry } 2700b4a7276cSJohn Garry 27017741e03eSIan Rogers static struct test_case tests__parse_events[] = { 27027741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 27037741e03eSIan Rogers events2, 27047741e03eSIan Rogers "permissions"), 27057741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 27067741e03eSIan Rogers pmu_events, 27077741e03eSIan Rogers "permissions"), 27087741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 27097741e03eSIan Rogers pmu_events2, 27107741e03eSIan Rogers "permissions"), 27117741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 27127741e03eSIan Rogers "no aliases in sysfs"), 27137741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 27147741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 27157741e03eSIan Rogers { .name = NULL, } 27167741e03eSIan Rogers }; 2717945aea22SJiri Olsa 27187741e03eSIan Rogers struct test_suite suite__parse_events = { 27197741e03eSIan Rogers .desc = "Parse event definition strings", 27207741e03eSIan Rogers .test_cases = tests__parse_events, 27217741e03eSIan Rogers }; 2722