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" 9490e9a8fSJin Yao #include "pmu-hybrid.h" 105a52817eSIan Rogers #include "pmus.h" 1176b31a29SArnaldo Carvalho de Melo #include <dirent.h> 12a43783aeSArnaldo Carvalho de Melo #include <errno.h> 13c7a3828dSJin Yao #include "fncache.h" 147a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h> 157a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h> 167a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h> 17877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h> 18f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h> 1920a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h> 20945aea22SJiri Olsa 21945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ 22945aea22SJiri Olsa PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) 23945aea22SJiri Olsa 249854934bSIan Rogers static bool test_config(const struct evsel *evsel, __u64 expected_config) 259854934bSIan Rogers { 269854934bSIan Rogers __u32 type = evsel->core.attr.type; 279854934bSIan Rogers __u64 config = evsel->core.attr.config; 289854934bSIan Rogers 299854934bSIan Rogers if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) { 309854934bSIan Rogers /* 319854934bSIan Rogers * HARDWARE and HW_CACHE events encode the PMU's extended type 329854934bSIan Rogers * in the top 32-bits. Mask in order to ignore. 339854934bSIan Rogers */ 349854934bSIan Rogers config &= PERF_HW_EVENT_MASK; 359854934bSIan Rogers } 369854934bSIan Rogers return config == expected_config; 379854934bSIan Rogers } 389854934bSIan Rogers 39378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 40378ef0f5SIan Rogers 4153fe307dSThomas Richter #if defined(__s390x__) 4253fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 434d39c89fSIngo Molnar * and return success when trace point kvm_s390_create_vm 4453fe307dSThomas Richter * exists. Otherwise this test always fails. 4553fe307dSThomas Richter */ 4653fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 4753fe307dSThomas Richter { 4853fe307dSThomas Richter char *eventfile; 4953fe307dSThomas Richter bool rc = false; 5053fe307dSThomas Richter 5153fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 5253fe307dSThomas Richter 5353fe307dSThomas Richter if (eventfile) { 5453fe307dSThomas Richter DIR *mydir = opendir(eventfile); 5553fe307dSThomas Richter 5653fe307dSThomas Richter if (mydir) { 5753fe307dSThomas Richter rc = true; 5853fe307dSThomas Richter closedir(mydir); 5953fe307dSThomas Richter } 6053fe307dSThomas Richter put_events_file(eventfile); 6153fe307dSThomas Richter } 6253fe307dSThomas Richter 6353fe307dSThomas Richter return rc; 6453fe307dSThomas Richter } 6553fe307dSThomas Richter #endif 6653fe307dSThomas Richter 6763503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 68945aea22SJiri Olsa { 69515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 70945aea22SJiri Olsa 716484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 729d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 74945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 751fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 777741e03eSIan Rogers return TEST_OK; 78945aea22SJiri Olsa } 79945aea22SJiri Olsa 8063503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 81945aea22SJiri Olsa { 8232dcd021SJiri Olsa struct evsel *evsel; 83945aea22SJiri Olsa 846484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 859d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 86945aea22SJiri Olsa 87e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 88945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 891fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 90945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 911fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 92945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 931fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 94945aea22SJiri Olsa } 957741e03eSIan Rogers return TEST_OK; 96945aea22SJiri Olsa } 97378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 98945aea22SJiri Olsa 9963503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 100945aea22SJiri Olsa { 101515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 102945aea22SJiri Olsa 1036484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 1059854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 1067741e03eSIan Rogers return TEST_OK; 107945aea22SJiri Olsa } 108945aea22SJiri Olsa 10963503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 110945aea22SJiri Olsa { 111515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 112945aea22SJiri Olsa 1136484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 1159854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 1167741e03eSIan Rogers return TEST_OK; 117945aea22SJiri Olsa } 118945aea22SJiri Olsa 11963503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 120945aea22SJiri Olsa { 121515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 122945aea22SJiri Olsa 1236484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1259854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 1267741e03eSIan Rogers return TEST_OK; 127945aea22SJiri Olsa } 128945aea22SJiri Olsa 12963503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 130945aea22SJiri Olsa { 131515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 132945aea22SJiri Olsa 1336484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1359854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 136ee4c7588SJiri Olsa /* 13778e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 138ee4c7588SJiri Olsa * while this test executes only parse events method. 139ee4c7588SJiri Olsa */ 140945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1411fc632ceSJiri Olsa 0 == evsel->core.attr.sample_period); 142945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1431fc632ceSJiri Olsa 0 == evsel->core.attr.config1); 144945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 1451fc632ceSJiri Olsa 1 == evsel->core.attr.config2); 1467741e03eSIan Rogers return TEST_OK; 147945aea22SJiri Olsa } 148945aea22SJiri Olsa 14963503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 150945aea22SJiri Olsa { 151515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 152945aea22SJiri Olsa 1536484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1559854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 1567741e03eSIan Rogers return TEST_OK; 157945aea22SJiri Olsa } 158945aea22SJiri Olsa 15963503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 160945aea22SJiri Olsa { 161515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 162945aea22SJiri Olsa 1636484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 1659854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1 << 16)); 1667741e03eSIan Rogers return TEST_OK; 167945aea22SJiri Olsa } 168945aea22SJiri Olsa 16963503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 170945aea22SJiri Olsa { 171515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 172945aea22SJiri Olsa 1736484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1759854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 176945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1771fc632ceSJiri Olsa evsel->core.attr.bp_type); 178945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 1791fc632ceSJiri Olsa evsel->core.attr.bp_len); 1807741e03eSIan Rogers return TEST_OK; 181945aea22SJiri Olsa } 182945aea22SJiri Olsa 18363503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 184945aea22SJiri Olsa { 185515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 186945aea22SJiri Olsa 1876484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1899854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 190945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1911fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 1921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 1937741e03eSIan Rogers return TEST_OK; 194945aea22SJiri Olsa } 195945aea22SJiri Olsa 19663503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 197945aea22SJiri Olsa { 198515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 199945aea22SJiri Olsa 2006484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 201945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2021fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2039854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 204945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2051fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 206945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2071fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2087741e03eSIan Rogers return TEST_OK; 209945aea22SJiri Olsa } 210945aea22SJiri Olsa 21163503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 212945aea22SJiri Olsa { 213515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 214945aea22SJiri Olsa 2156484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 216945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2171fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2189854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 219945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2201fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 221945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2221fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2237741e03eSIan Rogers return TEST_OK; 224945aea22SJiri Olsa } 225945aea22SJiri Olsa 22663503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 227945aea22SJiri Olsa { 228515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 229945aea22SJiri Olsa 2306484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 231945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2321fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2339854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 234945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2351fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 236945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2371fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2387741e03eSIan Rogers return TEST_OK; 239945aea22SJiri Olsa } 240945aea22SJiri Olsa 241378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 24263503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 243945aea22SJiri Olsa { 244515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 245945aea22SJiri Olsa 2461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 250945aea22SJiri Olsa 251945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 252945aea22SJiri Olsa } 253945aea22SJiri Olsa 254945aea22SJiri Olsa static int 25563503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 256945aea22SJiri Olsa { 25732dcd021SJiri Olsa struct evsel *evsel; 258945aea22SJiri Olsa 2596484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 260945aea22SJiri Olsa 261e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 262945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 2631fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 264945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 2651fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 2661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 268945aea22SJiri Olsa } 269945aea22SJiri Olsa 270945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 271945aea22SJiri Olsa } 272378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 273945aea22SJiri Olsa 27463503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 275945aea22SJiri Olsa { 276515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 277945aea22SJiri Olsa 2781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 282945aea22SJiri Olsa 283945aea22SJiri Olsa return test__checkevent_raw(evlist); 284945aea22SJiri Olsa } 285945aea22SJiri Olsa 28663503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist) 287945aea22SJiri Olsa { 288515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 289945aea22SJiri Olsa 2901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 2921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 2931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 294945aea22SJiri Olsa 295945aea22SJiri Olsa return test__checkevent_numeric(evlist); 296945aea22SJiri Olsa } 297945aea22SJiri Olsa 29863503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist) 299945aea22SJiri Olsa { 300515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 301945aea22SJiri Olsa 3021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 306945aea22SJiri Olsa 307945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 308945aea22SJiri Olsa } 309945aea22SJiri Olsa 31063503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 311945aea22SJiri Olsa { 312515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 313945aea22SJiri Olsa 3141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 316945aea22SJiri Olsa 317945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 318945aea22SJiri Olsa } 319945aea22SJiri Olsa 32063503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 321945aea22SJiri Olsa { 322515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 323945aea22SJiri Olsa 3241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 3251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 326945aea22SJiri Olsa 327945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 328945aea22SJiri Olsa } 329945aea22SJiri Olsa 33063503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 331945aea22SJiri Olsa { 332515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 333945aea22SJiri Olsa 3341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 338945aea22SJiri Olsa 339945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 340945aea22SJiri Olsa } 341945aea22SJiri Olsa 34263503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist) 343945aea22SJiri Olsa { 344515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 345945aea22SJiri Olsa 3461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 350945aea22SJiri Olsa 351945aea22SJiri Olsa return test__checkevent_genhw(evlist); 352945aea22SJiri Olsa } 353945aea22SJiri Olsa 35463503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 355a1e12da4SJiri Olsa { 356515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 357a1e12da4SJiri Olsa 3581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 365a1e12da4SJiri Olsa 366a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 367a1e12da4SJiri Olsa } 368a1e12da4SJiri Olsa 36963503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 370a1e12da4SJiri Olsa { 371515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 372a1e12da4SJiri Olsa 3731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 3761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 380a1e12da4SJiri Olsa 381a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 382a1e12da4SJiri Olsa } 383a1e12da4SJiri Olsa 38463503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 385945aea22SJiri Olsa { 386515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 387945aea22SJiri Olsa 388945aea22SJiri Olsa 3891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 393945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3948ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 395945aea22SJiri Olsa 396945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 397945aea22SJiri Olsa } 398945aea22SJiri Olsa 39963503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 400945aea22SJiri Olsa { 401515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 402945aea22SJiri Olsa 4031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 407945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4088ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 409945aea22SJiri Olsa 410945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 411945aea22SJiri Olsa } 412945aea22SJiri Olsa 41363503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 414945aea22SJiri Olsa { 415515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 416945aea22SJiri Olsa 4171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 421945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4228ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 423945aea22SJiri Olsa 424945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 425945aea22SJiri Olsa } 426945aea22SJiri Olsa 42763503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 428945aea22SJiri Olsa { 429515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 430945aea22SJiri Olsa 4311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 435945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4368ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 437945aea22SJiri Olsa 438945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 439945aea22SJiri Olsa } 440945aea22SJiri Olsa 44163503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 442945aea22SJiri Olsa { 443515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 444945aea22SJiri Olsa 4451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 449945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4508ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 451945aea22SJiri Olsa 452945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 453945aea22SJiri Olsa } 454945aea22SJiri Olsa 45563503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 456945aea22SJiri Olsa { 457945aea22SJiri Olsa 458515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 459945aea22SJiri Olsa 4606484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4629854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 10)); 4631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 465204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 466ee4c7588SJiri Olsa /* 46778e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 468ee4c7588SJiri Olsa * while this test executes only parse events method. 469ee4c7588SJiri Olsa */ 4701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 471945aea22SJiri Olsa 4727741e03eSIan Rogers return TEST_OK; 473945aea22SJiri Olsa } 474945aea22SJiri Olsa 475378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 47663503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 477945aea22SJiri Olsa { 478515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 479945aea22SJiri Olsa 4806484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 481945aea22SJiri Olsa 482945aea22SJiri Olsa /* r1 */ 4831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4849854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 4851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 487204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 4881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 492945aea22SJiri Olsa 49343f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 494e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 496945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 4971fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 5001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 5011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 503945aea22SJiri Olsa 504945aea22SJiri Olsa /* 1:1:hp */ 505e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 5079854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 5081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 5091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 5101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 5111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 512945aea22SJiri Olsa 5137741e03eSIan Rogers return TEST_OK; 514945aea22SJiri Olsa } 515378ef0f5SIan Rogers #endif 516945aea22SJiri Olsa 51763503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 518945aea22SJiri Olsa { 519515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 520945aea22SJiri Olsa 521945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 5226484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5249854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 5258ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 526945aea22SJiri Olsa 527945aea22SJiri Olsa /* cpu/config=2/u" */ 528e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5296484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5319854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 532945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5338ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 534945aea22SJiri Olsa 5357741e03eSIan Rogers return TEST_OK; 536945aea22SJiri Olsa } 537945aea22SJiri Olsa 53863503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 53971ef150eSKan Liang { 540515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 54171ef150eSKan Liang 54271ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5436484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5459854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 1)); 54671ef150eSKan Liang /* 54778e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 54871ef150eSKan Liang * while this test executes only parse events method. 54971ef150eSKan Liang */ 5501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 55127de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 55371ef150eSKan Liang 55471ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 555e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5579854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 2)); 55871ef150eSKan Liang /* 55978e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 56071ef150eSKan Liang * while this test executes only parse events method. 56171ef150eSKan Liang */ 5621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 56327de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 56571ef150eSKan Liang 5667741e03eSIan Rogers return TEST_OK; 56771ef150eSKan Liang } 56871ef150eSKan Liang 56963503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 570945aea22SJiri Olsa { 571515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 572945aea22SJiri Olsa 5736484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5745a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 5755a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 576945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 5771fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 578945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 5791fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5830997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 584945aea22SJiri Olsa 5857741e03eSIan Rogers return TEST_OK; 586945aea22SJiri Olsa } 587945aea22SJiri Olsa 588ffe59788SKan Liang 58963503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 590ffe59788SKan Liang { 591515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 592ffe59788SKan Liang 593ffe59788SKan Liang /* pmu-event:u */ 5946484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 595ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5961fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 597ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5981fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 6020997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 603ffe59788SKan Liang 604ffe59788SKan Liang /* cpu/pmu-event/u*/ 605e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 6066484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6075a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 6085a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 609ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 6101fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 611ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 6121fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 6131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 6160997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 617ffe59788SKan Liang 6187741e03eSIan Rogers return TEST_OK; 619ffe59788SKan Liang } 620ffe59788SKan Liang 621945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 622945aea22SJiri Olsa { 6236cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 624945aea22SJiri Olsa 625945aea22SJiri Olsa /* config=10 */ 6266cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 627945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 628945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 629945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 630945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 631945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 6324f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 633945aea22SJiri Olsa 634945aea22SJiri Olsa /* config1 */ 6356cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 636945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 637945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 638945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 639945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 640945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6414f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 642945aea22SJiri Olsa 643945aea22SJiri Olsa /* config2=3 */ 6446cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 645945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 646945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 647945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 648945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 649945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 6504f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 651945aea22SJiri Olsa 652204e7c49SRob Herring /* config3=4 */ 653204e7c49SRob Herring term = list_entry(term->list.next, struct parse_events_term, list); 654204e7c49SRob Herring TEST_ASSERT_VAL("wrong type term", 655204e7c49SRob Herring term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); 656204e7c49SRob Herring TEST_ASSERT_VAL("wrong type val", 657204e7c49SRob Herring term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 658204e7c49SRob Herring TEST_ASSERT_VAL("wrong val", term->val.num == 4); 659204e7c49SRob Herring TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); 660204e7c49SRob Herring 661945aea22SJiri Olsa /* umask=1*/ 6626cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 663945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 664945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 665945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 666945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 667945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 668945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 669945aea22SJiri Olsa 6704929e95aSJiri Olsa /* 6714929e95aSJiri Olsa * read 6724929e95aSJiri Olsa * 6734929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 6744929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 6754929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 6764929e95aSJiri Olsa */ 6774929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6784929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6794929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 6804929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6814929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6824929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6834929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read")); 6844929e95aSJiri Olsa 6854929e95aSJiri Olsa /* 6864929e95aSJiri Olsa * r0xead 6874929e95aSJiri Olsa * 6884929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 6894929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 6904929e95aSJiri Olsa */ 6914929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6924929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6934929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 6944929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6954929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6964929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 0xead); 6974f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 6987741e03eSIan Rogers return TEST_OK; 699945aea22SJiri Olsa } 700945aea22SJiri Olsa 70163503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 702945aea22SJiri Olsa { 70332dcd021SJiri Olsa struct evsel *evsel, *leader; 704945aea22SJiri Olsa 7056484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 7069d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 707945aea22SJiri Olsa 708945aea22SJiri Olsa /* instructions:k */ 709515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7119854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 7121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 718c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7195643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7202bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 721a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 722945aea22SJiri Olsa 723945aea22SJiri Olsa /* cycles:upp */ 724e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7269854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 7271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 730945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 734fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7352bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 736a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 737945aea22SJiri Olsa 7387741e03eSIan Rogers return TEST_OK; 739945aea22SJiri Olsa } 740945aea22SJiri Olsa 74163503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 742945aea22SJiri Olsa { 74332dcd021SJiri Olsa struct evsel *evsel, *leader; 744945aea22SJiri Olsa 7456484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7469d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 747945aea22SJiri Olsa 748945aea22SJiri Olsa /* faults + :ku modifier */ 749515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 7519854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS)); 7521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 755943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 758c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7595643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7602bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 761a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 762945aea22SJiri Olsa 763945aea22SJiri Olsa /* cache-references + :u modifier */ 764e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7669854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)); 7671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 773fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7742bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 775a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 776945aea22SJiri Olsa 777945aea22SJiri Olsa /* cycles:k */ 778e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 7809854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 7811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 787c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 788a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 789945aea22SJiri Olsa 7907741e03eSIan Rogers return TEST_OK; 791945aea22SJiri Olsa } 792945aea22SJiri Olsa 793378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 79463503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 795945aea22SJiri Olsa { 79632dcd021SJiri Olsa struct evsel *evsel, *leader; 797945aea22SJiri Olsa 7986484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7999d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 800945aea22SJiri Olsa 80143f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 802515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 804945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 8051fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 8061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 8071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 813c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 814945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 815945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 8165643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8172bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 818a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 819945aea22SJiri Olsa 820945aea22SJiri Olsa /* group1 cycles:kppp */ 821e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8239854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 827945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8281fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8291fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 831fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 832945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8332bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 834a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 835945aea22SJiri Olsa 836945aea22SJiri Olsa /* group2 cycles + G modifier */ 837e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8399854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 846c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 847945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 848945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8495643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8502bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 851a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 852945aea22SJiri Olsa 853945aea22SJiri Olsa /* group2 1:3 + G modifier */ 854e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8569854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 3)); 8571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 863fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8642bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 865a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 866945aea22SJiri Olsa 867945aea22SJiri Olsa /* instructions:u */ 868e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8709854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 8711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 874943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 877c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 878a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 879945aea22SJiri Olsa 8807741e03eSIan Rogers return TEST_OK; 881945aea22SJiri Olsa } 882378ef0f5SIan Rogers #endif 883945aea22SJiri Olsa 88463503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 885945aea22SJiri Olsa { 88632dcd021SJiri Olsa struct evsel *evsel, *leader; 887945aea22SJiri Olsa 8886484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8899d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 890945aea22SJiri Olsa 891945aea22SJiri Olsa /* cycles:u + p */ 892515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 8949854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 8951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 898945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 902945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 903c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9045643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9052bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 906a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 907945aea22SJiri Olsa 908945aea22SJiri Olsa /* instructions:kp + p */ 909e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9119854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 9121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 9131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 915945aea22SJiri Olsa /* use of precise requires exclude_guest */ 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 919fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9202bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 921a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 922945aea22SJiri Olsa 9237741e03eSIan Rogers return TEST_OK; 924945aea22SJiri Olsa } 925945aea22SJiri Olsa 92663503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 927945aea22SJiri Olsa { 92832dcd021SJiri Olsa struct evsel *evsel, *leader; 929945aea22SJiri Olsa 9306484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9319d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 932945aea22SJiri Olsa 933945aea22SJiri Olsa /* cycles + G */ 934515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9369854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 943945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 944c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9455643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9462bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 947a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 948945aea22SJiri Olsa 949945aea22SJiri Olsa /* instructions + G */ 950e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9529854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 9531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 959fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9602bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 961a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 962945aea22SJiri Olsa 963945aea22SJiri Olsa /* cycles:G */ 964e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 9651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9669854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 973945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 974c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9755643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9762bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 977a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 978945aea22SJiri Olsa 979945aea22SJiri Olsa /* instructions:G */ 980e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9829854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 9831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 989fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9902bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 991945aea22SJiri Olsa 992945aea22SJiri Olsa /* cycles */ 993e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 9959854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 9961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1002c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 1003945aea22SJiri Olsa 10047741e03eSIan Rogers return TEST_OK; 1005945aea22SJiri Olsa } 1006945aea22SJiri Olsa 100763503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 10085a30a99fSJiri Olsa { 100932dcd021SJiri Olsa struct evsel *evsel, *leader; 10105a30a99fSJiri Olsa 10116484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10129d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10135a30a99fSJiri Olsa 10145a30a99fSJiri Olsa /* cycles + :H group modifier */ 1015515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10179854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10245a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1025c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10265643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10272bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10285a30a99fSJiri Olsa 10295a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1030e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10329854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 10331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1039fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10402bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10415a30a99fSJiri Olsa 10427741e03eSIan Rogers return TEST_OK; 10435a30a99fSJiri Olsa } 10445a30a99fSJiri Olsa 104563503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10465a30a99fSJiri Olsa { 104732dcd021SJiri Olsa struct evsel *evsel, *leader; 10485a30a99fSJiri Olsa 10496484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10509d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10515a30a99fSJiri Olsa 10525a30a99fSJiri Olsa /* cycles + :G group modifier */ 1053515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10559854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 10561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10625a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1063c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10645643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10652bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10665a30a99fSJiri Olsa 10675a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1068e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10709854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 10711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1077fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10782bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10795a30a99fSJiri Olsa 10807741e03eSIan Rogers return TEST_OK; 10815a30a99fSJiri Olsa } 10825a30a99fSJiri Olsa 108363503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10845a30a99fSJiri Olsa { 108532dcd021SJiri Olsa struct evsel *evsel, *leader; 10865a30a99fSJiri Olsa 10876484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10889d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10895a30a99fSJiri Olsa 10905a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1091515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 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_CPU_CYCLES)); 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); 10971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11005a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1101c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11025643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11032bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11045a30a99fSJiri Olsa 11055a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1106e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11089854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1115fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11162bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11175a30a99fSJiri Olsa 11187741e03eSIan Rogers return TEST_OK; 11195a30a99fSJiri Olsa } 11205a30a99fSJiri Olsa 112163503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11225a30a99fSJiri Olsa { 112332dcd021SJiri Olsa struct evsel *evsel, *leader; 11245a30a99fSJiri Olsa 11256484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11269d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 11275a30a99fSJiri Olsa 11285a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1129515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11301fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11319854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11385a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1139c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11405643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11412bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11425a30a99fSJiri Olsa 11435a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1144e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11469854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 11471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1153fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11542bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11555a30a99fSJiri Olsa 11567741e03eSIan Rogers return TEST_OK; 11575a30a99fSJiri Olsa } 11585a30a99fSJiri Olsa 115963503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1160a9f93f97SJiri Olsa { 116132dcd021SJiri Olsa struct evsel *evsel, *leader; 1162a9f93f97SJiri Olsa 11636484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1164a9f93f97SJiri Olsa 1165a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1166515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11689854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 11691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1175a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1176fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1177a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1178a9f93f97SJiri Olsa 1179a9f93f97SJiri Olsa /* cache-misses - not sampling */ 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_CACHE_MISSES)); 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); 1189fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1190a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1191a9f93f97SJiri Olsa 1192a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1193e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11959854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 11961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1202a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1203fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1204a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1205a9f93f97SJiri Olsa 12067741e03eSIan Rogers return TEST_OK; 1207a9f93f97SJiri Olsa } 1208a9f93f97SJiri Olsa 120963503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1210a9f93f97SJiri Olsa { 121132dcd021SJiri Olsa struct evsel *evsel, *leader; 1212a9f93f97SJiri Olsa 12136484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1214a9f93f97SJiri Olsa 1215a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1216515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12189854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS)); 12191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1225a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1226fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1227a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1228a9f93f97SJiri Olsa 1229a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1230e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12329854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 12331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1239a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1240fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1241a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1242a9f93f97SJiri Olsa 12437741e03eSIan Rogers return TEST_OK; 1244a9f93f97SJiri Olsa } 1245a9f93f97SJiri Olsa 124663503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1247c9ee780fSMichael Ellerman { 1248515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1249c9ee780fSMichael Ellerman 12501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1255c9ee780fSMichael Ellerman 1256c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1257c9ee780fSMichael Ellerman } 1258c9ee780fSMichael Ellerman 125963503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1260c9ee780fSMichael Ellerman { 126132dcd021SJiri Olsa struct evsel *evsel, *leader; 1262c9ee780fSMichael Ellerman 12636484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1264c9ee780fSMichael Ellerman 1265c9ee780fSMichael Ellerman /* cycles - group leader */ 1266515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12689854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 1269c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1270fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1272c9ee780fSMichael Ellerman 1273c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1274e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 12769854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 12771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1278c9ee780fSMichael Ellerman 1279c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1280e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12819854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 12821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1283c9ee780fSMichael Ellerman 12847741e03eSIan Rogers return TEST_OK; 1285c9ee780fSMichael Ellerman } 1286c9ee780fSMichael Ellerman 12870997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 12880997a266SAndi Kleen { 12890997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 12900997a266SAndi Kleen 12910997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12920997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12930997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12940997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12950997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 12960997a266SAndi Kleen 12970997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 12980997a266SAndi Kleen } 12990997a266SAndi Kleen 13000997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 13010997a266SAndi Kleen { 13020997a266SAndi Kleen struct evsel *evsel, *leader; 13030997a266SAndi Kleen 13040997a266SAndi Kleen TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 13050997a266SAndi Kleen 13060997a266SAndi Kleen /* cycles - group leader */ 13070997a266SAndi Kleen evsel = leader = evlist__first(evlist); 13080997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13099854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 13100997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1311fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13120997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13130997a266SAndi Kleen 13140997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 13150997a266SAndi Kleen evsel = evsel__next(evsel); 13160997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13179854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES)); 13180997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13190997a266SAndi Kleen 13200997a266SAndi Kleen /* branch-misses - ditto */ 13210997a266SAndi Kleen evsel = evsel__next(evsel); 13229854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES)); 13230997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13240997a266SAndi Kleen 13257741e03eSIan Rogers return TEST_OK; 13260997a266SAndi Kleen } 132763503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1328ec32398cSJacob Shin { 1329515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1330ec32398cSJacob Shin 13316484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13339854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1334ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13351fc632ceSJiri Olsa evsel->core.attr.bp_type); 1336ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13371fc632ceSJiri Olsa evsel->core.attr.bp_len); 1338ec32398cSJacob Shin 13397741e03eSIan Rogers return TEST_OK; 1340ec32398cSJacob Shin } 1341ec32398cSJacob Shin 134263503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1343ec32398cSJacob Shin { 1344515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1345ec32398cSJacob Shin 13466484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13489854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0)); 1349ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13501fc632ceSJiri Olsa evsel->core.attr.bp_type); 1351ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13521fc632ceSJiri Olsa evsel->core.attr.bp_len); 1353ec32398cSJacob Shin 13547741e03eSIan Rogers return TEST_OK; 1355ec32398cSJacob Shin } 1356ec32398cSJacob Shin 1357ec32398cSJacob Shin static int 135863503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1359ec32398cSJacob Shin { 1360515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1361ec32398cSJacob Shin 13621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1366ec32398cSJacob Shin 1367ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1368ec32398cSJacob Shin } 1369ec32398cSJacob Shin 137063503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1371ddd83c97SJiri Olsa { 1372515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1373ddd83c97SJiri Olsa 13746484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 13769854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK)); 13777741e03eSIan Rogers return TEST_OK; 1378ddd83c97SJiri Olsa } 1379ddd83c97SJiri Olsa 138063503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 138110bf358aSWang Nan { 1382515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 138310bf358aSWang Nan 1384ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn")); 13857741e03eSIan Rogers return TEST_OK; 138610bf358aSWang Nan } 138710bf358aSWang Nan 138863503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 138910bf358aSWang Nan { 1390515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139110bf358aSWang Nan 1392ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu")); 13937741e03eSIan Rogers return TEST_OK; 139410bf358aSWang Nan } 139510bf358aSWang Nan 139663503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 139710bf358aSWang Nan { 1398515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139910bf358aSWang Nan 1400ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu")); 14017741e03eSIan Rogers return TEST_OK; 140210bf358aSWang Nan } 140310bf358aSWang Nan 140463503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 140543d0b978SWang Nan { 1406515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 140743d0b978SWang Nan 1408ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu")); 1409*4a7c4eafSIan Rogers return test__checkevent_genhw(evlist); 141043d0b978SWang Nan } 141110bf358aSWang Nan 14128f8c1068SIan Rogers static bool test__pmu_cpu_valid(void) 14138f8c1068SIan Rogers { 14148f8c1068SIan Rogers return !!perf_pmu__find("cpu"); 14158f8c1068SIan Rogers } 14168f8c1068SIan Rogers 141716ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 141816ddcfbfSJiri Olsa { 141916ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 142016ddcfbfSJiri Olsa } 142116ddcfbfSJiri Olsa 142263503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1423b3f58c8dSArnaldo Carvalho de Melo { 1424515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1425b3f58c8dSArnaldo Carvalho de Melo 1426ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u")); 14277741e03eSIan Rogers return TEST_OK; 1428b3f58c8dSArnaldo Carvalho de Melo } 1429b3f58c8dSArnaldo Carvalho de Melo 143063503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 143106dc5bf2SAlexey Budankov { 1432515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 143306dc5bf2SAlexey Budankov 14349854934bSIan Rogers TEST_ASSERT_VAL("wrong complex name parsing", 14359854934bSIan Rogers evsel__name_is(evsel, 14369854934bSIan Rogers "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks")); 14377741e03eSIan Rogers return TEST_OK; 143806dc5bf2SAlexey Budankov } 143906dc5bf2SAlexey Budankov 14403a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 14413a6c51e4SJiri Olsa { 14423a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 14433a6c51e4SJiri Olsa 14443a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14453a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14469854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 14477741e03eSIan Rogers return TEST_OK; 14483a6c51e4SJiri Olsa } 14493a6c51e4SJiri Olsa 145063503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1451714a92d8SJiri Olsa { 1452515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1453714a92d8SJiri Olsa 14541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14559854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 14561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14577741e03eSIan Rogers return TEST_OK; 1458714a92d8SJiri Olsa } 1459714a92d8SJiri Olsa 146063503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1461714a92d8SJiri Olsa { 1462515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1463714a92d8SJiri Olsa 14641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14659854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)); 14661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 14677741e03eSIan Rogers return TEST_OK; 1468714a92d8SJiri Olsa } 1469714a92d8SJiri Olsa 1470378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 147182ce75d9SJiri Olsa static int count_tracepoints(void) 147282ce75d9SJiri Olsa { 147382ce75d9SJiri Olsa struct dirent *events_ent; 147482ce75d9SJiri Olsa DIR *events_dir; 147582ce75d9SJiri Olsa int cnt = 0; 147682ce75d9SJiri Olsa 14777014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 147882ce75d9SJiri Olsa 147982ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 148082ce75d9SJiri Olsa 148182ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 148225a7d914SArnaldo Carvalho de Melo char *sys_path; 148382ce75d9SJiri Olsa struct dirent *sys_ent; 148482ce75d9SJiri Olsa DIR *sys_dir; 148582ce75d9SJiri Olsa 148682ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 148782ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 148882ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 148982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 149082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 149182ce75d9SJiri Olsa continue; 149282ce75d9SJiri Olsa 149325a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 149425a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 149582ce75d9SJiri Olsa 149682ce75d9SJiri Olsa sys_dir = opendir(sys_path); 149782ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 149882ce75d9SJiri Olsa 149982ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 150082ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 150182ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 150282ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 150382ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 150482ce75d9SJiri Olsa continue; 150582ce75d9SJiri Olsa 150682ce75d9SJiri Olsa cnt++; 150782ce75d9SJiri Olsa } 150882ce75d9SJiri Olsa 150982ce75d9SJiri Olsa closedir(sys_dir); 151025a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 151182ce75d9SJiri Olsa } 151282ce75d9SJiri Olsa 151382ce75d9SJiri Olsa closedir(events_dir); 151482ce75d9SJiri Olsa return cnt; 151582ce75d9SJiri Olsa } 151682ce75d9SJiri Olsa 151763503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 151882ce75d9SJiri Olsa { 151982ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 15206484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 152182ce75d9SJiri Olsa 152282ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 152382ce75d9SJiri Olsa } 1524378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 152582ce75d9SJiri Olsa 15262541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist) 15272541cb63SJin Yao { 15282541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 15292541cb63SJin Yao 15302541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15312541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15329854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x3c)); 15337741e03eSIan Rogers return TEST_OK; 15342541cb63SJin Yao } 15352541cb63SJin Yao 15362541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist) 15372541cb63SJin Yao { 15382541cb63SJin Yao struct evsel *evsel, *leader; 15392541cb63SJin Yao 15402541cb63SJin Yao evsel = leader = evlist__first(evlist); 15412541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15422541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15439854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x3c)); 1544fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15452541cb63SJin Yao 15462541cb63SJin Yao evsel = evsel__next(evsel); 15472541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15489854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0xc0)); 1549fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15507741e03eSIan Rogers return TEST_OK; 15512541cb63SJin Yao } 15522541cb63SJin Yao 15532541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist) 15542541cb63SJin Yao { 15552541cb63SJin Yao struct evsel *evsel, *leader; 15562541cb63SJin Yao 15572541cb63SJin Yao evsel = leader = evlist__first(evlist); 15582541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15592541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1560fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15612541cb63SJin Yao 15622541cb63SJin Yao evsel = evsel__next(evsel); 15632541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15649854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x3c)); 1565fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15667741e03eSIan Rogers return TEST_OK; 15672541cb63SJin Yao } 15682541cb63SJin Yao 15692541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist) 15702541cb63SJin Yao { 15712541cb63SJin Yao struct evsel *evsel, *leader; 15722541cb63SJin Yao 15732541cb63SJin Yao evsel = leader = evlist__first(evlist); 15742541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15752541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15769854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x3c)); 1577fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15782541cb63SJin Yao 15792541cb63SJin Yao evsel = evsel__next(evsel); 15802541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1581fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15827741e03eSIan Rogers return TEST_OK; 15832541cb63SJin Yao } 15842541cb63SJin Yao 15852541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist) 15862541cb63SJin Yao { 15872541cb63SJin Yao struct evsel *evsel, *leader; 15882541cb63SJin Yao 15892541cb63SJin Yao evsel = leader = evlist__first(evlist); 15902541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15912541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15929854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x3c)); 1593fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15942541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 15952541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 15962541cb63SJin Yao 15972541cb63SJin Yao evsel = evsel__next(evsel); 15982541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15999854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0xc0)); 1600fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 16012541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 16022541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 16037741e03eSIan Rogers return TEST_OK; 16042541cb63SJin Yao } 16052541cb63SJin Yao 16062541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist) 16072541cb63SJin Yao { 16082541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16092541cb63SJin Yao 1610490e9a8fSJin Yao if (!perf_pmu__hybrid_mounted("cpu_atom")) { 1611490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1612490e9a8fSJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16139854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 16147741e03eSIan Rogers return TEST_OK; 1615490e9a8fSJin Yao } 1616490e9a8fSJin Yao 16172541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 16182541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16199854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 16202541cb63SJin Yao 16212541cb63SJin Yao /* The type of second event is randome value */ 16222541cb63SJin Yao evsel = evsel__next(evsel); 16239854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 16247741e03eSIan Rogers return TEST_OK; 16252541cb63SJin Yao } 16262541cb63SJin Yao 16272541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist) 16282541cb63SJin Yao { 16292541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16302541cb63SJin Yao 16312541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16322541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16339854934bSIan Rogers TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a)); 16347741e03eSIan Rogers return TEST_OK; 16352541cb63SJin Yao } 16362541cb63SJin Yao 16372541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist) 16382541cb63SJin Yao { 16392541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16402541cb63SJin Yao 1641490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16422541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 16432541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff)); 16447741e03eSIan Rogers return TEST_OK; 16452541cb63SJin Yao } 16462541cb63SJin Yao 164723b6339bSArnaldo Carvalho de Melo struct evlist_test { 1648945aea22SJiri Olsa const char *name; 164916ddcfbfSJiri Olsa bool (*valid)(void); 165063503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1651945aea22SJiri Olsa }; 1652945aea22SJiri Olsa 16538252e791SIan Rogers static const struct evlist_test test__events[] = { 1654378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1655615b8f99SAlexander Yarygin { 165643f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1657945aea22SJiri Olsa .check = test__checkevent_tracepoint, 16588252e791SIan Rogers /* 0 */ 1659945aea22SJiri Olsa }, 1660615b8f99SAlexander Yarygin { 1661945aea22SJiri Olsa .name = "syscalls:*", 1662945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 16638252e791SIan Rogers /* 1 */ 1664945aea22SJiri Olsa }, 1665378ef0f5SIan Rogers #endif 1666615b8f99SAlexander Yarygin { 1667945aea22SJiri Olsa .name = "r1a", 1668945aea22SJiri Olsa .check = test__checkevent_raw, 16698252e791SIan Rogers /* 2 */ 1670945aea22SJiri Olsa }, 1671615b8f99SAlexander Yarygin { 1672945aea22SJiri Olsa .name = "1:1", 1673945aea22SJiri Olsa .check = test__checkevent_numeric, 16748252e791SIan Rogers /* 3 */ 1675945aea22SJiri Olsa }, 1676615b8f99SAlexander Yarygin { 1677945aea22SJiri Olsa .name = "instructions", 1678945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 16798252e791SIan Rogers /* 4 */ 1680945aea22SJiri Olsa }, 1681615b8f99SAlexander Yarygin { 1682945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1683945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 16848252e791SIan Rogers /* 5 */ 1685945aea22SJiri Olsa }, 1686615b8f99SAlexander Yarygin { 1687945aea22SJiri Olsa .name = "faults", 1688945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 16898252e791SIan Rogers /* 6 */ 1690945aea22SJiri Olsa }, 1691615b8f99SAlexander Yarygin { 1692945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1693945aea22SJiri Olsa .check = test__checkevent_genhw, 16948252e791SIan Rogers /* 7 */ 1695945aea22SJiri Olsa }, 1696615b8f99SAlexander Yarygin { 1697945aea22SJiri Olsa .name = "mem:0", 1698945aea22SJiri Olsa .check = test__checkevent_breakpoint, 16998252e791SIan Rogers /* 8 */ 1700945aea22SJiri Olsa }, 1701615b8f99SAlexander Yarygin { 1702945aea22SJiri Olsa .name = "mem:0:x", 1703945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 17048252e791SIan Rogers /* 9 */ 1705945aea22SJiri Olsa }, 1706615b8f99SAlexander Yarygin { 1707945aea22SJiri Olsa .name = "mem:0:r", 1708945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 17098252e791SIan Rogers /* 0 */ 1710945aea22SJiri Olsa }, 1711615b8f99SAlexander Yarygin { 1712945aea22SJiri Olsa .name = "mem:0:w", 1713945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 17148252e791SIan Rogers /* 1 */ 1715945aea22SJiri Olsa }, 1716378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1717615b8f99SAlexander Yarygin { 171843f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1719945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 17208252e791SIan Rogers /* 2 */ 1721945aea22SJiri Olsa }, 1722615b8f99SAlexander Yarygin { 1723945aea22SJiri Olsa .name = "syscalls:*:u", 1724945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 17258252e791SIan Rogers /* 3 */ 1726945aea22SJiri Olsa }, 1727378ef0f5SIan Rogers #endif 1728615b8f99SAlexander Yarygin { 1729945aea22SJiri Olsa .name = "r1a:kp", 1730945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 17318252e791SIan Rogers /* 4 */ 1732945aea22SJiri Olsa }, 1733615b8f99SAlexander Yarygin { 1734945aea22SJiri Olsa .name = "1:1:hp", 1735945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 17368252e791SIan Rogers /* 5 */ 1737945aea22SJiri Olsa }, 1738615b8f99SAlexander Yarygin { 1739945aea22SJiri Olsa .name = "instructions:h", 1740945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 17418252e791SIan Rogers /* 6 */ 1742945aea22SJiri Olsa }, 1743615b8f99SAlexander Yarygin { 1744945aea22SJiri Olsa .name = "faults:u", 1745945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 17468252e791SIan Rogers /* 7 */ 1747945aea22SJiri Olsa }, 1748615b8f99SAlexander Yarygin { 1749945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1750945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 17518252e791SIan Rogers /* 8 */ 1752945aea22SJiri Olsa }, 1753615b8f99SAlexander Yarygin { 1754945aea22SJiri Olsa .name = "mem:0:u", 1755945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 17568252e791SIan Rogers /* 9 */ 1757945aea22SJiri Olsa }, 1758615b8f99SAlexander Yarygin { 1759945aea22SJiri Olsa .name = "mem:0:x:k", 1760945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 17618252e791SIan Rogers /* 0 */ 1762945aea22SJiri Olsa }, 1763615b8f99SAlexander Yarygin { 1764945aea22SJiri Olsa .name = "mem:0:r:hp", 1765945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 17668252e791SIan Rogers /* 1 */ 1767945aea22SJiri Olsa }, 1768615b8f99SAlexander Yarygin { 1769945aea22SJiri Olsa .name = "mem:0:w:up", 1770945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 17718252e791SIan Rogers /* 2 */ 1772945aea22SJiri Olsa }, 1773378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1774615b8f99SAlexander Yarygin { 177543f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1776945aea22SJiri Olsa .check = test__checkevent_list, 17778252e791SIan Rogers /* 3 */ 1778945aea22SJiri Olsa }, 1779378ef0f5SIan Rogers #endif 1780615b8f99SAlexander Yarygin { 1781945aea22SJiri Olsa .name = "instructions:G", 1782945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 17838252e791SIan Rogers /* 4 */ 1784945aea22SJiri Olsa }, 1785615b8f99SAlexander Yarygin { 1786945aea22SJiri Olsa .name = "instructions:H", 1787945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 17888252e791SIan Rogers /* 5 */ 1789945aea22SJiri Olsa }, 1790615b8f99SAlexander Yarygin { 1791945aea22SJiri Olsa .name = "mem:0:rw", 1792945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 17938252e791SIan Rogers /* 6 */ 1794945aea22SJiri Olsa }, 1795615b8f99SAlexander Yarygin { 1796945aea22SJiri Olsa .name = "mem:0:rw:kp", 1797945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 17988252e791SIan Rogers /* 7 */ 1799945aea22SJiri Olsa }, 1800615b8f99SAlexander Yarygin { 1801945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1802945aea22SJiri Olsa .check = test__group1, 18038252e791SIan Rogers /* 8 */ 1804945aea22SJiri Olsa }, 1805615b8f99SAlexander Yarygin { 1806945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1807945aea22SJiri Olsa .check = test__group2, 18088252e791SIan Rogers /* 9 */ 1809945aea22SJiri Olsa }, 1810378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1811615b8f99SAlexander Yarygin { 181243f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1813945aea22SJiri Olsa .check = test__group3, 18148252e791SIan Rogers /* 0 */ 1815945aea22SJiri Olsa }, 1816378ef0f5SIan Rogers #endif 1817615b8f99SAlexander Yarygin { 1818945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1819945aea22SJiri Olsa .check = test__group4, 18208252e791SIan Rogers /* 1 */ 1821945aea22SJiri Olsa }, 1822615b8f99SAlexander Yarygin { 1823945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1824945aea22SJiri Olsa .check = test__group5, 18258252e791SIan Rogers /* 2 */ 1826945aea22SJiri Olsa }, 1827378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1828615b8f99SAlexander Yarygin { 182982ce75d9SJiri Olsa .name = "*:*", 183082ce75d9SJiri Olsa .check = test__all_tracepoints, 18318252e791SIan Rogers /* 3 */ 183282ce75d9SJiri Olsa }, 1833378ef0f5SIan Rogers #endif 1834615b8f99SAlexander Yarygin { 18355a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 18365a30a99fSJiri Olsa .check = test__group_gh1, 18378252e791SIan Rogers /* 4 */ 18385a30a99fSJiri Olsa }, 1839615b8f99SAlexander Yarygin { 18405a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 18415a30a99fSJiri Olsa .check = test__group_gh2, 18428252e791SIan Rogers /* 5 */ 18435a30a99fSJiri Olsa }, 1844615b8f99SAlexander Yarygin { 18455a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 18465a30a99fSJiri Olsa .check = test__group_gh3, 18478252e791SIan Rogers /* 6 */ 18485a30a99fSJiri Olsa }, 1849615b8f99SAlexander Yarygin { 18505a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 18515a30a99fSJiri Olsa .check = test__group_gh4, 18528252e791SIan Rogers /* 7 */ 18535a30a99fSJiri Olsa }, 1854615b8f99SAlexander Yarygin { 1855a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1856a9f93f97SJiri Olsa .check = test__leader_sample1, 18578252e791SIan Rogers /* 8 */ 1858a9f93f97SJiri Olsa }, 1859615b8f99SAlexander Yarygin { 1860a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1861a9f93f97SJiri Olsa .check = test__leader_sample2, 18628252e791SIan Rogers /* 9 */ 1863a9f93f97SJiri Olsa }, 1864615b8f99SAlexander Yarygin { 1865c9ee780fSMichael Ellerman .name = "instructions:uDp", 1866c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 18678252e791SIan Rogers /* 0 */ 1868c9ee780fSMichael Ellerman }, 1869615b8f99SAlexander Yarygin { 1870c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1871c9ee780fSMichael Ellerman .check = test__pinned_group, 18728252e791SIan Rogers /* 1 */ 1873c9ee780fSMichael Ellerman }, 1874ec32398cSJacob Shin { 1875ec32398cSJacob Shin .name = "mem:0/1", 1876ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 18778252e791SIan Rogers /* 2 */ 1878ec32398cSJacob Shin }, 1879ec32398cSJacob Shin { 1880ec32398cSJacob Shin .name = "mem:0/2:w", 1881ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 18828252e791SIan Rogers /* 3 */ 1883ec32398cSJacob Shin }, 1884ec32398cSJacob Shin { 1885ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1886ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 18878252e791SIan Rogers /* 4 */ 1888ec32398cSJacob Shin }, 1889378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 1890c0bc8c6dSAlexander Yarygin { 1891c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1892c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 189353fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 18948252e791SIan Rogers /* 0 */ 1895c0bc8c6dSAlexander Yarygin }, 1896c0bc8c6dSAlexander Yarygin #endif 1897a1e12da4SJiri Olsa { 1898a1e12da4SJiri Olsa .name = "instructions:I", 1899a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 19008252e791SIan Rogers /* 5 */ 1901a1e12da4SJiri Olsa }, 1902a1e12da4SJiri Olsa { 1903a1e12da4SJiri Olsa .name = "instructions:kIG", 1904a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 19058252e791SIan Rogers /* 6 */ 1906a1e12da4SJiri Olsa }, 1907ddd83c97SJiri Olsa { 1908ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1909ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 19108252e791SIan Rogers /* 7 */ 1911ddd83c97SJiri Olsa }, 191210bf358aSWang Nan { 191310bf358aSWang Nan .name = "instructions/name=insn/", 191410bf358aSWang Nan .check = test__checkevent_config_symbol, 19158252e791SIan Rogers /* 8 */ 191610bf358aSWang Nan }, 191710bf358aSWang Nan { 191810bf358aSWang Nan .name = "r1234/name=rawpmu/", 191910bf358aSWang Nan .check = test__checkevent_config_raw, 19208252e791SIan Rogers /* 9 */ 192110bf358aSWang Nan }, 192210bf358aSWang Nan { 192310bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 192410bf358aSWang Nan .check = test__checkevent_config_num, 19258252e791SIan Rogers /* 0 */ 192610bf358aSWang Nan }, 192743d0b978SWang Nan { 192843d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 192943d0b978SWang Nan .check = test__checkevent_config_cache, 19308252e791SIan Rogers /* 1 */ 193143d0b978SWang Nan }, 1932b3f58c8dSArnaldo Carvalho de Melo { 1933b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 193416ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1935b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 19368252e791SIan Rogers /* 2 */ 1937b3f58c8dSArnaldo Carvalho de Melo }, 193806dc5bf2SAlexey Budankov { 193906dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 194006dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 19418252e791SIan Rogers /* 3 */ 1942714a92d8SJiri Olsa }, 1943714a92d8SJiri Olsa { 1944714a92d8SJiri Olsa .name = "cycles//u", 1945714a92d8SJiri Olsa .check = test__sym_event_slash, 19468252e791SIan Rogers /* 4 */ 1947714a92d8SJiri Olsa }, 1948714a92d8SJiri Olsa { 1949714a92d8SJiri Olsa .name = "cycles:k", 1950714a92d8SJiri Olsa .check = test__sym_event_dc, 19518252e791SIan Rogers /* 5 */ 19520997a266SAndi Kleen }, 19530997a266SAndi Kleen { 19540997a266SAndi Kleen .name = "instructions:uep", 19550997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 19568252e791SIan Rogers /* 6 */ 19570997a266SAndi Kleen }, 19580997a266SAndi Kleen { 19590997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 19600997a266SAndi Kleen .check = test__exclusive_group, 19618252e791SIan Rogers /* 7 */ 19620997a266SAndi Kleen }, 1963945aea22SJiri Olsa }; 1964945aea22SJiri Olsa 19658252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 1966615b8f99SAlexander Yarygin { 1967945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 19688f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 1969945aea22SJiri Olsa .check = test__checkevent_pmu, 19708252e791SIan Rogers /* 0 */ 1971945aea22SJiri Olsa }, 1972615b8f99SAlexander Yarygin { 1973945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 19748f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 1975945aea22SJiri Olsa .check = test__checkevent_pmu_name, 19768252e791SIan Rogers /* 1 */ 1977945aea22SJiri Olsa }, 197871ef150eSKan Liang { 197971ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 19808f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 198171ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 19828252e791SIan Rogers /* 2 */ 198371ef150eSKan Liang }, 198406dc5bf2SAlexey Budankov { 1985a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 19868f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 198706dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 19888252e791SIan Rogers /* 3 */ 19893a6c51e4SJiri Olsa }, 19903a6c51e4SJiri Olsa { 19913a6c51e4SJiri Olsa .name = "software/r1a/", 19923a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 19938252e791SIan Rogers /* 4 */ 19943a6c51e4SJiri Olsa }, 1995c33cdf54SJiri Olsa { 1996c33cdf54SJiri Olsa .name = "software/r0x1a/", 1997c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 19988252e791SIan Rogers /* 5 */ 1999c33cdf54SJiri Olsa }, 2000945aea22SJiri Olsa }; 2001945aea22SJiri Olsa 200223b6339bSArnaldo Carvalho de Melo struct terms_test { 2003945aea22SJiri Olsa const char *str; 2004945aea22SJiri Olsa int (*check)(struct list_head *terms); 2005945aea22SJiri Olsa }; 2006945aea22SJiri Olsa 2007b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2008945aea22SJiri Olsa [0] = { 2009204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 2010945aea22SJiri Olsa .check = test__checkterms_simple, 2011945aea22SJiri Olsa }, 2012945aea22SJiri Olsa }; 2013945aea22SJiri Olsa 20148252e791SIan Rogers static const struct evlist_test test__hybrid_events[] = { 20152541cb63SJin Yao { 20162541cb63SJin Yao .name = "cpu_core/cpu-cycles/", 20172541cb63SJin Yao .check = test__hybrid_hw_event_with_pmu, 20188252e791SIan Rogers /* 0 */ 20192541cb63SJin Yao }, 20202541cb63SJin Yao { 20212541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu_core/instructions/}", 20222541cb63SJin Yao .check = test__hybrid_hw_group_event, 20238252e791SIan Rogers /* 1 */ 20242541cb63SJin Yao }, 20252541cb63SJin Yao { 20262541cb63SJin Yao .name = "{cpu-clock,cpu_core/cpu-cycles/}", 20272541cb63SJin Yao .check = test__hybrid_sw_hw_group_event, 20288252e791SIan Rogers /* 2 */ 20292541cb63SJin Yao }, 20302541cb63SJin Yao { 20312541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu-clock}", 20322541cb63SJin Yao .check = test__hybrid_hw_sw_group_event, 20338252e791SIan Rogers /* 3 */ 20342541cb63SJin Yao }, 20352541cb63SJin Yao { 20362541cb63SJin Yao .name = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}", 20372541cb63SJin Yao .check = test__hybrid_group_modifier1, 20388252e791SIan Rogers /* 4 */ 20392541cb63SJin Yao }, 20402541cb63SJin Yao { 20412541cb63SJin Yao .name = "r1a", 20422541cb63SJin Yao .check = test__hybrid_raw1, 20438252e791SIan Rogers /* 5 */ 20442541cb63SJin Yao }, 20452541cb63SJin Yao { 20462541cb63SJin Yao .name = "cpu_core/r1a/", 20472541cb63SJin Yao .check = test__hybrid_raw2, 20488252e791SIan Rogers /* 6 */ 20492541cb63SJin Yao }, 20502541cb63SJin Yao { 20512541cb63SJin Yao .name = "cpu_core/config=10,config1,config2=3,period=1000/u", 20522541cb63SJin Yao .check = test__checkevent_pmu, 20538252e791SIan Rogers /* 7 */ 20542541cb63SJin Yao }, 20552541cb63SJin Yao { 2056490e9a8fSJin Yao .name = "cpu_core/LLC-loads/", 20572541cb63SJin Yao .check = test__hybrid_cache_event, 20588252e791SIan Rogers /* 8 */ 20592541cb63SJin Yao }, 20602541cb63SJin Yao }; 20612541cb63SJin Yao 20628252e791SIan Rogers static int test_event(const struct evlist_test *e) 2063945aea22SJiri Olsa { 2064a910e466SIan Rogers struct parse_events_error err; 206563503dbaSJiri Olsa struct evlist *evlist; 2066945aea22SJiri Olsa int ret; 2067945aea22SJiri Olsa 206816ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 20697741e03eSIan Rogers pr_debug("... SKIP\n"); 20707741e03eSIan Rogers return TEST_OK; 207116ddcfbfSJiri Olsa } 207216ddcfbfSJiri Olsa 20730f98b11cSJiri Olsa evlist = evlist__new(); 20747741e03eSIan Rogers if (evlist == NULL) { 20757741e03eSIan Rogers pr_err("Failed allocation"); 20767741e03eSIan Rogers return TEST_FAIL; 20777741e03eSIan Rogers } 207807eafd4eSIan Rogers parse_events_error__init(&err); 2079933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2080945aea22SJiri Olsa if (ret) { 2081933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2082933ccf20SJiri Olsa e->name, ret, err.str); 20836c191289SIan Rogers parse_events_error__print(&err, e->name); 20847741e03eSIan Rogers ret = TEST_FAIL; 20857741e03eSIan Rogers if (strstr(err.str, "can't access trace events")) 20867741e03eSIan Rogers ret = TEST_SKIP; 20872d4352c0SArnaldo Carvalho de Melo } else { 20882d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2089945aea22SJiri Olsa } 209007eafd4eSIan Rogers parse_events_error__exit(&err); 2091c12995a5SJiri Olsa evlist__delete(evlist); 2092945aea22SJiri Olsa 2093945aea22SJiri Olsa return ret; 2094945aea22SJiri Olsa } 2095945aea22SJiri Olsa 2096b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2097b4a7276cSJohn Garry { 2098b4a7276cSJohn Garry struct parse_events_error err; 2099b4a7276cSJohn Garry struct evlist *evlist; 2100b4a7276cSJohn Garry int ret; 2101b4a7276cSJohn Garry 2102b4a7276cSJohn Garry evlist = evlist__new(); 2103b4a7276cSJohn Garry if (!evlist) 2104b4a7276cSJohn Garry return -ENOMEM; 2105b4a7276cSJohn Garry 2106b4a7276cSJohn Garry parse_events_error__init(&err); 2107b4a7276cSJohn Garry perf_pmu__test_parse_init(); 2108a4c7d7c5SIan Rogers ret = __parse_events(evlist, str, &err, &perf_pmu__fake, /*warn_if_reordered=*/true); 2109b4a7276cSJohn Garry if (ret) { 2110b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2111b4a7276cSJohn Garry str, ret, err.str); 2112b4a7276cSJohn Garry parse_events_error__print(&err, str); 2113b4a7276cSJohn Garry } 2114b4a7276cSJohn Garry 2115b4a7276cSJohn Garry parse_events_error__exit(&err); 2116b4a7276cSJohn Garry evlist__delete(evlist); 2117b4a7276cSJohn Garry 2118b4a7276cSJohn Garry return ret; 2119b4a7276cSJohn Garry } 2120b4a7276cSJohn Garry 21217741e03eSIan Rogers static int combine_test_results(int existing, int latest) 21227741e03eSIan Rogers { 21237741e03eSIan Rogers if (existing == TEST_FAIL) 21247741e03eSIan Rogers return TEST_FAIL; 21257741e03eSIan Rogers if (existing == TEST_SKIP) 21267741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 21277741e03eSIan Rogers return latest; 21287741e03eSIan Rogers } 21297741e03eSIan Rogers 21308252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2131945aea22SJiri Olsa { 21327741e03eSIan Rogers int ret = TEST_OK; 2133945aea22SJiri Olsa 21348252e791SIan Rogers for (int i = 0; i < cnt; i++) { 21358252e791SIan Rogers const struct evlist_test *e = &events[i]; 21367741e03eSIan Rogers int test_ret; 2137945aea22SJiri Olsa 21387741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 21397741e03eSIan Rogers test_ret = test_event(e); 21407741e03eSIan Rogers if (test_ret != TEST_OK) { 21417741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 21427741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 21437741e03eSIan Rogers } 2144945aea22SJiri Olsa } 2145945aea22SJiri Olsa 21467741e03eSIan Rogers return ret; 21477741e03eSIan Rogers } 21487741e03eSIan Rogers 21497741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21507741e03eSIan Rogers { 21517741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2152945aea22SJiri Olsa } 2153945aea22SJiri Olsa 2154b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2155945aea22SJiri Olsa { 2156c549aca5SDavid Ahern struct list_head terms; 2157945aea22SJiri Olsa int ret; 2158945aea22SJiri Olsa 2159c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2160945aea22SJiri Olsa 21614929e95aSJiri Olsa /* 21624929e95aSJiri Olsa * The perf_pmu__test_parse_init prepares perf_pmu_events_list 21634929e95aSJiri Olsa * which gets freed in parse_events_terms. 21644929e95aSJiri Olsa */ 21654929e95aSJiri Olsa if (perf_pmu__test_parse_init()) 21664929e95aSJiri Olsa return -1; 21674929e95aSJiri Olsa 2168c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2169945aea22SJiri Olsa if (ret) { 2170945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2171945aea22SJiri Olsa t->str , ret); 2172945aea22SJiri Olsa return ret; 2173945aea22SJiri Olsa } 2174945aea22SJiri Olsa 2175c549aca5SDavid Ahern ret = t->check(&terms); 2176682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2177945aea22SJiri Olsa 2178945aea22SJiri Olsa return ret; 2179945aea22SJiri Olsa } 2180945aea22SJiri Olsa 2181b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2182945aea22SJiri Olsa { 2183945aea22SJiri Olsa int ret = 0; 2184945aea22SJiri Olsa 2185b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2186b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2187945aea22SJiri Olsa 2188945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2189945aea22SJiri Olsa ret = test_term(t); 2190945aea22SJiri Olsa if (ret) 2191945aea22SJiri Olsa break; 2192945aea22SJiri Olsa } 2193945aea22SJiri Olsa 2194945aea22SJiri Olsa return ret; 2195945aea22SJiri Olsa } 2196945aea22SJiri Olsa 21977741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21987741e03eSIan Rogers { 21997741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 22007741e03eSIan Rogers } 22017741e03eSIan Rogers 22027741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2203945aea22SJiri Olsa { 22045a52817eSIan Rogers struct perf_pmu *pmu; 22055a52817eSIan Rogers int ret = TEST_OK; 22065a52817eSIan Rogers 22075a52817eSIan Rogers if (list_empty(&pmus)) 22085a52817eSIan Rogers perf_pmu__scan(NULL); 22095a52817eSIan Rogers 22105a52817eSIan Rogers perf_pmus__for_each_pmu(pmu) { 2211945aea22SJiri Olsa struct stat st; 2212945aea22SJiri Olsa char path[PATH_MAX]; 2213945aea22SJiri Olsa struct dirent *ent; 2214945aea22SJiri Olsa DIR *dir; 22155a52817eSIan Rogers int err; 2216945aea22SJiri Olsa 22175a52817eSIan Rogers snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/", 22185a52817eSIan Rogers sysfs__mountpoint(), pmu->name); 22197741e03eSIan Rogers 22205a52817eSIan Rogers err = stat(path, &st); 22215a52817eSIan Rogers if (err) { 22225a52817eSIan Rogers pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path); 22235a52817eSIan Rogers continue; 2224945aea22SJiri Olsa } 2225945aea22SJiri Olsa 2226945aea22SJiri Olsa dir = opendir(path); 2227945aea22SJiri Olsa if (!dir) { 22287741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 22295a52817eSIan Rogers ret = combine_test_results(ret, TEST_SKIP); 22305a52817eSIan Rogers continue; 2231945aea22SJiri Olsa } 2232945aea22SJiri Olsa 22337741e03eSIan Rogers while ((ent = readdir(dir))) { 22348252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 22352e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 22367741e03eSIan Rogers int test_ret; 2237945aea22SJiri Olsa 223817a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 223917a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2240945aea22SJiri Olsa continue; 2241945aea22SJiri Olsa 22425a52817eSIan Rogers snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name); 2243945aea22SJiri Olsa 2244945aea22SJiri Olsa e.name = name; 2245945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2246945aea22SJiri Olsa 22477741e03eSIan Rogers test_ret = test_event(&e); 22487741e03eSIan Rogers if (test_ret != TEST_OK) { 22497741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22507741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22517741e03eSIan Rogers } 22525a52817eSIan Rogers 22535a52817eSIan Rogers if (!is_pmu_core(pmu->name)) 22545a52817eSIan Rogers continue; 22555a52817eSIan Rogers 2256146edff3SIan Rogers /* 2257146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2258146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2259146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2260146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2261146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2262146edff3SIan Rogers * isn't expected after this. As event names in the config 2263146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2264146edff3SIan Rogers * above. 2265146edff3SIan Rogers */ 2266146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2267146edff3SIan Rogers continue; 2268146edff3SIan Rogers 22695a52817eSIan Rogers snprintf(name, sizeof(name), "%s:u,%s/event=%s/u", 22705a52817eSIan Rogers ent->d_name, pmu->name, ent->d_name); 2271ffe59788SKan Liang e.name = name; 2272ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 22737741e03eSIan Rogers test_ret = test_event(&e); 22747741e03eSIan Rogers if (test_ret != TEST_OK) { 22757741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22767741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22777741e03eSIan Rogers } 2278945aea22SJiri Olsa } 2279945aea22SJiri Olsa 2280945aea22SJiri Olsa closedir(dir); 22815a52817eSIan Rogers } 2282945aea22SJiri Olsa return ret; 2283945aea22SJiri Olsa } 2284945aea22SJiri Olsa 22857741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 22867741e03eSIan Rogers { 22877741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 22887741e03eSIan Rogers } 22897741e03eSIan Rogers 2290c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2291c7a3828dSJin Yao { 2292c7a3828dSJin Yao char path[PATH_MAX]; 2293c7a3828dSJin Yao DIR *dir; 2294c7a3828dSJin Yao struct dirent *dent; 2295c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2296c7a3828dSJin Yao char buf[128]; 2297c7a3828dSJin Yao FILE *file; 2298c7a3828dSJin Yao 2299c7a3828dSJin Yao if (!sysfs) 2300c7a3828dSJin Yao return false; 2301c7a3828dSJin Yao 2302c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2303c7a3828dSJin Yao dir = opendir(path); 2304c7a3828dSJin Yao if (!dir) 2305c7a3828dSJin Yao return false; 2306c7a3828dSJin Yao 2307c7a3828dSJin Yao while ((dent = readdir(dir))) { 2308c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2309c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2310c7a3828dSJin Yao continue; 2311c7a3828dSJin Yao 2312c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2313c7a3828dSJin Yao sysfs, dent->d_name); 2314c7a3828dSJin Yao 2315c7a3828dSJin Yao if (!file_available(path)) 2316c7a3828dSJin Yao continue; 2317c7a3828dSJin Yao 2318c7a3828dSJin Yao file = fopen(path, "r"); 2319c7a3828dSJin Yao if (!file) 2320c7a3828dSJin Yao continue; 2321c7a3828dSJin Yao 2322c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2323c7a3828dSJin Yao fclose(file); 2324c7a3828dSJin Yao continue; 2325c7a3828dSJin Yao } 2326c7a3828dSJin Yao 2327c7a3828dSJin Yao /* Remove the last '\n' */ 2328c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2329c7a3828dSJin Yao 2330c7a3828dSJin Yao fclose(file); 2331c7a3828dSJin Yao *event = strdup(dent->d_name); 2332c7a3828dSJin Yao *alias = strdup(buf); 2333c7a3828dSJin Yao closedir(dir); 2334c7a3828dSJin Yao 2335c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2336c7a3828dSJin Yao free(*event); 2337c7a3828dSJin Yao free(*alias); 2338c7a3828dSJin Yao return false; 2339c7a3828dSJin Yao } 2340c7a3828dSJin Yao 2341c7a3828dSJin Yao return true; 2342c7a3828dSJin Yao } 2343c7a3828dSJin Yao 2344c7a3828dSJin Yao closedir(dir); 2345c7a3828dSJin Yao return false; 2346c7a3828dSJin Yao } 2347c7a3828dSJin Yao 23487741e03eSIan Rogers static int test__hybrid(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23497741e03eSIan Rogers { 23507741e03eSIan Rogers if (!perf_pmu__has_hybrid()) 23517741e03eSIan Rogers return TEST_SKIP; 23527741e03eSIan Rogers 23537741e03eSIan Rogers return test_events(test__hybrid_events, ARRAY_SIZE(test__hybrid_events)); 23547741e03eSIan Rogers } 23557741e03eSIan Rogers 2356c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2357c7a3828dSJin Yao { 2358c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2359c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2360c7a3828dSJin Yao 2361c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2362c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 23637741e03eSIan Rogers return TEST_OK; 2364c7a3828dSJin Yao } 2365c7a3828dSJin Yao 23667741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2367c7a3828dSJin Yao { 23688252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2369c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2370c7a3828dSJin Yao 2371c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2372c7a3828dSJin Yao event, alias); 2373c7a3828dSJin Yao 2374c7a3828dSJin Yao e.name = name; 2375c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2376c7a3828dSJin Yao return test_event(&e); 2377c7a3828dSJin Yao } 2378c7a3828dSJin Yao 23797741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23807741e03eSIan Rogers { 23817741e03eSIan Rogers char *event, *alias; 23827741e03eSIan Rogers int ret; 23837741e03eSIan Rogers 23847741e03eSIan Rogers if (!test_alias(&event, &alias)) 23857741e03eSIan Rogers return TEST_SKIP; 23867741e03eSIan Rogers 23877741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 23887741e03eSIan Rogers 23897741e03eSIan Rogers free(event); 23907741e03eSIan Rogers free(alias); 23917741e03eSIan Rogers return ret; 23927741e03eSIan Rogers } 23937741e03eSIan Rogers 23947741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 23957741e03eSIan Rogers int subtest __maybe_unused) 2396b4a7276cSJohn Garry { 2397b4a7276cSJohn Garry static const char events[][30] = { 2398b4a7276cSJohn Garry "event-hyphen", 2399b4a7276cSJohn Garry "event-two-hyph", 2400b4a7276cSJohn Garry }; 24017741e03eSIan Rogers int ret = TEST_OK; 2402b4a7276cSJohn Garry 24037741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 24047741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 24057741e03eSIan Rogers 24067741e03eSIan Rogers if (test_ret != TEST_OK) { 24077741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 24087741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2409b4a7276cSJohn Garry } 2410b4a7276cSJohn Garry } 2411b4a7276cSJohn Garry 2412b4a7276cSJohn Garry return ret; 2413b4a7276cSJohn Garry } 2414b4a7276cSJohn Garry 24157741e03eSIan Rogers static struct test_case tests__parse_events[] = { 24167741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 24177741e03eSIan Rogers events2, 24187741e03eSIan Rogers "permissions"), 24197741e03eSIan Rogers TEST_CASE_REASON("Test parsing of \"hybrid\" CPU events", 24207741e03eSIan Rogers hybrid, 24217741e03eSIan Rogers "not hybrid"), 24227741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 24237741e03eSIan Rogers pmu_events, 24247741e03eSIan Rogers "permissions"), 24257741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 24267741e03eSIan Rogers pmu_events2, 24277741e03eSIan Rogers "permissions"), 24287741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 24297741e03eSIan Rogers "no aliases in sysfs"), 24307741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 24317741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 24327741e03eSIan Rogers { .name = NULL, } 24337741e03eSIan Rogers }; 2434945aea22SJiri Olsa 24357741e03eSIan Rogers struct test_suite suite__parse_events = { 24367741e03eSIan Rogers .desc = "Parse event definition strings", 24377741e03eSIan Rogers .test_cases = tests__parse_events, 24387741e03eSIan Rogers }; 2439