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 23bcd981dbSJames Clark static int num_core_entries(void) 24bcd981dbSJames Clark { 25bcd981dbSJames Clark /* 26bcd981dbSJames Clark * If the kernel supports extended type, expect events to be 27bcd981dbSJames Clark * opened once for each core PMU type. Otherwise fall back to the legacy 28bcd981dbSJames Clark * behavior of opening only one event even though there are multiple 29bcd981dbSJames Clark * PMUs 30bcd981dbSJames Clark */ 31bcd981dbSJames Clark if (perf_pmus__supports_extended_type()) 32bcd981dbSJames Clark return perf_pmus__num_core_pmus(); 33bcd981dbSJames Clark 34bcd981dbSJames Clark return 1; 35bcd981dbSJames Clark } 36bcd981dbSJames 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", 356bcd981dbSJames 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", 859bcd981dbSJames Clark evlist->core.nr_entries == (num_core_entries() * 2)); 86027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 861bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 862945aea22SJiri Olsa 863bcd981dbSJames 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", 902bcd981dbSJames 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", 1068bcd981dbSJames Clark evlist->core.nr_entries == (num_core_entries() * 2)); 106927c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1070bcd981dbSJames Clark num_core_entries() == evlist__nr_groups(evlist)); 1071945aea22SJiri Olsa 1072bcd981dbSJames 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", 1113bcd981dbSJames Clark evlist->core.nr_entries == (5 * num_core_entries())); 111427c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1115bcd981dbSJames Clark evlist__nr_groups(evlist) == (2 * num_core_entries())); 1116945aea22SJiri Olsa 1117bcd981dbSJames 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 } 1148bcd981dbSJames 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 } 1178bcd981dbSJames 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", 1199bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 120027c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1201bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 12025a30a99fSJiri Olsa 1203bcd981dbSJames 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", 1240bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 124127c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1242bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 12435a30a99fSJiri Olsa 1244bcd981dbSJames 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", 1281bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 128227c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1283bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 12845a30a99fSJiri Olsa 1285bcd981dbSJames 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", 1322bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 132327c9fcfcSIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1324bcd981dbSJames Clark evlist__nr_groups(evlist) == num_core_entries()); 13255a30a99fSJiri Olsa 1326bcd981dbSJames 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", 1363bcd981dbSJames Clark evlist->core.nr_entries == (3 * num_core_entries())); 1364a9f93f97SJiri Olsa 1365bcd981dbSJames 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", 1415bcd981dbSJames Clark evlist->core.nr_entries == (2 * num_core_entries())); 1416a9f93f97SJiri Olsa 1417bcd981dbSJames 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", 1454bcd981dbSJames Clark evlist->core.nr_entries == num_core_entries()); 145527c9fcfcSIan Rogers 1456bcd981dbSJames 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", 1472bcd981dbSJames Clark evlist->core.nr_entries == (3 * num_core_entries())); 1473c9ee780fSMichael Ellerman 1474bcd981dbSJames 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", 1517bcd981dbSJames Clark evlist->core.nr_entries == 3 * num_core_entries()); 15180997a266SAndi Kleen 1519bcd981dbSJames 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", 1591bcd981dbSJames 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 163407d2b820SIan Rogers static bool test__pmu_cpu_event_valid(void) 163507d2b820SIan Rogers { 163607d2b820SIan Rogers struct perf_pmu *pmu = perf_pmus__find("cpu"); 163707d2b820SIan Rogers 163807d2b820SIan Rogers if (!pmu) 163907d2b820SIan Rogers return false; 164007d2b820SIan Rogers 164107d2b820SIan Rogers return perf_pmu__has_format(pmu, "event"); 164207d2b820SIan Rogers } 164307d2b820SIan Rogers 164416ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 164516ddcfbfSJiri Olsa { 16461eaf496eSIan Rogers return !!perf_pmus__find("intel_pt"); 164716ddcfbfSJiri Olsa } 164816ddcfbfSJiri Olsa 164963503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1650b3f58c8dSArnaldo Carvalho de Melo { 1651515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1652b3f58c8dSArnaldo Carvalho de Melo 1653ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u")); 16547741e03eSIan Rogers return TEST_OK; 1655b3f58c8dSArnaldo Carvalho de Melo } 1656b3f58c8dSArnaldo Carvalho de Melo 165763503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 165806dc5bf2SAlexey Budankov { 1659515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 166006dc5bf2SAlexey Budankov 16619854934bSIan Rogers TEST_ASSERT_VAL("wrong complex name parsing", 16629854934bSIan Rogers evsel__name_is(evsel, 16639854934bSIan Rogers "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks")); 16647741e03eSIan Rogers return TEST_OK; 166506dc5bf2SAlexey Budankov } 166606dc5bf2SAlexey Budankov 16673a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 16683a6c51e4SJiri Olsa { 16693a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 16703a6c51e4SJiri Olsa 16713a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16723a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 16739854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 16747741e03eSIan Rogers return TEST_OK; 16753a6c51e4SJiri Olsa } 16763a6c51e4SJiri Olsa 167763503dbaSJiri Olsa static int test__sym_event_slash(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_kernel", evsel->core.attr.exclude_kernel); 16847741e03eSIan Rogers return TEST_OK; 1685714a92d8SJiri Olsa } 1686714a92d8SJiri Olsa 168763503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1688714a92d8SJiri Olsa { 1689515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1690714a92d8SJiri Olsa 16911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 16929854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 16931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 16947741e03eSIan Rogers return TEST_OK; 1695714a92d8SJiri Olsa } 1696714a92d8SJiri Olsa 1697e831f3ccSIan Rogers static int test__term_equal_term(struct evlist *evlist) 1698e831f3ccSIan Rogers { 1699e831f3ccSIan Rogers struct evsel *evsel = evlist__first(evlist); 1700e831f3ccSIan Rogers 1701e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 1702e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1703e831f3ccSIan Rogers TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "name") == 0); 1704e831f3ccSIan Rogers return TEST_OK; 1705e831f3ccSIan Rogers } 1706e831f3ccSIan Rogers 17072aadca4bSIan Rogers static int test__term_equal_legacy(struct evlist *evlist) 17082aadca4bSIan Rogers { 17092aadca4bSIan Rogers struct evsel *evsel = evlist__first(evlist); 17102aadca4bSIan Rogers 17112aadca4bSIan Rogers TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 17122aadca4bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 17132aadca4bSIan Rogers TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "l1d") == 0); 17142aadca4bSIan Rogers return TEST_OK; 17152aadca4bSIan Rogers } 17162aadca4bSIan Rogers 1717378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 171882ce75d9SJiri Olsa static int count_tracepoints(void) 171982ce75d9SJiri Olsa { 172082ce75d9SJiri Olsa struct dirent *events_ent; 172182ce75d9SJiri Olsa DIR *events_dir; 172282ce75d9SJiri Olsa int cnt = 0; 172382ce75d9SJiri Olsa 17247014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 172582ce75d9SJiri Olsa 172682ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 172782ce75d9SJiri Olsa 172882ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 172925a7d914SArnaldo Carvalho de Melo char *sys_path; 173082ce75d9SJiri Olsa struct dirent *sys_ent; 173182ce75d9SJiri Olsa DIR *sys_dir; 173282ce75d9SJiri Olsa 173382ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 173482ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 173582ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 173682ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 173782ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 173882ce75d9SJiri Olsa continue; 173982ce75d9SJiri Olsa 174025a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 174125a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 174282ce75d9SJiri Olsa 174382ce75d9SJiri Olsa sys_dir = opendir(sys_path); 174482ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 174582ce75d9SJiri Olsa 174682ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 174782ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 174882ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 174982ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 175082ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 175182ce75d9SJiri Olsa continue; 175282ce75d9SJiri Olsa 175382ce75d9SJiri Olsa cnt++; 175482ce75d9SJiri Olsa } 175582ce75d9SJiri Olsa 175682ce75d9SJiri Olsa closedir(sys_dir); 175725a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 175882ce75d9SJiri Olsa } 175982ce75d9SJiri Olsa 176082ce75d9SJiri Olsa closedir(events_dir); 176182ce75d9SJiri Olsa return cnt; 176282ce75d9SJiri Olsa } 176382ce75d9SJiri Olsa 176463503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 176582ce75d9SJiri Olsa { 176682ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 17676484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 176882ce75d9SJiri Olsa 176982ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 177082ce75d9SJiri Olsa } 1771378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 177282ce75d9SJiri Olsa 177323b6339bSArnaldo Carvalho de Melo struct evlist_test { 1774945aea22SJiri Olsa const char *name; 177516ddcfbfSJiri Olsa bool (*valid)(void); 177663503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1777945aea22SJiri Olsa }; 1778945aea22SJiri Olsa 17798252e791SIan Rogers static const struct evlist_test test__events[] = { 1780378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1781615b8f99SAlexander Yarygin { 178243f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1783945aea22SJiri Olsa .check = test__checkevent_tracepoint, 17848252e791SIan Rogers /* 0 */ 1785945aea22SJiri Olsa }, 1786615b8f99SAlexander Yarygin { 1787945aea22SJiri Olsa .name = "syscalls:*", 1788945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 17898252e791SIan Rogers /* 1 */ 1790945aea22SJiri Olsa }, 1791378ef0f5SIan Rogers #endif 1792615b8f99SAlexander Yarygin { 1793945aea22SJiri Olsa .name = "r1a", 1794945aea22SJiri Olsa .check = test__checkevent_raw, 17958252e791SIan Rogers /* 2 */ 1796945aea22SJiri Olsa }, 1797615b8f99SAlexander Yarygin { 1798945aea22SJiri Olsa .name = "1:1", 1799945aea22SJiri Olsa .check = test__checkevent_numeric, 18008252e791SIan Rogers /* 3 */ 1801945aea22SJiri Olsa }, 1802615b8f99SAlexander Yarygin { 1803945aea22SJiri Olsa .name = "instructions", 1804945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 18058252e791SIan Rogers /* 4 */ 1806945aea22SJiri Olsa }, 1807615b8f99SAlexander Yarygin { 1808945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1809945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 18108252e791SIan Rogers /* 5 */ 1811945aea22SJiri Olsa }, 1812615b8f99SAlexander Yarygin { 1813945aea22SJiri Olsa .name = "faults", 1814945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 18158252e791SIan Rogers /* 6 */ 1816945aea22SJiri Olsa }, 1817615b8f99SAlexander Yarygin { 1818945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1819945aea22SJiri Olsa .check = test__checkevent_genhw, 18208252e791SIan Rogers /* 7 */ 1821945aea22SJiri Olsa }, 1822615b8f99SAlexander Yarygin { 1823945aea22SJiri Olsa .name = "mem:0", 1824945aea22SJiri Olsa .check = test__checkevent_breakpoint, 18258252e791SIan Rogers /* 8 */ 1826945aea22SJiri Olsa }, 1827615b8f99SAlexander Yarygin { 1828945aea22SJiri Olsa .name = "mem:0:x", 1829945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 18308252e791SIan Rogers /* 9 */ 1831945aea22SJiri Olsa }, 1832615b8f99SAlexander Yarygin { 1833945aea22SJiri Olsa .name = "mem:0:r", 1834945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 18358252e791SIan Rogers /* 0 */ 1836945aea22SJiri Olsa }, 1837615b8f99SAlexander Yarygin { 1838945aea22SJiri Olsa .name = "mem:0:w", 1839945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 18408252e791SIan Rogers /* 1 */ 1841945aea22SJiri Olsa }, 1842378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1843615b8f99SAlexander Yarygin { 184443f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1845945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 18468252e791SIan Rogers /* 2 */ 1847945aea22SJiri Olsa }, 1848615b8f99SAlexander Yarygin { 1849945aea22SJiri Olsa .name = "syscalls:*:u", 1850945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 18518252e791SIan Rogers /* 3 */ 1852945aea22SJiri Olsa }, 1853378ef0f5SIan Rogers #endif 1854615b8f99SAlexander Yarygin { 1855945aea22SJiri Olsa .name = "r1a:kp", 1856945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 18578252e791SIan Rogers /* 4 */ 1858945aea22SJiri Olsa }, 1859615b8f99SAlexander Yarygin { 1860945aea22SJiri Olsa .name = "1:1:hp", 1861945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 18628252e791SIan Rogers /* 5 */ 1863945aea22SJiri Olsa }, 1864615b8f99SAlexander Yarygin { 1865945aea22SJiri Olsa .name = "instructions:h", 1866945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 18678252e791SIan Rogers /* 6 */ 1868945aea22SJiri Olsa }, 1869615b8f99SAlexander Yarygin { 1870945aea22SJiri Olsa .name = "faults:u", 1871945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 18728252e791SIan Rogers /* 7 */ 1873945aea22SJiri Olsa }, 1874615b8f99SAlexander Yarygin { 1875945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1876945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 18778252e791SIan Rogers /* 8 */ 1878945aea22SJiri Olsa }, 1879615b8f99SAlexander Yarygin { 1880945aea22SJiri Olsa .name = "mem:0:u", 1881945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 18828252e791SIan Rogers /* 9 */ 1883945aea22SJiri Olsa }, 1884615b8f99SAlexander Yarygin { 1885945aea22SJiri Olsa .name = "mem:0:x:k", 1886945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 18878252e791SIan Rogers /* 0 */ 1888945aea22SJiri Olsa }, 1889615b8f99SAlexander Yarygin { 1890945aea22SJiri Olsa .name = "mem:0:r:hp", 1891945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 18928252e791SIan Rogers /* 1 */ 1893945aea22SJiri Olsa }, 1894615b8f99SAlexander Yarygin { 1895945aea22SJiri Olsa .name = "mem:0:w:up", 1896945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 18978252e791SIan Rogers /* 2 */ 1898945aea22SJiri Olsa }, 1899378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1900615b8f99SAlexander Yarygin { 190143f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1902945aea22SJiri Olsa .check = test__checkevent_list, 19038252e791SIan Rogers /* 3 */ 1904945aea22SJiri Olsa }, 1905378ef0f5SIan Rogers #endif 1906615b8f99SAlexander Yarygin { 1907945aea22SJiri Olsa .name = "instructions:G", 1908945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 19098252e791SIan Rogers /* 4 */ 1910945aea22SJiri Olsa }, 1911615b8f99SAlexander Yarygin { 1912945aea22SJiri Olsa .name = "instructions:H", 1913945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 19148252e791SIan Rogers /* 5 */ 1915945aea22SJiri Olsa }, 1916615b8f99SAlexander Yarygin { 1917945aea22SJiri Olsa .name = "mem:0:rw", 1918945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 19198252e791SIan Rogers /* 6 */ 1920945aea22SJiri Olsa }, 1921615b8f99SAlexander Yarygin { 1922945aea22SJiri Olsa .name = "mem:0:rw:kp", 1923945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 19248252e791SIan Rogers /* 7 */ 1925945aea22SJiri Olsa }, 1926615b8f99SAlexander Yarygin { 1927945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1928945aea22SJiri Olsa .check = test__group1, 19298252e791SIan Rogers /* 8 */ 1930945aea22SJiri Olsa }, 1931615b8f99SAlexander Yarygin { 1932945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1933945aea22SJiri Olsa .check = test__group2, 19348252e791SIan Rogers /* 9 */ 1935945aea22SJiri Olsa }, 1936378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1937615b8f99SAlexander Yarygin { 193843f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1939945aea22SJiri Olsa .check = test__group3, 19408252e791SIan Rogers /* 0 */ 1941945aea22SJiri Olsa }, 1942378ef0f5SIan Rogers #endif 1943615b8f99SAlexander Yarygin { 1944945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1945945aea22SJiri Olsa .check = test__group4, 19468252e791SIan Rogers /* 1 */ 1947945aea22SJiri Olsa }, 1948615b8f99SAlexander Yarygin { 1949945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1950945aea22SJiri Olsa .check = test__group5, 19518252e791SIan Rogers /* 2 */ 1952945aea22SJiri Olsa }, 1953378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1954615b8f99SAlexander Yarygin { 195582ce75d9SJiri Olsa .name = "*:*", 195682ce75d9SJiri Olsa .check = test__all_tracepoints, 19578252e791SIan Rogers /* 3 */ 195882ce75d9SJiri Olsa }, 1959378ef0f5SIan Rogers #endif 1960615b8f99SAlexander Yarygin { 19615a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 19625a30a99fSJiri Olsa .check = test__group_gh1, 19638252e791SIan Rogers /* 4 */ 19645a30a99fSJiri Olsa }, 1965615b8f99SAlexander Yarygin { 19665a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 19675a30a99fSJiri Olsa .check = test__group_gh2, 19688252e791SIan Rogers /* 5 */ 19695a30a99fSJiri Olsa }, 1970615b8f99SAlexander Yarygin { 19715a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 19725a30a99fSJiri Olsa .check = test__group_gh3, 19738252e791SIan Rogers /* 6 */ 19745a30a99fSJiri Olsa }, 1975615b8f99SAlexander Yarygin { 19765a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 19775a30a99fSJiri Olsa .check = test__group_gh4, 19788252e791SIan Rogers /* 7 */ 19795a30a99fSJiri Olsa }, 1980615b8f99SAlexander Yarygin { 1981a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1982a9f93f97SJiri Olsa .check = test__leader_sample1, 19838252e791SIan Rogers /* 8 */ 1984a9f93f97SJiri Olsa }, 1985615b8f99SAlexander Yarygin { 1986a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1987a9f93f97SJiri Olsa .check = test__leader_sample2, 19888252e791SIan Rogers /* 9 */ 1989a9f93f97SJiri Olsa }, 1990615b8f99SAlexander Yarygin { 1991c9ee780fSMichael Ellerman .name = "instructions:uDp", 1992c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 19938252e791SIan Rogers /* 0 */ 1994c9ee780fSMichael Ellerman }, 1995615b8f99SAlexander Yarygin { 1996c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1997c9ee780fSMichael Ellerman .check = test__pinned_group, 19988252e791SIan Rogers /* 1 */ 1999c9ee780fSMichael Ellerman }, 2000ec32398cSJacob Shin { 2001ec32398cSJacob Shin .name = "mem:0/1", 2002ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 20038252e791SIan Rogers /* 2 */ 2004ec32398cSJacob Shin }, 2005ec32398cSJacob Shin { 2006ec32398cSJacob Shin .name = "mem:0/2:w", 2007ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 20088252e791SIan Rogers /* 3 */ 2009ec32398cSJacob Shin }, 2010ec32398cSJacob Shin { 2011ec32398cSJacob Shin .name = "mem:0/4:rw:u", 2012ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 20138252e791SIan Rogers /* 4 */ 2014ec32398cSJacob Shin }, 2015378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 2016c0bc8c6dSAlexander Yarygin { 2017c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 2018c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 201953fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 20208252e791SIan Rogers /* 0 */ 2021c0bc8c6dSAlexander Yarygin }, 2022c0bc8c6dSAlexander Yarygin #endif 2023a1e12da4SJiri Olsa { 2024a1e12da4SJiri Olsa .name = "instructions:I", 2025a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 20268252e791SIan Rogers /* 5 */ 2027a1e12da4SJiri Olsa }, 2028a1e12da4SJiri Olsa { 2029a1e12da4SJiri Olsa .name = "instructions:kIG", 2030a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 20318252e791SIan Rogers /* 6 */ 2032a1e12da4SJiri Olsa }, 2033ddd83c97SJiri Olsa { 2034ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 2035ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 20368252e791SIan Rogers /* 7 */ 2037ddd83c97SJiri Olsa }, 203810bf358aSWang Nan { 203910bf358aSWang Nan .name = "instructions/name=insn/", 204010bf358aSWang Nan .check = test__checkevent_config_symbol, 20418252e791SIan Rogers /* 8 */ 204210bf358aSWang Nan }, 204310bf358aSWang Nan { 204410bf358aSWang Nan .name = "r1234/name=rawpmu/", 204510bf358aSWang Nan .check = test__checkevent_config_raw, 20468252e791SIan Rogers /* 9 */ 204710bf358aSWang Nan }, 204810bf358aSWang Nan { 204910bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 205010bf358aSWang Nan .check = test__checkevent_config_num, 20518252e791SIan Rogers /* 0 */ 205210bf358aSWang Nan }, 205343d0b978SWang Nan { 205443d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 205543d0b978SWang Nan .check = test__checkevent_config_cache, 20568252e791SIan Rogers /* 1 */ 205743d0b978SWang Nan }, 2058b3f58c8dSArnaldo Carvalho de Melo { 2059b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 206016ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 2061b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 20628252e791SIan Rogers /* 2 */ 2063b3f58c8dSArnaldo Carvalho de Melo }, 206406dc5bf2SAlexey Budankov { 206506dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 206606dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 20678252e791SIan Rogers /* 3 */ 2068714a92d8SJiri Olsa }, 2069714a92d8SJiri Olsa { 2070714a92d8SJiri Olsa .name = "cycles//u", 2071714a92d8SJiri Olsa .check = test__sym_event_slash, 20728252e791SIan Rogers /* 4 */ 2073714a92d8SJiri Olsa }, 2074714a92d8SJiri Olsa { 2075714a92d8SJiri Olsa .name = "cycles:k", 2076714a92d8SJiri Olsa .check = test__sym_event_dc, 20778252e791SIan Rogers /* 5 */ 20780997a266SAndi Kleen }, 20790997a266SAndi Kleen { 20800997a266SAndi Kleen .name = "instructions:uep", 20810997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 20828252e791SIan Rogers /* 6 */ 20830997a266SAndi Kleen }, 20840997a266SAndi Kleen { 20850997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 20860997a266SAndi Kleen .check = test__exclusive_group, 20878252e791SIan Rogers /* 7 */ 20880997a266SAndi Kleen }, 2089e831f3ccSIan Rogers { 2090e831f3ccSIan Rogers .name = "cycles/name=name/", 2091e831f3ccSIan Rogers .check = test__term_equal_term, 2092e831f3ccSIan Rogers /* 8 */ 2093e831f3ccSIan Rogers }, 20942aadca4bSIan Rogers { 20952aadca4bSIan Rogers .name = "cycles/name=l1d/", 20962aadca4bSIan Rogers .check = test__term_equal_legacy, 20972aadca4bSIan Rogers /* 9 */ 20982aadca4bSIan Rogers }, 2099f0617f52SAdrian Hunter { 2100f0617f52SAdrian Hunter .name = "mem:0/name=breakpoint/", 2101f0617f52SAdrian Hunter .check = test__checkevent_breakpoint, 2102f0617f52SAdrian Hunter /* 0 */ 2103f0617f52SAdrian Hunter }, 2104f0617f52SAdrian Hunter { 2105f0617f52SAdrian Hunter .name = "mem:0:x/name=breakpoint/", 2106f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_x, 2107f0617f52SAdrian Hunter /* 1 */ 2108f0617f52SAdrian Hunter }, 2109f0617f52SAdrian Hunter { 2110f0617f52SAdrian Hunter .name = "mem:0:r/name=breakpoint/", 2111f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_r, 2112f0617f52SAdrian Hunter /* 2 */ 2113f0617f52SAdrian Hunter }, 2114f0617f52SAdrian Hunter { 2115f0617f52SAdrian Hunter .name = "mem:0:w/name=breakpoint/", 2116f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_w, 2117f0617f52SAdrian Hunter /* 3 */ 2118f0617f52SAdrian Hunter }, 2119f0617f52SAdrian Hunter { 2120f0617f52SAdrian Hunter .name = "mem:0/name=breakpoint/u", 2121f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_modifier_name, 2122f0617f52SAdrian Hunter /* 4 */ 2123f0617f52SAdrian Hunter }, 2124f0617f52SAdrian Hunter { 2125f0617f52SAdrian Hunter .name = "mem:0:x/name=breakpoint/k", 2126f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_x_modifier_name, 2127f0617f52SAdrian Hunter /* 5 */ 2128f0617f52SAdrian Hunter }, 2129f0617f52SAdrian Hunter { 2130f0617f52SAdrian Hunter .name = "mem:0:r/name=breakpoint/hp", 2131f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_r_modifier_name, 2132f0617f52SAdrian Hunter /* 6 */ 2133f0617f52SAdrian Hunter }, 2134f0617f52SAdrian Hunter { 2135f0617f52SAdrian Hunter .name = "mem:0:w/name=breakpoint/up", 2136f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_w_modifier_name, 2137f0617f52SAdrian Hunter /* 7 */ 2138f0617f52SAdrian Hunter }, 2139f0617f52SAdrian Hunter { 2140f0617f52SAdrian Hunter .name = "mem:0:rw/name=breakpoint/", 2141f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_rw, 2142f0617f52SAdrian Hunter /* 8 */ 2143f0617f52SAdrian Hunter }, 2144f0617f52SAdrian Hunter { 2145f0617f52SAdrian Hunter .name = "mem:0:rw/name=breakpoint/kp", 2146f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_rw_modifier_name, 2147f0617f52SAdrian Hunter /* 9 */ 2148f0617f52SAdrian Hunter }, 2149f0617f52SAdrian Hunter { 2150f0617f52SAdrian Hunter .name = "mem:0/1/name=breakpoint/", 2151f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len, 2152f0617f52SAdrian Hunter /* 0 */ 2153f0617f52SAdrian Hunter }, 2154f0617f52SAdrian Hunter { 2155f0617f52SAdrian Hunter .name = "mem:0/2:w/name=breakpoint/", 2156f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len_w, 2157f0617f52SAdrian Hunter /* 1 */ 2158f0617f52SAdrian Hunter }, 2159f0617f52SAdrian Hunter { 2160f0617f52SAdrian Hunter .name = "mem:0/4:rw/name=breakpoint/u", 2161f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_len_rw_modifier, 2162f0617f52SAdrian Hunter /* 2 */ 2163f0617f52SAdrian Hunter }, 2164f0617f52SAdrian Hunter { 2165f0617f52SAdrian Hunter .name = "mem:0/1/name=breakpoint1/,mem:0/4:rw/name=breakpoint2/", 2166f0617f52SAdrian Hunter .check = test__checkevent_breakpoint_2_events, 2167f0617f52SAdrian Hunter /* 3 */ 2168f0617f52SAdrian Hunter }, 2169945aea22SJiri Olsa }; 2170945aea22SJiri Olsa 21718252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 2172615b8f99SAlexander Yarygin { 2173*9ea150a8SIan Rogers .name = "cpu/config=10,config1=1,config2=3,period=1000/u", 21748f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 2175945aea22SJiri Olsa .check = test__checkevent_pmu, 21768252e791SIan Rogers /* 0 */ 2177945aea22SJiri Olsa }, 2178615b8f99SAlexander Yarygin { 2179945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 21808f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 2181945aea22SJiri Olsa .check = test__checkevent_pmu_name, 21828252e791SIan Rogers /* 1 */ 2183945aea22SJiri Olsa }, 218471ef150eSKan Liang { 218571ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 21868f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 218771ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 21888252e791SIan Rogers /* 2 */ 218971ef150eSKan Liang }, 219006dc5bf2SAlexey Budankov { 2191a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 219207d2b820SIan Rogers .valid = test__pmu_cpu_event_valid, 219306dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 21948252e791SIan Rogers /* 3 */ 21953a6c51e4SJiri Olsa }, 21963a6c51e4SJiri Olsa { 21973a6c51e4SJiri Olsa .name = "software/r1a/", 21983a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 21998252e791SIan Rogers /* 4 */ 22003a6c51e4SJiri Olsa }, 2201c33cdf54SJiri Olsa { 2202c33cdf54SJiri Olsa .name = "software/r0x1a/", 2203c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 22048252e791SIan Rogers /* 5 */ 2205c33cdf54SJiri Olsa }, 22066fd1e519SIan Rogers { 22076fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/", 22086fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 22096fd1e519SIan Rogers .check = test__checkevent_genhw, 22106fd1e519SIan Rogers /* 6 */ 22116fd1e519SIan Rogers }, 22126fd1e519SIan Rogers { 22136fd1e519SIan Rogers .name = "cpu/L1-dcache-load-miss/kp", 22146fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 22156fd1e519SIan Rogers .check = test__checkevent_genhw_modifier, 22166fd1e519SIan Rogers /* 7 */ 22176fd1e519SIan Rogers }, 22186fd1e519SIan Rogers { 22196fd1e519SIan Rogers .name = "cpu/L1-dcache-misses,name=cachepmu/", 22206fd1e519SIan Rogers .valid = test__pmu_cpu_valid, 22216fd1e519SIan Rogers .check = test__checkevent_config_cache, 22226fd1e519SIan Rogers /* 8 */ 22236fd1e519SIan Rogers }, 22245ea8f2ccSIan Rogers { 22255ea8f2ccSIan Rogers .name = "cpu/instructions/", 22265ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22275ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name, 22285ea8f2ccSIan Rogers /* 9 */ 22295ea8f2ccSIan Rogers }, 22305ea8f2ccSIan Rogers { 22315ea8f2ccSIan Rogers .name = "cpu/cycles,period=100000,config2/", 22325ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22335ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_config, 22345ea8f2ccSIan Rogers /* 0 */ 22355ea8f2ccSIan Rogers }, 22365ea8f2ccSIan Rogers { 22375ea8f2ccSIan Rogers .name = "cpu/instructions/h", 22385ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22395ea8f2ccSIan Rogers .check = test__checkevent_symbolic_name_modifier, 22405ea8f2ccSIan Rogers /* 1 */ 22415ea8f2ccSIan Rogers }, 22425ea8f2ccSIan Rogers { 22435ea8f2ccSIan Rogers .name = "cpu/instructions/G", 22445ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22455ea8f2ccSIan Rogers .check = test__checkevent_exclude_host_modifier, 22465ea8f2ccSIan Rogers /* 2 */ 22475ea8f2ccSIan Rogers }, 22485ea8f2ccSIan Rogers { 22495ea8f2ccSIan Rogers .name = "cpu/instructions/H", 22505ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22515ea8f2ccSIan Rogers .check = test__checkevent_exclude_guest_modifier, 22525ea8f2ccSIan Rogers /* 3 */ 22535ea8f2ccSIan Rogers }, 22545ea8f2ccSIan Rogers { 22555ea8f2ccSIan Rogers .name = "{cpu/instructions/k,cpu/cycles/upp}", 22565ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22575ea8f2ccSIan Rogers .check = test__group1, 22585ea8f2ccSIan Rogers /* 4 */ 22595ea8f2ccSIan Rogers }, 22605ea8f2ccSIan Rogers { 22615ea8f2ccSIan Rogers .name = "{cpu/cycles/u,cpu/instructions/kp}:p", 22625ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22635ea8f2ccSIan Rogers .check = test__group4, 22645ea8f2ccSIan Rogers /* 5 */ 22655ea8f2ccSIan Rogers }, 22665ea8f2ccSIan Rogers { 22675ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/G}:H", 22685ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22695ea8f2ccSIan Rogers .check = test__group_gh1, 22705ea8f2ccSIan Rogers /* 6 */ 22715ea8f2ccSIan Rogers }, 22725ea8f2ccSIan Rogers { 22735ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/H}:G", 22745ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22755ea8f2ccSIan Rogers .check = test__group_gh2, 22765ea8f2ccSIan Rogers /* 7 */ 22775ea8f2ccSIan Rogers }, 22785ea8f2ccSIan Rogers { 22795ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:u", 22805ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22815ea8f2ccSIan Rogers .check = test__group_gh3, 22825ea8f2ccSIan Rogers /* 8 */ 22835ea8f2ccSIan Rogers }, 22845ea8f2ccSIan Rogers { 22855ea8f2ccSIan Rogers .name = "{cpu/cycles/G,cpu/cache-misses/H}:uG", 22865ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22875ea8f2ccSIan Rogers .check = test__group_gh4, 22885ea8f2ccSIan Rogers /* 9 */ 22895ea8f2ccSIan Rogers }, 22905ea8f2ccSIan Rogers { 22915ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S", 22925ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22935ea8f2ccSIan Rogers .check = test__leader_sample1, 22945ea8f2ccSIan Rogers /* 0 */ 22955ea8f2ccSIan Rogers }, 22965ea8f2ccSIan Rogers { 22975ea8f2ccSIan Rogers .name = "{cpu/instructions/,cpu/branch-misses/}:Su", 22985ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 22995ea8f2ccSIan Rogers .check = test__leader_sample2, 23005ea8f2ccSIan Rogers /* 1 */ 23015ea8f2ccSIan Rogers }, 23025ea8f2ccSIan Rogers { 23035ea8f2ccSIan Rogers .name = "cpu/instructions/uDp", 23045ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23055ea8f2ccSIan Rogers .check = test__checkevent_pinned_modifier, 23065ea8f2ccSIan Rogers /* 2 */ 23075ea8f2ccSIan Rogers }, 23085ea8f2ccSIan Rogers { 23095ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D", 23105ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23115ea8f2ccSIan Rogers .check = test__pinned_group, 23125ea8f2ccSIan Rogers /* 3 */ 23135ea8f2ccSIan Rogers }, 23145ea8f2ccSIan Rogers { 23155ea8f2ccSIan Rogers .name = "cpu/instructions/I", 23165ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23175ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier, 23185ea8f2ccSIan Rogers /* 4 */ 23195ea8f2ccSIan Rogers }, 23205ea8f2ccSIan Rogers { 23215ea8f2ccSIan Rogers .name = "cpu/instructions/kIG", 23225ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23235ea8f2ccSIan Rogers .check = test__checkevent_exclude_idle_modifier_1, 23245ea8f2ccSIan Rogers /* 5 */ 23255ea8f2ccSIan Rogers }, 23265ea8f2ccSIan Rogers { 23275ea8f2ccSIan Rogers .name = "cpu/cycles/u", 23285ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23295ea8f2ccSIan Rogers .check = test__sym_event_slash, 23305ea8f2ccSIan Rogers /* 6 */ 23315ea8f2ccSIan Rogers }, 23325ea8f2ccSIan Rogers { 23335ea8f2ccSIan Rogers .name = "cpu/cycles/k", 23345ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23355ea8f2ccSIan Rogers .check = test__sym_event_dc, 23365ea8f2ccSIan Rogers /* 7 */ 23375ea8f2ccSIan Rogers }, 23385ea8f2ccSIan Rogers { 23395ea8f2ccSIan Rogers .name = "cpu/instructions/uep", 23405ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23415ea8f2ccSIan Rogers .check = test__checkevent_exclusive_modifier, 23425ea8f2ccSIan Rogers /* 8 */ 23435ea8f2ccSIan Rogers }, 23445ea8f2ccSIan Rogers { 23455ea8f2ccSIan Rogers .name = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e", 23465ea8f2ccSIan Rogers .valid = test__pmu_cpu_valid, 23475ea8f2ccSIan Rogers .check = test__exclusive_group, 23485ea8f2ccSIan Rogers /* 9 */ 23495ea8f2ccSIan Rogers }, 2350e831f3ccSIan Rogers { 2351e831f3ccSIan Rogers .name = "cpu/cycles,name=name/", 2352e831f3ccSIan Rogers .valid = test__pmu_cpu_valid, 2353e831f3ccSIan Rogers .check = test__term_equal_term, 2354e831f3ccSIan Rogers /* 0 */ 2355e831f3ccSIan Rogers }, 23562aadca4bSIan Rogers { 23572aadca4bSIan Rogers .name = "cpu/cycles,name=l1d/", 23582aadca4bSIan Rogers .valid = test__pmu_cpu_valid, 23592aadca4bSIan Rogers .check = test__term_equal_legacy, 23602aadca4bSIan Rogers /* 1 */ 23612aadca4bSIan Rogers }, 2362945aea22SJiri Olsa }; 2363945aea22SJiri Olsa 236423b6339bSArnaldo Carvalho de Melo struct terms_test { 2365945aea22SJiri Olsa const char *str; 2366945aea22SJiri Olsa int (*check)(struct list_head *terms); 2367945aea22SJiri Olsa }; 2368945aea22SJiri Olsa 2369b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2370945aea22SJiri Olsa [0] = { 2371204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 2372945aea22SJiri Olsa .check = test__checkterms_simple, 2373945aea22SJiri Olsa }, 2374945aea22SJiri Olsa }; 2375945aea22SJiri Olsa 23768252e791SIan Rogers static int test_event(const struct evlist_test *e) 2377945aea22SJiri Olsa { 2378a910e466SIan Rogers struct parse_events_error err; 237963503dbaSJiri Olsa struct evlist *evlist; 2380945aea22SJiri Olsa int ret; 2381945aea22SJiri Olsa 238216ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 23837741e03eSIan Rogers pr_debug("... SKIP\n"); 23847741e03eSIan Rogers return TEST_OK; 238516ddcfbfSJiri Olsa } 238616ddcfbfSJiri Olsa 23870f98b11cSJiri Olsa evlist = evlist__new(); 23887741e03eSIan Rogers if (evlist == NULL) { 23897741e03eSIan Rogers pr_err("Failed allocation"); 23907741e03eSIan Rogers return TEST_FAIL; 23917741e03eSIan Rogers } 239207eafd4eSIan Rogers parse_events_error__init(&err); 2393933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2394945aea22SJiri Olsa if (ret) { 2395933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2396933ccf20SJiri Olsa e->name, ret, err.str); 23976c191289SIan Rogers parse_events_error__print(&err, e->name); 23987741e03eSIan Rogers ret = TEST_FAIL; 2399aefde50aSIan Rogers if (err.str && strstr(err.str, "can't access trace events")) 24007741e03eSIan Rogers ret = TEST_SKIP; 24012d4352c0SArnaldo Carvalho de Melo } else { 24022d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2403945aea22SJiri Olsa } 240407eafd4eSIan Rogers parse_events_error__exit(&err); 2405c12995a5SJiri Olsa evlist__delete(evlist); 2406945aea22SJiri Olsa 2407945aea22SJiri Olsa return ret; 2408945aea22SJiri Olsa } 2409945aea22SJiri Olsa 2410b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2411b4a7276cSJohn Garry { 2412b4a7276cSJohn Garry struct parse_events_error err; 2413b4a7276cSJohn Garry struct evlist *evlist; 2414b4a7276cSJohn Garry int ret; 2415b4a7276cSJohn Garry 2416b4a7276cSJohn Garry evlist = evlist__new(); 2417b4a7276cSJohn Garry if (!evlist) 2418b4a7276cSJohn Garry return -ENOMEM; 2419b4a7276cSJohn Garry 2420b4a7276cSJohn Garry parse_events_error__init(&err); 2421411ad22eSIan Rogers ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err, 2422411ad22eSIan Rogers &perf_pmu__fake, /*warn_if_reordered=*/true); 2423b4a7276cSJohn Garry if (ret) { 2424b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2425b4a7276cSJohn Garry str, ret, err.str); 2426b4a7276cSJohn Garry parse_events_error__print(&err, str); 2427b4a7276cSJohn Garry } 2428b4a7276cSJohn Garry 2429b4a7276cSJohn Garry parse_events_error__exit(&err); 2430b4a7276cSJohn Garry evlist__delete(evlist); 2431b4a7276cSJohn Garry 2432b4a7276cSJohn Garry return ret; 2433b4a7276cSJohn Garry } 2434b4a7276cSJohn Garry 24357741e03eSIan Rogers static int combine_test_results(int existing, int latest) 24367741e03eSIan Rogers { 24377741e03eSIan Rogers if (existing == TEST_FAIL) 24387741e03eSIan Rogers return TEST_FAIL; 24397741e03eSIan Rogers if (existing == TEST_SKIP) 24407741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 24417741e03eSIan Rogers return latest; 24427741e03eSIan Rogers } 24437741e03eSIan Rogers 24448252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2445945aea22SJiri Olsa { 24467741e03eSIan Rogers int ret = TEST_OK; 2447945aea22SJiri Olsa 24488252e791SIan Rogers for (int i = 0; i < cnt; i++) { 24498252e791SIan Rogers const struct evlist_test *e = &events[i]; 24507741e03eSIan Rogers int test_ret; 2451945aea22SJiri Olsa 24527741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 24537741e03eSIan Rogers test_ret = test_event(e); 24547741e03eSIan Rogers if (test_ret != TEST_OK) { 24557741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 24567741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 24577741e03eSIan Rogers } 2458945aea22SJiri Olsa } 2459945aea22SJiri Olsa 24607741e03eSIan Rogers return ret; 24617741e03eSIan Rogers } 24627741e03eSIan Rogers 24637741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 24647741e03eSIan Rogers { 24657741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2466945aea22SJiri Olsa } 2467945aea22SJiri Olsa 2468b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2469945aea22SJiri Olsa { 2470c549aca5SDavid Ahern struct list_head terms; 2471945aea22SJiri Olsa int ret; 2472945aea22SJiri Olsa 2473c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2474945aea22SJiri Olsa 2475edb217ffSIan Rogers ret = parse_events_terms(&terms, t->str, /*input=*/ NULL); 2476945aea22SJiri Olsa if (ret) { 2477945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2478945aea22SJiri Olsa t->str , ret); 2479945aea22SJiri Olsa return ret; 2480945aea22SJiri Olsa } 2481945aea22SJiri Olsa 2482c549aca5SDavid Ahern ret = t->check(&terms); 2483682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2484945aea22SJiri Olsa 2485945aea22SJiri Olsa return ret; 2486945aea22SJiri Olsa } 2487945aea22SJiri Olsa 2488b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2489945aea22SJiri Olsa { 2490945aea22SJiri Olsa int ret = 0; 2491945aea22SJiri Olsa 2492b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2493b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2494945aea22SJiri Olsa 2495945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2496945aea22SJiri Olsa ret = test_term(t); 2497945aea22SJiri Olsa if (ret) 2498945aea22SJiri Olsa break; 2499945aea22SJiri Olsa } 2500945aea22SJiri Olsa 2501945aea22SJiri Olsa return ret; 2502945aea22SJiri Olsa } 2503945aea22SJiri Olsa 25047741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 25057741e03eSIan Rogers { 25067741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 25077741e03eSIan Rogers } 25087741e03eSIan Rogers 25097741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2510945aea22SJiri Olsa { 2511f24ebe80SIan Rogers struct perf_pmu *pmu = NULL; 25125a52817eSIan Rogers int ret = TEST_OK; 25135a52817eSIan Rogers 25141eaf496eSIan Rogers while ((pmu = perf_pmus__scan(pmu)) != NULL) { 2515945aea22SJiri Olsa struct stat st; 2516945aea22SJiri Olsa char path[PATH_MAX]; 2517945aea22SJiri Olsa struct dirent *ent; 2518945aea22SJiri Olsa DIR *dir; 25195a52817eSIan Rogers int err; 2520945aea22SJiri Olsa 25215a52817eSIan Rogers snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/", 25225a52817eSIan Rogers sysfs__mountpoint(), pmu->name); 25237741e03eSIan Rogers 25245a52817eSIan Rogers err = stat(path, &st); 25255a52817eSIan Rogers if (err) { 25265a52817eSIan Rogers pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path); 25275a52817eSIan Rogers continue; 2528945aea22SJiri Olsa } 2529945aea22SJiri Olsa 2530945aea22SJiri Olsa dir = opendir(path); 2531945aea22SJiri Olsa if (!dir) { 25327741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 25335a52817eSIan Rogers ret = combine_test_results(ret, TEST_SKIP); 25345a52817eSIan Rogers continue; 2535945aea22SJiri Olsa } 2536945aea22SJiri Olsa 25377741e03eSIan Rogers while ((ent = readdir(dir))) { 25388252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 25392e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 25407741e03eSIan Rogers int test_ret; 2541945aea22SJiri Olsa 254217a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 254317a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2544945aea22SJiri Olsa continue; 2545945aea22SJiri Olsa 25465a52817eSIan Rogers snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name); 2547945aea22SJiri Olsa 2548945aea22SJiri Olsa e.name = name; 2549945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2550945aea22SJiri Olsa 25517741e03eSIan Rogers test_ret = test_event(&e); 25527741e03eSIan Rogers if (test_ret != TEST_OK) { 25537741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 25547741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 25557741e03eSIan Rogers } 25565a52817eSIan Rogers 25575a52817eSIan Rogers if (!is_pmu_core(pmu->name)) 25585a52817eSIan Rogers continue; 25595a52817eSIan Rogers 2560146edff3SIan Rogers /* 2561146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2562146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2563146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2564146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2565146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2566146edff3SIan Rogers * isn't expected after this. As event names in the config 2567146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2568146edff3SIan Rogers * above. 2569146edff3SIan Rogers */ 2570146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2571146edff3SIan Rogers continue; 2572146edff3SIan Rogers 25735a52817eSIan Rogers snprintf(name, sizeof(name), "%s:u,%s/event=%s/u", 25745a52817eSIan Rogers ent->d_name, pmu->name, ent->d_name); 2575ffe59788SKan Liang e.name = name; 2576ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 25777741e03eSIan Rogers test_ret = test_event(&e); 25787741e03eSIan Rogers if (test_ret != TEST_OK) { 25797741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 25807741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 25817741e03eSIan Rogers } 2582945aea22SJiri Olsa } 2583945aea22SJiri Olsa 2584945aea22SJiri Olsa closedir(dir); 25855a52817eSIan Rogers } 2586945aea22SJiri Olsa return ret; 2587945aea22SJiri Olsa } 2588945aea22SJiri Olsa 25897741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 25907741e03eSIan Rogers { 25917741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 25927741e03eSIan Rogers } 25937741e03eSIan Rogers 2594c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2595c7a3828dSJin Yao { 2596c7a3828dSJin Yao char path[PATH_MAX]; 2597c7a3828dSJin Yao DIR *dir; 2598c7a3828dSJin Yao struct dirent *dent; 2599c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2600c7a3828dSJin Yao char buf[128]; 2601c7a3828dSJin Yao FILE *file; 2602c7a3828dSJin Yao 2603c7a3828dSJin Yao if (!sysfs) 2604c7a3828dSJin Yao return false; 2605c7a3828dSJin Yao 2606c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2607c7a3828dSJin Yao dir = opendir(path); 2608c7a3828dSJin Yao if (!dir) 2609c7a3828dSJin Yao return false; 2610c7a3828dSJin Yao 2611c7a3828dSJin Yao while ((dent = readdir(dir))) { 2612c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2613c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2614c7a3828dSJin Yao continue; 2615c7a3828dSJin Yao 2616c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2617c7a3828dSJin Yao sysfs, dent->d_name); 2618c7a3828dSJin Yao 2619c7a3828dSJin Yao if (!file_available(path)) 2620c7a3828dSJin Yao continue; 2621c7a3828dSJin Yao 2622c7a3828dSJin Yao file = fopen(path, "r"); 2623c7a3828dSJin Yao if (!file) 2624c7a3828dSJin Yao continue; 2625c7a3828dSJin Yao 2626c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2627c7a3828dSJin Yao fclose(file); 2628c7a3828dSJin Yao continue; 2629c7a3828dSJin Yao } 2630c7a3828dSJin Yao 2631c7a3828dSJin Yao /* Remove the last '\n' */ 2632c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2633c7a3828dSJin Yao 2634c7a3828dSJin Yao fclose(file); 2635c7a3828dSJin Yao *event = strdup(dent->d_name); 2636c7a3828dSJin Yao *alias = strdup(buf); 2637c7a3828dSJin Yao closedir(dir); 2638c7a3828dSJin Yao 2639c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2640c7a3828dSJin Yao free(*event); 2641c7a3828dSJin Yao free(*alias); 2642c7a3828dSJin Yao return false; 2643c7a3828dSJin Yao } 2644c7a3828dSJin Yao 2645c7a3828dSJin Yao return true; 2646c7a3828dSJin Yao } 2647c7a3828dSJin Yao 2648c7a3828dSJin Yao closedir(dir); 2649c7a3828dSJin Yao return false; 2650c7a3828dSJin Yao } 2651c7a3828dSJin Yao 2652c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2653c7a3828dSJin Yao { 2654c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2655c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2656c7a3828dSJin Yao 2657c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2658c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 26597741e03eSIan Rogers return TEST_OK; 2660c7a3828dSJin Yao } 2661c7a3828dSJin Yao 26627741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2663c7a3828dSJin Yao { 26648252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2665c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2666c7a3828dSJin Yao 2667c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2668c7a3828dSJin Yao event, alias); 2669c7a3828dSJin Yao 2670c7a3828dSJin Yao e.name = name; 2671c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2672c7a3828dSJin Yao return test_event(&e); 2673c7a3828dSJin Yao } 2674c7a3828dSJin Yao 26757741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 26767741e03eSIan Rogers { 26777741e03eSIan Rogers char *event, *alias; 26787741e03eSIan Rogers int ret; 26797741e03eSIan Rogers 26807741e03eSIan Rogers if (!test_alias(&event, &alias)) 26817741e03eSIan Rogers return TEST_SKIP; 26827741e03eSIan Rogers 26837741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 26847741e03eSIan Rogers 26857741e03eSIan Rogers free(event); 26867741e03eSIan Rogers free(alias); 26877741e03eSIan Rogers return ret; 26887741e03eSIan Rogers } 26897741e03eSIan Rogers 26907741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 26917741e03eSIan Rogers int subtest __maybe_unused) 2692b4a7276cSJohn Garry { 2693b4a7276cSJohn Garry static const char events[][30] = { 2694b4a7276cSJohn Garry "event-hyphen", 2695b4a7276cSJohn Garry "event-two-hyph", 2696b4a7276cSJohn Garry }; 26977741e03eSIan Rogers int ret = TEST_OK; 2698b4a7276cSJohn Garry 26997741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 27007741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 27017741e03eSIan Rogers 27027741e03eSIan Rogers if (test_ret != TEST_OK) { 27037741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 27047741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2705b4a7276cSJohn Garry } 2706b4a7276cSJohn Garry } 2707b4a7276cSJohn Garry 2708b4a7276cSJohn Garry return ret; 2709b4a7276cSJohn Garry } 2710b4a7276cSJohn Garry 27117741e03eSIan Rogers static struct test_case tests__parse_events[] = { 27127741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 27137741e03eSIan Rogers events2, 27147741e03eSIan Rogers "permissions"), 27157741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 27167741e03eSIan Rogers pmu_events, 27177741e03eSIan Rogers "permissions"), 27187741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 27197741e03eSIan Rogers pmu_events2, 27207741e03eSIan Rogers "permissions"), 27217741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 27227741e03eSIan Rogers "no aliases in sysfs"), 27237741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 27247741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 27257741e03eSIan Rogers { .name = NULL, } 27267741e03eSIan Rogers }; 2727945aea22SJiri Olsa 27287741e03eSIan Rogers struct test_suite suite__parse_events = { 27297741e03eSIan Rogers .desc = "Parse event definition strings", 27307741e03eSIan Rogers .test_cases = tests__parse_events, 27317741e03eSIan Rogers }; 2732