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 24378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 25378ef0f5SIan Rogers 2653fe307dSThomas Richter #if defined(__s390x__) 2753fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this 284d39c89fSIngo Molnar * and return success when trace point kvm_s390_create_vm 2953fe307dSThomas Richter * exists. Otherwise this test always fails. 3053fe307dSThomas Richter */ 3153fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void) 3253fe307dSThomas Richter { 3353fe307dSThomas Richter char *eventfile; 3453fe307dSThomas Richter bool rc = false; 3553fe307dSThomas Richter 3653fe307dSThomas Richter eventfile = get_events_file("kvm-s390"); 3753fe307dSThomas Richter 3853fe307dSThomas Richter if (eventfile) { 3953fe307dSThomas Richter DIR *mydir = opendir(eventfile); 4053fe307dSThomas Richter 4153fe307dSThomas Richter if (mydir) { 4253fe307dSThomas Richter rc = true; 4353fe307dSThomas Richter closedir(mydir); 4453fe307dSThomas Richter } 4553fe307dSThomas Richter put_events_file(eventfile); 4653fe307dSThomas Richter } 4753fe307dSThomas Richter 4853fe307dSThomas Richter return rc; 4953fe307dSThomas Richter } 5053fe307dSThomas Richter #endif 5153fe307dSThomas Richter 5263503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist) 53945aea22SJiri Olsa { 54515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 55945aea22SJiri Olsa 566484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 579d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 59945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 601fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 627741e03eSIan Rogers return TEST_OK; 63945aea22SJiri Olsa } 64945aea22SJiri Olsa 6563503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist) 66945aea22SJiri Olsa { 6732dcd021SJiri Olsa struct evsel *evsel; 68945aea22SJiri Olsa 696484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 709d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); 71945aea22SJiri Olsa 72e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 73945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 741fc632ceSJiri Olsa PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 75945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 761fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 77945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 781fc632ceSJiri Olsa 1 == evsel->core.attr.sample_period); 79945aea22SJiri Olsa } 807741e03eSIan Rogers return TEST_OK; 81945aea22SJiri Olsa } 82378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 83945aea22SJiri Olsa 8463503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist) 85945aea22SJiri Olsa { 86515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 87945aea22SJiri Olsa 886484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 917741e03eSIan Rogers return TEST_OK; 92945aea22SJiri Olsa } 93945aea22SJiri Olsa 9463503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist) 95945aea22SJiri Olsa { 96515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 97945aea22SJiri Olsa 986484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 1001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 1017741e03eSIan Rogers return TEST_OK; 102945aea22SJiri Olsa } 103945aea22SJiri Olsa 10463503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist) 105945aea22SJiri Olsa { 106515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 107945aea22SJiri Olsa 1086484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1091fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 110945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1111fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 1127741e03eSIan Rogers return TEST_OK; 113945aea22SJiri Olsa } 114945aea22SJiri Olsa 11563503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist) 116945aea22SJiri Olsa { 117515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 118945aea22SJiri Olsa 1196484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 121945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1221fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 123ee4c7588SJiri Olsa /* 12478e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 125ee4c7588SJiri Olsa * while this test executes only parse events method. 126ee4c7588SJiri Olsa */ 127945aea22SJiri Olsa TEST_ASSERT_VAL("wrong period", 1281fc632ceSJiri Olsa 0 == evsel->core.attr.sample_period); 129945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config1", 1301fc632ceSJiri Olsa 0 == evsel->core.attr.config1); 131945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config2", 1321fc632ceSJiri Olsa 1 == evsel->core.attr.config2); 1337741e03eSIan Rogers return TEST_OK; 134945aea22SJiri Olsa } 135945aea22SJiri Olsa 13663503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist) 137945aea22SJiri Olsa { 138515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 139945aea22SJiri Olsa 1406484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 142945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 1431fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 1447741e03eSIan Rogers return TEST_OK; 145945aea22SJiri Olsa } 146945aea22SJiri Olsa 14763503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist) 148945aea22SJiri Olsa { 149515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 150945aea22SJiri Olsa 1516484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 1531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config); 1547741e03eSIan Rogers return TEST_OK; 155945aea22SJiri Olsa } 156945aea22SJiri Olsa 15763503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist) 158945aea22SJiri Olsa { 159515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 160945aea22SJiri Olsa 1616484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 164945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 1651fc632ceSJiri Olsa evsel->core.attr.bp_type); 166945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == 1671fc632ceSJiri Olsa evsel->core.attr.bp_len); 1687741e03eSIan Rogers return TEST_OK; 169945aea22SJiri Olsa } 170945aea22SJiri Olsa 17163503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist) 172945aea22SJiri Olsa { 173515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 174945aea22SJiri Olsa 1756484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 178945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1791fc632ceSJiri Olsa HW_BREAKPOINT_X == evsel->core.attr.bp_type); 1801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len); 1817741e03eSIan Rogers return TEST_OK; 182945aea22SJiri Olsa } 183945aea22SJiri Olsa 18463503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist) 185945aea22SJiri Olsa { 186515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 187945aea22SJiri Olsa 1886484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 189945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 1901fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 1911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 192945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 1931fc632ceSJiri Olsa HW_BREAKPOINT_R == evsel->core.attr.bp_type); 194945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 1951fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 1967741e03eSIan Rogers return TEST_OK; 197945aea22SJiri Olsa } 198945aea22SJiri Olsa 19963503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist) 200945aea22SJiri Olsa { 201515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 202945aea22SJiri Olsa 2036484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 204945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2051fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 207945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2081fc632ceSJiri Olsa HW_BREAKPOINT_W == evsel->core.attr.bp_type); 209945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2101fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2117741e03eSIan Rogers return TEST_OK; 212945aea22SJiri Olsa } 213945aea22SJiri Olsa 21463503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist) 215945aea22SJiri Olsa { 216515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 217945aea22SJiri Olsa 2186484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 219945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type", 2201fc632ceSJiri Olsa PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 2211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 222945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_type", 2231fc632ceSJiri Olsa (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type); 224945aea22SJiri Olsa TEST_ASSERT_VAL("wrong bp_len", 2251fc632ceSJiri Olsa HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len); 2267741e03eSIan Rogers return TEST_OK; 227945aea22SJiri Olsa } 228945aea22SJiri Olsa 229378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 23063503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist) 231945aea22SJiri Olsa { 232515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 233945aea22SJiri Olsa 2341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 238945aea22SJiri Olsa 239945aea22SJiri Olsa return test__checkevent_tracepoint(evlist); 240945aea22SJiri Olsa } 241945aea22SJiri Olsa 242945aea22SJiri Olsa static int 24363503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist) 244945aea22SJiri Olsa { 24532dcd021SJiri Olsa struct evsel *evsel; 246945aea22SJiri Olsa 2476484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); 248945aea22SJiri Olsa 249e5cadb93SArnaldo Carvalho de Melo evlist__for_each_entry(evlist, evsel) { 250945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 2511fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 252945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 2531fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 2541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 256945aea22SJiri Olsa } 257945aea22SJiri Olsa 258945aea22SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 259945aea22SJiri Olsa } 260378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */ 261945aea22SJiri Olsa 26263503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist) 263945aea22SJiri Olsa { 264515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 265945aea22SJiri Olsa 2661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 2671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 2681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 2691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 270945aea22SJiri Olsa 271945aea22SJiri Olsa return test__checkevent_raw(evlist); 272945aea22SJiri Olsa } 273945aea22SJiri Olsa 27463503dbaSJiri Olsa static int test__checkevent_numeric_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_numeric(evlist); 284945aea22SJiri Olsa } 285945aea22SJiri Olsa 28663503dbaSJiri Olsa static int test__checkevent_symbolic_name_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_symbolic_name(evlist); 296945aea22SJiri Olsa } 297945aea22SJiri Olsa 29863503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist) 299945aea22SJiri Olsa { 300515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 301945aea22SJiri Olsa 3021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 304945aea22SJiri Olsa 305945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 306945aea22SJiri Olsa } 307945aea22SJiri Olsa 30863503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist) 309945aea22SJiri Olsa { 310515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 311945aea22SJiri Olsa 3121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 3131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 314945aea22SJiri Olsa 315945aea22SJiri Olsa return test__checkevent_symbolic_name(evlist); 316945aea22SJiri Olsa } 317945aea22SJiri Olsa 31863503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist) 319945aea22SJiri Olsa { 320515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 321945aea22SJiri Olsa 3221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 326945aea22SJiri Olsa 327945aea22SJiri Olsa return test__checkevent_symbolic_alias(evlist); 328945aea22SJiri Olsa } 329945aea22SJiri Olsa 33063503dbaSJiri Olsa static int test__checkevent_genhw_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_genhw(evlist); 340945aea22SJiri Olsa } 341945aea22SJiri Olsa 34263503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist) 343a1e12da4SJiri Olsa { 344515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 345a1e12da4SJiri Olsa 3461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 3491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 3521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 353a1e12da4SJiri Olsa 354a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 355a1e12da4SJiri Olsa } 356a1e12da4SJiri Olsa 35763503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist) 358a1e12da4SJiri Olsa { 359515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 360a1e12da4SJiri Olsa 3611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle); 3621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 3631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 3641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 368a1e12da4SJiri Olsa 369a1e12da4SJiri Olsa return test__checkevent_symbolic_name(evlist); 370a1e12da4SJiri Olsa } 371a1e12da4SJiri Olsa 37263503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist) 373945aea22SJiri Olsa { 374515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 375945aea22SJiri Olsa 376945aea22SJiri Olsa 3771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 3781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 3791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 381945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3828ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:u")); 383945aea22SJiri Olsa 384945aea22SJiri Olsa return test__checkevent_breakpoint(evlist); 385945aea22SJiri Olsa } 386945aea22SJiri Olsa 38763503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist) 388945aea22SJiri Olsa { 389515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 390945aea22SJiri Olsa 3911fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 3921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 3931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 3941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 395945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 3968ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:x:k")); 397945aea22SJiri Olsa 398945aea22SJiri Olsa return test__checkevent_breakpoint_x(evlist); 399945aea22SJiri Olsa } 400945aea22SJiri Olsa 40163503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist) 402945aea22SJiri Olsa { 403515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 404945aea22SJiri Olsa 4051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4081fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 409945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4108ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:r:hp")); 411945aea22SJiri Olsa 412945aea22SJiri Olsa return test__checkevent_breakpoint_r(evlist); 413945aea22SJiri Olsa } 414945aea22SJiri Olsa 41563503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist) 416945aea22SJiri Olsa { 417515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 418945aea22SJiri Olsa 4191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 423945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4248ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:w:up")); 425945aea22SJiri Olsa 426945aea22SJiri Olsa return test__checkevent_breakpoint_w(evlist); 427945aea22SJiri Olsa } 428945aea22SJiri Olsa 42963503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist) 430945aea22SJiri Olsa { 431515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 432945aea22SJiri Olsa 4331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 437945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 4388ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "mem:0:rw:kp")); 439945aea22SJiri Olsa 440945aea22SJiri Olsa return test__checkevent_breakpoint_rw(evlist); 441945aea22SJiri Olsa } 442945aea22SJiri Olsa 44363503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist) 444945aea22SJiri Olsa { 445945aea22SJiri Olsa 446515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 447945aea22SJiri Olsa 4486484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 4491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 10 == evsel->core.attr.config); 4511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 1 == evsel->core.attr.config1); 4521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 3 == evsel->core.attr.config2); 453204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 454ee4c7588SJiri Olsa /* 45578e1bc25SArnaldo Carvalho de Melo * The period value gets configured within evlist__config, 456ee4c7588SJiri Olsa * while this test executes only parse events method. 457ee4c7588SJiri Olsa */ 4581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 459945aea22SJiri Olsa 4607741e03eSIan Rogers return TEST_OK; 461945aea22SJiri Olsa } 462945aea22SJiri Olsa 463378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 46463503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist) 465945aea22SJiri Olsa { 466515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 467945aea22SJiri Olsa 4686484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 469945aea22SJiri Olsa 470945aea22SJiri Olsa /* r1 */ 4711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 4721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1); 4741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2); 475204e7c49SRob Herring TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3); 4761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 4771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 480945aea22SJiri Olsa 48143f322b4SRiku Voipio /* syscalls:sys_enter_openat:k */ 482e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 484945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 4851fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 4861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 4871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 4891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 4901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 491945aea22SJiri Olsa 492945aea22SJiri Olsa /* 1:1:hp */ 493e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 4941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 4951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 4961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 4971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 4981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 4991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 500945aea22SJiri Olsa 5017741e03eSIan Rogers return TEST_OK; 502945aea22SJiri Olsa } 503378ef0f5SIan Rogers #endif 504945aea22SJiri Olsa 50563503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist) 506945aea22SJiri Olsa { 507515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 508945aea22SJiri Olsa 509945aea22SJiri Olsa /* cpu/config=1,name=krava/u */ 5106484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 5138ab2e96dSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava")); 514945aea22SJiri Olsa 515945aea22SJiri Olsa /* cpu/config=2/u" */ 516e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5176484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 520945aea22SJiri Olsa TEST_ASSERT_VAL("wrong name", 5218ab2e96dSArnaldo Carvalho de Melo !strcmp(evsel__name(evsel), "cpu/config=2/u")); 522945aea22SJiri Olsa 5237741e03eSIan Rogers return TEST_OK; 524945aea22SJiri Olsa } 525945aea22SJiri Olsa 52663503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist) 52771ef150eSKan Liang { 528515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 52971ef150eSKan Liang 53071ef150eSKan Liang /* cpu/config=1,call-graph=fp,time,period=100000/ */ 5316484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config); 53471ef150eSKan Liang /* 53578e1bc25SArnaldo Carvalho de Melo * The period, time and callgraph value gets configured within evlist__config, 53671ef150eSKan Liang * while this test executes only parse events method. 53771ef150eSKan Liang */ 5381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong period", 0 == evsel->core.attr.sample_period); 53927de9b2bSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel)); 5401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type)); 54171ef150eSKan Liang 54271ef150eSKan Liang /* cpu/config=2,call-graph=no,time=0,period=2000/ */ 543e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 5451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 2 == evsel->core.attr.config); 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 5547741e03eSIan Rogers return TEST_OK; 55571ef150eSKan Liang } 55671ef150eSKan Liang 55763503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist) 558945aea22SJiri Olsa { 559515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 560945aea22SJiri Olsa 5616484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 5625a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 5635a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 564945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", 5651fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 566945aea22SJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", 5671fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5710997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 572945aea22SJiri Olsa 5737741e03eSIan Rogers return TEST_OK; 574945aea22SJiri Olsa } 575945aea22SJiri Olsa 576ffe59788SKan Liang 57763503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist) 578ffe59788SKan Liang { 579515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 580ffe59788SKan Liang 581ffe59788SKan Liang /* pmu-event:u */ 5826484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 583ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5841fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 585ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 5861fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 5871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 5881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 5891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 5900997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 591ffe59788SKan Liang 592ffe59788SKan Liang /* cpu/pmu-event/u*/ 593e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 5946484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 5955a52817eSIan Rogers TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type || 5965a52817eSIan Rogers strcmp(evsel->pmu_name, "cpu")); 597ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_user", 5981fc632ceSJiri Olsa !evsel->core.attr.exclude_user); 599ffe59788SKan Liang TEST_ASSERT_VAL("wrong exclude_kernel", 6001fc632ceSJiri Olsa evsel->core.attr.exclude_kernel); 6011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 6021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 6031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 6040997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned); 605ffe59788SKan Liang 6067741e03eSIan Rogers return TEST_OK; 607ffe59788SKan Liang } 608ffe59788SKan Liang 609945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms) 610945aea22SJiri Olsa { 6116cee6cd3SArnaldo Carvalho de Melo struct parse_events_term *term; 612945aea22SJiri Olsa 613945aea22SJiri Olsa /* config=10 */ 6146cee6cd3SArnaldo Carvalho de Melo term = list_entry(terms->next, struct parse_events_term, list); 615945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 616945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 617945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 618945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 619945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 10); 6204f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 621945aea22SJiri Olsa 622945aea22SJiri Olsa /* config1 */ 6236cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 624945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 625945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); 626945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 627945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 628945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6294f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1")); 630945aea22SJiri Olsa 631945aea22SJiri Olsa /* config2=3 */ 6326cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 633945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 634945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); 635945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 636945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 637945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 3); 6384f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2")); 639945aea22SJiri Olsa 640204e7c49SRob Herring /* config3=4 */ 641204e7c49SRob Herring term = list_entry(term->list.next, struct parse_events_term, list); 642204e7c49SRob Herring TEST_ASSERT_VAL("wrong type term", 643204e7c49SRob Herring term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3); 644204e7c49SRob Herring TEST_ASSERT_VAL("wrong type val", 645204e7c49SRob Herring term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 646204e7c49SRob Herring TEST_ASSERT_VAL("wrong val", term->val.num == 4); 647204e7c49SRob Herring TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3")); 648204e7c49SRob Herring 649945aea22SJiri Olsa /* umask=1*/ 6506cee6cd3SArnaldo Carvalho de Melo term = list_entry(term->list.next, struct parse_events_term, list); 651945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type term", 652945aea22SJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 653945aea22SJiri Olsa TEST_ASSERT_VAL("wrong type val", 654945aea22SJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 655945aea22SJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 656945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); 657945aea22SJiri Olsa 6584929e95aSJiri Olsa /* 6594929e95aSJiri Olsa * read 6604929e95aSJiri Olsa * 6614929e95aSJiri Olsa * The perf_pmu__test_parse_init injects 'read' term into 6624929e95aSJiri Olsa * perf_pmu_events_list, so 'read' is evaluated as read term 6634929e95aSJiri Olsa * and not as raw event with 'ead' hex value. 6644929e95aSJiri Olsa */ 6654929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6664929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6674929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_USER); 6684929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6694929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6704929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 1); 6714929e95aSJiri Olsa TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read")); 6724929e95aSJiri Olsa 6734929e95aSJiri Olsa /* 6744929e95aSJiri Olsa * r0xead 6754929e95aSJiri Olsa * 6764929e95aSJiri Olsa * To be still able to pass 'ead' value with 'r' syntax, 6774929e95aSJiri Olsa * we added support to parse 'r0xHEX' event. 6784929e95aSJiri Olsa */ 6794929e95aSJiri Olsa term = list_entry(term->list.next, struct parse_events_term, list); 6804929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type term", 6814929e95aSJiri Olsa term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); 6824929e95aSJiri Olsa TEST_ASSERT_VAL("wrong type val", 6834929e95aSJiri Olsa term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); 6844929e95aSJiri Olsa TEST_ASSERT_VAL("wrong val", term->val.num == 0xead); 6854f9d4f8aSJohn Garry TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config")); 6867741e03eSIan Rogers return TEST_OK; 687945aea22SJiri Olsa } 688945aea22SJiri Olsa 68963503dbaSJiri Olsa static int test__group1(struct evlist *evlist) 690945aea22SJiri Olsa { 69132dcd021SJiri Olsa struct evsel *evsel, *leader; 692945aea22SJiri Olsa 6936484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 6949d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 695945aea22SJiri Olsa 696945aea22SJiri Olsa /* instructions:k */ 697515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 6981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 699945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7001fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 7011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 707c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7085643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7092bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 710a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 711945aea22SJiri Olsa 712945aea22SJiri Olsa /* cycles:upp */ 713e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 715945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7161fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7171fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 720945aea22SJiri Olsa /* use of precise requires exclude_guest */ 7211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 724fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7252bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 726a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 727945aea22SJiri Olsa 7287741e03eSIan Rogers return TEST_OK; 729945aea22SJiri Olsa } 730945aea22SJiri Olsa 73163503dbaSJiri Olsa static int test__group2(struct evlist *evlist) 732945aea22SJiri Olsa { 73332dcd021SJiri Olsa struct evsel *evsel, *leader; 734945aea22SJiri Olsa 7356484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 7369d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 737945aea22SJiri Olsa 738945aea22SJiri Olsa /* faults + :ku modifier */ 739515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 741945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7421fc632ceSJiri Olsa PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config); 7431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 746943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7481fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 749c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 7505643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 7512bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 752a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 753945aea22SJiri Olsa 754945aea22SJiri Olsa /* cache-references + :u modifier */ 755e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 757945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7581fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config); 7591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 7601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 7611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 7631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 765fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 7662bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 767a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 768945aea22SJiri Olsa 769945aea22SJiri Olsa /* cycles:k */ 770e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 7711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 772945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 7731fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 7741fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 7751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 7761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 7771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 7781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 7791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 780c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 781a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 782945aea22SJiri Olsa 7837741e03eSIan Rogers return TEST_OK; 784945aea22SJiri Olsa } 785945aea22SJiri Olsa 786378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 78763503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused) 788945aea22SJiri Olsa { 78932dcd021SJiri Olsa struct evsel *evsel, *leader; 790945aea22SJiri Olsa 7916484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 7929d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 793945aea22SJiri Olsa 79443f322b4SRiku Voipio /* group1 syscalls:sys_enter_openat:H */ 795515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 7961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); 797945aea22SJiri Olsa TEST_ASSERT_VAL("wrong sample_type", 7981fc632ceSJiri Olsa PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); 7991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period); 8001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 806c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 807945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 808945aea22SJiri Olsa !strcmp(leader->group_name, "group1")); 8095643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8102bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 811a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 812945aea22SJiri Olsa 813945aea22SJiri Olsa /* group1 cycles:kppp */ 814e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 816945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8171fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 8191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 821945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3); 825fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 826945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 8272bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 828a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 829945aea22SJiri Olsa 830945aea22SJiri Olsa /* group2 cycles + G modifier */ 831e470daeaSArnaldo Carvalho de Melo evsel = leader = evsel__next(evsel); 8321fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 833945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8341fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 841c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 842945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", 843945aea22SJiri Olsa !strcmp(leader->group_name, "group2")); 8445643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 8452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 846a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 847945aea22SJiri Olsa 848945aea22SJiri Olsa /* group2 1:3 + G modifier */ 849e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type); 8511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config); 8521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 8541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 8551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 8561fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 8571fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 858fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 8592bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 860a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 861945aea22SJiri Olsa 862945aea22SJiri Olsa /* instructions:u */ 863e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 8641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 865945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8661fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 8671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 870943b69acSJin Yao TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 873c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 874a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 875945aea22SJiri Olsa 8767741e03eSIan Rogers return TEST_OK; 877945aea22SJiri Olsa } 878378ef0f5SIan Rogers #endif 879945aea22SJiri Olsa 88063503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused) 881945aea22SJiri Olsa { 88232dcd021SJiri Olsa struct evsel *evsel, *leader; 883945aea22SJiri Olsa 8846484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 8859d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 886945aea22SJiri Olsa 887945aea22SJiri Olsa /* cycles:u + p */ 888515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 8891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 890945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 8911fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 8921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 8931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 8941fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 895945aea22SJiri Olsa /* use of precise requires exclude_guest */ 8961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 8971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 8981fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1); 899945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 900c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9015643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9022bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 903a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 904945aea22SJiri Olsa 905945aea22SJiri Olsa /* instructions:kp + p */ 906e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 908945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9091fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 9111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 913945aea22SJiri Olsa /* use of precise requires exclude_guest */ 9141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 9151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 9161fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2); 917fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9182bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 919a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 920945aea22SJiri Olsa 9217741e03eSIan Rogers return TEST_OK; 922945aea22SJiri Olsa } 923945aea22SJiri Olsa 92463503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused) 925945aea22SJiri Olsa { 92632dcd021SJiri Olsa struct evsel *evsel, *leader; 927945aea22SJiri Olsa 9286484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); 9299d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); 930945aea22SJiri Olsa 931945aea22SJiri Olsa /* cycles + G */ 932515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 9331fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 934945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9351fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 942945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 943c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9445643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 946a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 947945aea22SJiri Olsa 948945aea22SJiri Olsa /* instructions + G */ 949e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 951945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9521fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 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); 966945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9671fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9711fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9721fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9731fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 974945aea22SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 975c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 9765643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 9772bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 978a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); 979945aea22SJiri Olsa 980945aea22SJiri Olsa /* instructions:G */ 981e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 983945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9841fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 9851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 9861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 9871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 9881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 9891fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 9901fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 991fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 9922bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 993945aea22SJiri Olsa 994945aea22SJiri Olsa /* cycles */ 995e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 9961fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 997945aea22SJiri Olsa TEST_ASSERT_VAL("wrong config", 9981fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 9991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10001fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1005c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 1006945aea22SJiri Olsa 10077741e03eSIan Rogers return TEST_OK; 1008945aea22SJiri Olsa } 1009945aea22SJiri Olsa 101063503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist) 10115a30a99fSJiri Olsa { 101232dcd021SJiri Olsa struct evsel *evsel, *leader; 10135a30a99fSJiri Olsa 10146484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10159d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10165a30a99fSJiri Olsa 10175a30a99fSJiri Olsa /* cycles + :H group modifier */ 1018515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10205a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10211fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10241fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10251fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 10261fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10271fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10285a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1029c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10305643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10312bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10325a30a99fSJiri Olsa 10335a30a99fSJiri Olsa /* cache-misses:G + :H group modifier */ 1034e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10365a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10371fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10401fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10411fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1044fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10452bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10465a30a99fSJiri Olsa 10477741e03eSIan Rogers return TEST_OK; 10485a30a99fSJiri Olsa } 10495a30a99fSJiri Olsa 105063503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist) 10515a30a99fSJiri Olsa { 105232dcd021SJiri Olsa struct evsel *evsel, *leader; 10535a30a99fSJiri Olsa 10546484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10559d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10565a30a99fSJiri Olsa 10575a30a99fSJiri Olsa /* cycles + :G group modifier */ 1058515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10605a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10611fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 10621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10641fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10651fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 10671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 10685a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1069c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 10705643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 10712bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 10725a30a99fSJiri Olsa 10735a30a99fSJiri Olsa /* cache-misses:H + :G group modifier */ 1074e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 10751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 10765a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 10771fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 10781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 10791fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 10801fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 10811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 10821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 10831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1084fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 10852bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 10865a30a99fSJiri Olsa 10877741e03eSIan Rogers return TEST_OK; 10885a30a99fSJiri Olsa } 10895a30a99fSJiri Olsa 109063503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist) 10915a30a99fSJiri Olsa { 109232dcd021SJiri Olsa struct evsel *evsel, *leader; 10935a30a99fSJiri Olsa 10946484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 10959d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 10965a30a99fSJiri Olsa 10975a30a99fSJiri Olsa /* cycles:G + :u group modifier */ 1098515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 10991fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11005a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11011fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11021fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11031fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11041fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11051fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11061fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11085a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1109c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11105643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11112bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11125a30a99fSJiri Olsa 11135a30a99fSJiri Olsa /* cache-misses:H + :u group modifier */ 1114e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11165a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11171fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11181fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11191fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11201fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11211fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11221fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11231fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1124fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11252bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11265a30a99fSJiri Olsa 11277741e03eSIan Rogers return TEST_OK; 11285a30a99fSJiri Olsa } 11295a30a99fSJiri Olsa 113063503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist) 11315a30a99fSJiri Olsa { 113232dcd021SJiri Olsa struct evsel *evsel, *leader; 11335a30a99fSJiri Olsa 11346484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 11359d2dc632SIan Rogers TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); 11365a30a99fSJiri Olsa 11375a30a99fSJiri Olsa /* cycles:G + :uG group modifier */ 1138515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11405a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11411fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11421fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11431fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11441fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11451fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host); 11471fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 11485a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1149c754c382SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel)); 11505643b1a5SJiri Olsa TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2); 11512bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0); 11525a30a99fSJiri Olsa 11535a30a99fSJiri Olsa /* cache-misses:H + :uG group modifier */ 1154e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 11565a30a99fSJiri Olsa TEST_ASSERT_VAL("wrong config", 11571fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 11581fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11591fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 11601fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 11611fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest); 11621fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11631fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1164fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 11652bb72dbbSArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1); 11665a30a99fSJiri Olsa 11677741e03eSIan Rogers return TEST_OK; 11685a30a99fSJiri Olsa } 11695a30a99fSJiri Olsa 117063503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist) 1171a9f93f97SJiri Olsa { 117232dcd021SJiri Olsa struct evsel *evsel, *leader; 1173a9f93f97SJiri Olsa 11746484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1175a9f93f97SJiri Olsa 1176a9f93f97SJiri Olsa /* cycles - sampling group leader */ 1177515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 11781fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1179a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11801fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 11811fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 11821fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 11831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 11841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 11851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 11861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1187a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1188fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1189a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1190a9f93f97SJiri Olsa 1191a9f93f97SJiri Olsa /* cache-misses - not sampling */ 1192e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 11931fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1194a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 11951fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 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); 1202fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1203a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1204a9f93f97SJiri Olsa 1205a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1206e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12071fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1208a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12091fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12101fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12111fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 12121fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv); 12131fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12141fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12151fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1216a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1217fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1218a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1219a9f93f97SJiri Olsa 12207741e03eSIan Rogers return TEST_OK; 1221a9f93f97SJiri Olsa } 1222a9f93f97SJiri Olsa 122363503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused) 1224a9f93f97SJiri Olsa { 122532dcd021SJiri Olsa struct evsel *evsel, *leader; 1226a9f93f97SJiri Olsa 12276484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 1228a9f93f97SJiri Olsa 1229a9f93f97SJiri Olsa /* instructions - sampling group leader */ 1230515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12311fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1232a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12331fc632ceSJiri Olsa PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config); 12341fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12351fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12361fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12371fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12381fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12391fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1240a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1241fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1242a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1243a9f93f97SJiri Olsa 1244a9f93f97SJiri Olsa /* branch-misses - not sampling */ 1245e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12461fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1247a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong config", 12481fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 12491fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12501fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12511fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12521fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest); 12531fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host); 12541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1255a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1256fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 1257a9f93f97SJiri Olsa TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); 1258a9f93f97SJiri Olsa 12597741e03eSIan Rogers return TEST_OK; 1260a9f93f97SJiri Olsa } 1261a9f93f97SJiri Olsa 126263503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist) 1263c9ee780fSMichael Ellerman { 1264515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1265c9ee780fSMichael Ellerman 12661fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 12671fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 12681fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 12691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 12701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1271c9ee780fSMichael Ellerman 1272c9ee780fSMichael Ellerman return test__checkevent_symbolic_name(evlist); 1273c9ee780fSMichael Ellerman } 1274c9ee780fSMichael Ellerman 127563503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist) 1276c9ee780fSMichael Ellerman { 127732dcd021SJiri Olsa struct evsel *evsel, *leader; 1278c9ee780fSMichael Ellerman 12796484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 1280c9ee780fSMichael Ellerman 1281c9ee780fSMichael Ellerman /* cycles - group leader */ 1282515dbe48SJiri Olsa evsel = leader = evlist__first(evlist); 12831fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1284c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12851fc632ceSJiri Olsa PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 1286c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1287fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 12881fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned); 1289c9ee780fSMichael Ellerman 1290c9ee780fSMichael Ellerman /* cache-misses - can not be pinned, but will go on with the leader */ 1291e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 12921fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 1293c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 12941fc632ceSJiri Olsa PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 12951fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1296c9ee780fSMichael Ellerman 1297c9ee780fSMichael Ellerman /* branch-misses - ditto */ 1298e470daeaSArnaldo Carvalho de Melo evsel = evsel__next(evsel); 1299c9ee780fSMichael Ellerman TEST_ASSERT_VAL("wrong config", 13001fc632ceSJiri Olsa PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 13011fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned); 1302c9ee780fSMichael Ellerman 13037741e03eSIan Rogers return TEST_OK; 1304c9ee780fSMichael Ellerman } 1305c9ee780fSMichael Ellerman 13060997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist) 13070997a266SAndi Kleen { 13080997a266SAndi Kleen struct evsel *evsel = evlist__first(evlist); 13090997a266SAndi Kleen 13100997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13110997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13120997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13130997a266SAndi Kleen TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip); 13140997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13150997a266SAndi Kleen 13160997a266SAndi Kleen return test__checkevent_symbolic_name(evlist); 13170997a266SAndi Kleen } 13180997a266SAndi Kleen 13190997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist) 13200997a266SAndi Kleen { 13210997a266SAndi Kleen struct evsel *evsel, *leader; 13220997a266SAndi Kleen 13230997a266SAndi Kleen TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); 13240997a266SAndi Kleen 13250997a266SAndi Kleen /* cycles - group leader */ 13260997a266SAndi Kleen evsel = leader = evlist__first(evlist); 13270997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13280997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13290997a266SAndi Kleen PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config); 13300997a266SAndi Kleen TEST_ASSERT_VAL("wrong group name", !evsel->group_name); 1331fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 13320997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive); 13330997a266SAndi Kleen 13340997a266SAndi Kleen /* cache-misses - can not be pinned, but will go on with the leader */ 13350997a266SAndi Kleen evsel = evsel__next(evsel); 13360997a266SAndi Kleen TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type); 13370997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13380997a266SAndi Kleen PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config); 13390997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13400997a266SAndi Kleen 13410997a266SAndi Kleen /* branch-misses - ditto */ 13420997a266SAndi Kleen evsel = evsel__next(evsel); 13430997a266SAndi Kleen TEST_ASSERT_VAL("wrong config", 13440997a266SAndi Kleen PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config); 13450997a266SAndi Kleen TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive); 13460997a266SAndi Kleen 13477741e03eSIan Rogers return TEST_OK; 13480997a266SAndi Kleen } 134963503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist) 1350ec32398cSJacob Shin { 1351515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1352ec32398cSJacob Shin 13536484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13541fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13551fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1356ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == 13571fc632ceSJiri Olsa evsel->core.attr.bp_type); 1358ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 == 13591fc632ceSJiri Olsa evsel->core.attr.bp_len); 1360ec32398cSJacob Shin 13617741e03eSIan Rogers return TEST_OK; 1362ec32398cSJacob Shin } 1363ec32398cSJacob Shin 136463503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist) 1365ec32398cSJacob Shin { 1366515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1367ec32398cSJacob Shin 13686484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 13691fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type); 13701fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config); 1371ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W == 13721fc632ceSJiri Olsa evsel->core.attr.bp_type); 1373ec32398cSJacob Shin TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 == 13741fc632ceSJiri Olsa evsel->core.attr.bp_len); 1375ec32398cSJacob Shin 13767741e03eSIan Rogers return TEST_OK; 1377ec32398cSJacob Shin } 1378ec32398cSJacob Shin 1379ec32398cSJacob Shin static int 138063503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist) 1381ec32398cSJacob Shin { 1382515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1383ec32398cSJacob Shin 13841fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 13851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 13861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv); 13871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip); 1388ec32398cSJacob Shin 1389ec32398cSJacob Shin return test__checkevent_breakpoint_rw(evlist); 1390ec32398cSJacob Shin } 1391ec32398cSJacob Shin 139263503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist) 1393ddd83c97SJiri Olsa { 1394515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1395ddd83c97SJiri Olsa 13966484d2f9SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 13971fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1398ddd83c97SJiri Olsa TEST_ASSERT_VAL("wrong config", 13991fc632ceSJiri Olsa PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config); 14007741e03eSIan Rogers return TEST_OK; 1401ddd83c97SJiri Olsa } 1402ddd83c97SJiri Olsa 140363503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist) 140410bf358aSWang Nan { 1405515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 140610bf358aSWang Nan 1407ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn")); 14087741e03eSIan Rogers return TEST_OK; 140910bf358aSWang Nan } 141010bf358aSWang Nan 141163503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist) 141210bf358aSWang Nan { 1413515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 141410bf358aSWang Nan 1415ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu")); 14167741e03eSIan Rogers return TEST_OK; 141710bf358aSWang Nan } 141810bf358aSWang Nan 141963503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist) 142010bf358aSWang Nan { 1421515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 142210bf358aSWang Nan 1423ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu")); 14247741e03eSIan Rogers return TEST_OK; 142510bf358aSWang Nan } 142610bf358aSWang Nan 142763503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist) 142843d0b978SWang Nan { 1429515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 143043d0b978SWang Nan 1431ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu")); 14327741e03eSIan Rogers return TEST_OK; 143343d0b978SWang Nan } 143410bf358aSWang Nan 1435*8f8c1068SIan Rogers static bool test__pmu_cpu_valid(void) 1436*8f8c1068SIan Rogers { 1437*8f8c1068SIan Rogers return !!perf_pmu__find("cpu"); 1438*8f8c1068SIan Rogers } 1439*8f8c1068SIan Rogers 144016ddcfbfSJiri Olsa static bool test__intel_pt_valid(void) 144116ddcfbfSJiri Olsa { 144216ddcfbfSJiri Olsa return !!perf_pmu__find("intel_pt"); 144316ddcfbfSJiri Olsa } 144416ddcfbfSJiri Olsa 144563503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist) 1446b3f58c8dSArnaldo Carvalho de Melo { 1447515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1448b3f58c8dSArnaldo Carvalho de Melo 1449ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u")); 14507741e03eSIan Rogers return TEST_OK; 1451b3f58c8dSArnaldo Carvalho de Melo } 1452b3f58c8dSArnaldo Carvalho de Melo 145363503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist) 145406dc5bf2SAlexey Budankov { 1455515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 145606dc5bf2SAlexey Budankov 1457ce1d3bc2SArnaldo Carvalho de Melo TEST_ASSERT_VAL("wrong complex name parsing", evsel__name_is(evsel, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks")); 14587741e03eSIan Rogers return TEST_OK; 145906dc5bf2SAlexey Budankov } 146006dc5bf2SAlexey Budankov 14613a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist) 14623a6c51e4SJiri Olsa { 14633a6c51e4SJiri Olsa struct evsel *evsel = evlist__first(evlist); 14643a6c51e4SJiri Olsa 14653a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 14663a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 14673a6c51e4SJiri Olsa TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 14687741e03eSIan Rogers return TEST_OK; 14693a6c51e4SJiri Olsa } 14703a6c51e4SJiri Olsa 147163503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist) 1472714a92d8SJiri Olsa { 1473515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1474714a92d8SJiri Olsa 14751fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14761fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14771fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 14787741e03eSIan Rogers return TEST_OK; 1479714a92d8SJiri Olsa } 1480714a92d8SJiri Olsa 148163503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist) 1482714a92d8SJiri Olsa { 1483515dbe48SJiri Olsa struct evsel *evsel = evlist__first(evlist); 1484714a92d8SJiri Olsa 14851fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE); 14861fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES); 14871fc632ceSJiri Olsa TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 14887741e03eSIan Rogers return TEST_OK; 1489714a92d8SJiri Olsa } 1490714a92d8SJiri Olsa 1491378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 149282ce75d9SJiri Olsa static int count_tracepoints(void) 149382ce75d9SJiri Olsa { 149482ce75d9SJiri Olsa struct dirent *events_ent; 149582ce75d9SJiri Olsa DIR *events_dir; 149682ce75d9SJiri Olsa int cnt = 0; 149782ce75d9SJiri Olsa 14987014e0e3SArnaldo Carvalho de Melo events_dir = tracing_events__opendir(); 149982ce75d9SJiri Olsa 150082ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open events dir", events_dir); 150182ce75d9SJiri Olsa 150282ce75d9SJiri Olsa while ((events_ent = readdir(events_dir))) { 150325a7d914SArnaldo Carvalho de Melo char *sys_path; 150482ce75d9SJiri Olsa struct dirent *sys_ent; 150582ce75d9SJiri Olsa DIR *sys_dir; 150682ce75d9SJiri Olsa 150782ce75d9SJiri Olsa if (!strcmp(events_ent->d_name, ".") 150882ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "..") 150982ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "enable") 151082ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_event") 151182ce75d9SJiri Olsa || !strcmp(events_ent->d_name, "header_page")) 151282ce75d9SJiri Olsa continue; 151382ce75d9SJiri Olsa 151425a7d914SArnaldo Carvalho de Melo sys_path = get_events_file(events_ent->d_name); 151525a7d914SArnaldo Carvalho de Melo TEST_ASSERT_VAL("Can't get sys path", sys_path); 151682ce75d9SJiri Olsa 151782ce75d9SJiri Olsa sys_dir = opendir(sys_path); 151882ce75d9SJiri Olsa TEST_ASSERT_VAL("Can't open sys dir", sys_dir); 151982ce75d9SJiri Olsa 152082ce75d9SJiri Olsa while ((sys_ent = readdir(sys_dir))) { 152182ce75d9SJiri Olsa if (!strcmp(sys_ent->d_name, ".") 152282ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "..") 152382ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "enable") 152482ce75d9SJiri Olsa || !strcmp(sys_ent->d_name, "filter")) 152582ce75d9SJiri Olsa continue; 152682ce75d9SJiri Olsa 152782ce75d9SJiri Olsa cnt++; 152882ce75d9SJiri Olsa } 152982ce75d9SJiri Olsa 153082ce75d9SJiri Olsa closedir(sys_dir); 153125a7d914SArnaldo Carvalho de Melo put_events_file(sys_path); 153282ce75d9SJiri Olsa } 153382ce75d9SJiri Olsa 153482ce75d9SJiri Olsa closedir(events_dir); 153582ce75d9SJiri Olsa return cnt; 153682ce75d9SJiri Olsa } 153782ce75d9SJiri Olsa 153863503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist) 153982ce75d9SJiri Olsa { 154082ce75d9SJiri Olsa TEST_ASSERT_VAL("wrong events count", 15416484d2f9SJiri Olsa count_tracepoints() == evlist->core.nr_entries); 154282ce75d9SJiri Olsa 154382ce75d9SJiri Olsa return test__checkevent_tracepoint_multi(evlist); 154482ce75d9SJiri Olsa } 1545378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */ 154682ce75d9SJiri Olsa 15472541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist) 15482541cb63SJin Yao { 15492541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 15502541cb63SJin Yao 15512541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 15522541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15532541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 15547741e03eSIan Rogers return TEST_OK; 15552541cb63SJin Yao } 15562541cb63SJin Yao 15572541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist) 15582541cb63SJin Yao { 15592541cb63SJin Yao struct evsel *evsel, *leader; 15602541cb63SJin Yao 15612541cb63SJin Yao evsel = leader = evlist__first(evlist); 15622541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15632541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15642541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1565fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15662541cb63SJin Yao 15672541cb63SJin Yao evsel = evsel__next(evsel); 15682541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15692541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config); 1570fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15717741e03eSIan Rogers return TEST_OK; 15722541cb63SJin Yao } 15732541cb63SJin Yao 15742541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist) 15752541cb63SJin Yao { 15762541cb63SJin Yao struct evsel *evsel, *leader; 15772541cb63SJin Yao 15782541cb63SJin Yao evsel = leader = evlist__first(evlist); 15792541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 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)); 15822541cb63SJin Yao 15832541cb63SJin Yao evsel = evsel__next(evsel); 15842541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15852541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1586fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15877741e03eSIan Rogers return TEST_OK; 15882541cb63SJin Yao } 15892541cb63SJin Yao 15902541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist) 15912541cb63SJin Yao { 15922541cb63SJin Yao struct evsel *evsel, *leader; 15932541cb63SJin Yao 15942541cb63SJin Yao evsel = leader = evlist__first(evlist); 15952541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 15962541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 15972541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1598fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 15992541cb63SJin Yao 16002541cb63SJin Yao evsel = evsel__next(evsel); 16012541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type); 1602fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 16037741e03eSIan Rogers return TEST_OK; 16042541cb63SJin Yao } 16052541cb63SJin Yao 16062541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist) 16072541cb63SJin Yao { 16082541cb63SJin Yao struct evsel *evsel, *leader; 16092541cb63SJin Yao 16102541cb63SJin Yao evsel = leader = evlist__first(evlist); 16112541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 16122541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16132541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config); 1614fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 16152541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user); 16162541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel); 16172541cb63SJin Yao 16182541cb63SJin Yao evsel = evsel__next(evsel); 16192541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16202541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config); 1621fba7c866SJiri Olsa TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader)); 16222541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user); 16232541cb63SJin Yao TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel); 16247741e03eSIan Rogers return TEST_OK; 16252541cb63SJin Yao } 16262541cb63SJin Yao 16272541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist) 16282541cb63SJin Yao { 16292541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16302541cb63SJin Yao 1631490e9a8fSJin Yao if (!perf_pmu__hybrid_mounted("cpu_atom")) { 1632490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 1633490e9a8fSJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 1634490e9a8fSJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16357741e03eSIan Rogers return TEST_OK; 1636490e9a8fSJin Yao } 1637490e9a8fSJin Yao 16382541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); 16392541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16402541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16412541cb63SJin Yao 16422541cb63SJin Yao /* The type of second event is randome value */ 16432541cb63SJin Yao evsel = evsel__next(evsel); 16442541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16457741e03eSIan Rogers return TEST_OK; 16462541cb63SJin Yao } 16472541cb63SJin Yao 16482541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist) 16492541cb63SJin Yao { 16502541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16512541cb63SJin Yao 16522541cb63SJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16532541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type); 16542541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config); 16557741e03eSIan Rogers return TEST_OK; 16562541cb63SJin Yao } 16572541cb63SJin Yao 16582541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist) 16592541cb63SJin Yao { 16602541cb63SJin Yao struct evsel *evsel = evlist__first(evlist); 16612541cb63SJin Yao 1662490e9a8fSJin Yao TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); 16632541cb63SJin Yao TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type); 16642541cb63SJin Yao TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff)); 16657741e03eSIan Rogers return TEST_OK; 16662541cb63SJin Yao } 16672541cb63SJin Yao 166823b6339bSArnaldo Carvalho de Melo struct evlist_test { 1669945aea22SJiri Olsa const char *name; 167016ddcfbfSJiri Olsa bool (*valid)(void); 167163503dbaSJiri Olsa int (*check)(struct evlist *evlist); 1672945aea22SJiri Olsa }; 1673945aea22SJiri Olsa 16748252e791SIan Rogers static const struct evlist_test test__events[] = { 1675378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1676615b8f99SAlexander Yarygin { 167743f322b4SRiku Voipio .name = "syscalls:sys_enter_openat", 1678945aea22SJiri Olsa .check = test__checkevent_tracepoint, 16798252e791SIan Rogers /* 0 */ 1680945aea22SJiri Olsa }, 1681615b8f99SAlexander Yarygin { 1682945aea22SJiri Olsa .name = "syscalls:*", 1683945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi, 16848252e791SIan Rogers /* 1 */ 1685945aea22SJiri Olsa }, 1686378ef0f5SIan Rogers #endif 1687615b8f99SAlexander Yarygin { 1688945aea22SJiri Olsa .name = "r1a", 1689945aea22SJiri Olsa .check = test__checkevent_raw, 16908252e791SIan Rogers /* 2 */ 1691945aea22SJiri Olsa }, 1692615b8f99SAlexander Yarygin { 1693945aea22SJiri Olsa .name = "1:1", 1694945aea22SJiri Olsa .check = test__checkevent_numeric, 16958252e791SIan Rogers /* 3 */ 1696945aea22SJiri Olsa }, 1697615b8f99SAlexander Yarygin { 1698945aea22SJiri Olsa .name = "instructions", 1699945aea22SJiri Olsa .check = test__checkevent_symbolic_name, 17008252e791SIan Rogers /* 4 */ 1701945aea22SJiri Olsa }, 1702615b8f99SAlexander Yarygin { 1703945aea22SJiri Olsa .name = "cycles/period=100000,config2/", 1704945aea22SJiri Olsa .check = test__checkevent_symbolic_name_config, 17058252e791SIan Rogers /* 5 */ 1706945aea22SJiri Olsa }, 1707615b8f99SAlexander Yarygin { 1708945aea22SJiri Olsa .name = "faults", 1709945aea22SJiri Olsa .check = test__checkevent_symbolic_alias, 17108252e791SIan Rogers /* 6 */ 1711945aea22SJiri Olsa }, 1712615b8f99SAlexander Yarygin { 1713945aea22SJiri Olsa .name = "L1-dcache-load-miss", 1714945aea22SJiri Olsa .check = test__checkevent_genhw, 17158252e791SIan Rogers /* 7 */ 1716945aea22SJiri Olsa }, 1717615b8f99SAlexander Yarygin { 1718945aea22SJiri Olsa .name = "mem:0", 1719945aea22SJiri Olsa .check = test__checkevent_breakpoint, 17208252e791SIan Rogers /* 8 */ 1721945aea22SJiri Olsa }, 1722615b8f99SAlexander Yarygin { 1723945aea22SJiri Olsa .name = "mem:0:x", 1724945aea22SJiri Olsa .check = test__checkevent_breakpoint_x, 17258252e791SIan Rogers /* 9 */ 1726945aea22SJiri Olsa }, 1727615b8f99SAlexander Yarygin { 1728945aea22SJiri Olsa .name = "mem:0:r", 1729945aea22SJiri Olsa .check = test__checkevent_breakpoint_r, 17308252e791SIan Rogers /* 0 */ 1731945aea22SJiri Olsa }, 1732615b8f99SAlexander Yarygin { 1733945aea22SJiri Olsa .name = "mem:0:w", 1734945aea22SJiri Olsa .check = test__checkevent_breakpoint_w, 17358252e791SIan Rogers /* 1 */ 1736945aea22SJiri Olsa }, 1737378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1738615b8f99SAlexander Yarygin { 173943f322b4SRiku Voipio .name = "syscalls:sys_enter_openat:k", 1740945aea22SJiri Olsa .check = test__checkevent_tracepoint_modifier, 17418252e791SIan Rogers /* 2 */ 1742945aea22SJiri Olsa }, 1743615b8f99SAlexander Yarygin { 1744945aea22SJiri Olsa .name = "syscalls:*:u", 1745945aea22SJiri Olsa .check = test__checkevent_tracepoint_multi_modifier, 17468252e791SIan Rogers /* 3 */ 1747945aea22SJiri Olsa }, 1748378ef0f5SIan Rogers #endif 1749615b8f99SAlexander Yarygin { 1750945aea22SJiri Olsa .name = "r1a:kp", 1751945aea22SJiri Olsa .check = test__checkevent_raw_modifier, 17528252e791SIan Rogers /* 4 */ 1753945aea22SJiri Olsa }, 1754615b8f99SAlexander Yarygin { 1755945aea22SJiri Olsa .name = "1:1:hp", 1756945aea22SJiri Olsa .check = test__checkevent_numeric_modifier, 17578252e791SIan Rogers /* 5 */ 1758945aea22SJiri Olsa }, 1759615b8f99SAlexander Yarygin { 1760945aea22SJiri Olsa .name = "instructions:h", 1761945aea22SJiri Olsa .check = test__checkevent_symbolic_name_modifier, 17628252e791SIan Rogers /* 6 */ 1763945aea22SJiri Olsa }, 1764615b8f99SAlexander Yarygin { 1765945aea22SJiri Olsa .name = "faults:u", 1766945aea22SJiri Olsa .check = test__checkevent_symbolic_alias_modifier, 17678252e791SIan Rogers /* 7 */ 1768945aea22SJiri Olsa }, 1769615b8f99SAlexander Yarygin { 1770945aea22SJiri Olsa .name = "L1-dcache-load-miss:kp", 1771945aea22SJiri Olsa .check = test__checkevent_genhw_modifier, 17728252e791SIan Rogers /* 8 */ 1773945aea22SJiri Olsa }, 1774615b8f99SAlexander Yarygin { 1775945aea22SJiri Olsa .name = "mem:0:u", 1776945aea22SJiri Olsa .check = test__checkevent_breakpoint_modifier, 17778252e791SIan Rogers /* 9 */ 1778945aea22SJiri Olsa }, 1779615b8f99SAlexander Yarygin { 1780945aea22SJiri Olsa .name = "mem:0:x:k", 1781945aea22SJiri Olsa .check = test__checkevent_breakpoint_x_modifier, 17828252e791SIan Rogers /* 0 */ 1783945aea22SJiri Olsa }, 1784615b8f99SAlexander Yarygin { 1785945aea22SJiri Olsa .name = "mem:0:r:hp", 1786945aea22SJiri Olsa .check = test__checkevent_breakpoint_r_modifier, 17878252e791SIan Rogers /* 1 */ 1788945aea22SJiri Olsa }, 1789615b8f99SAlexander Yarygin { 1790945aea22SJiri Olsa .name = "mem:0:w:up", 1791945aea22SJiri Olsa .check = test__checkevent_breakpoint_w_modifier, 17928252e791SIan Rogers /* 2 */ 1793945aea22SJiri Olsa }, 1794378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1795615b8f99SAlexander Yarygin { 179643f322b4SRiku Voipio .name = "r1,syscalls:sys_enter_openat:k,1:1:hp", 1797945aea22SJiri Olsa .check = test__checkevent_list, 17988252e791SIan Rogers /* 3 */ 1799945aea22SJiri Olsa }, 1800378ef0f5SIan Rogers #endif 1801615b8f99SAlexander Yarygin { 1802945aea22SJiri Olsa .name = "instructions:G", 1803945aea22SJiri Olsa .check = test__checkevent_exclude_host_modifier, 18048252e791SIan Rogers /* 4 */ 1805945aea22SJiri Olsa }, 1806615b8f99SAlexander Yarygin { 1807945aea22SJiri Olsa .name = "instructions:H", 1808945aea22SJiri Olsa .check = test__checkevent_exclude_guest_modifier, 18098252e791SIan Rogers /* 5 */ 1810945aea22SJiri Olsa }, 1811615b8f99SAlexander Yarygin { 1812945aea22SJiri Olsa .name = "mem:0:rw", 1813945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw, 18148252e791SIan Rogers /* 6 */ 1815945aea22SJiri Olsa }, 1816615b8f99SAlexander Yarygin { 1817945aea22SJiri Olsa .name = "mem:0:rw:kp", 1818945aea22SJiri Olsa .check = test__checkevent_breakpoint_rw_modifier, 18198252e791SIan Rogers /* 7 */ 1820945aea22SJiri Olsa }, 1821615b8f99SAlexander Yarygin { 1822945aea22SJiri Olsa .name = "{instructions:k,cycles:upp}", 1823945aea22SJiri Olsa .check = test__group1, 18248252e791SIan Rogers /* 8 */ 1825945aea22SJiri Olsa }, 1826615b8f99SAlexander Yarygin { 1827945aea22SJiri Olsa .name = "{faults:k,cache-references}:u,cycles:k", 1828945aea22SJiri Olsa .check = test__group2, 18298252e791SIan Rogers /* 9 */ 1830945aea22SJiri Olsa }, 1831378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1832615b8f99SAlexander Yarygin { 183343f322b4SRiku Voipio .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", 1834945aea22SJiri Olsa .check = test__group3, 18358252e791SIan Rogers /* 0 */ 1836945aea22SJiri Olsa }, 1837378ef0f5SIan Rogers #endif 1838615b8f99SAlexander Yarygin { 1839945aea22SJiri Olsa .name = "{cycles:u,instructions:kp}:p", 1840945aea22SJiri Olsa .check = test__group4, 18418252e791SIan Rogers /* 1 */ 1842945aea22SJiri Olsa }, 1843615b8f99SAlexander Yarygin { 1844945aea22SJiri Olsa .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", 1845945aea22SJiri Olsa .check = test__group5, 18468252e791SIan Rogers /* 2 */ 1847945aea22SJiri Olsa }, 1848378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT 1849615b8f99SAlexander Yarygin { 185082ce75d9SJiri Olsa .name = "*:*", 185182ce75d9SJiri Olsa .check = test__all_tracepoints, 18528252e791SIan Rogers /* 3 */ 185382ce75d9SJiri Olsa }, 1854378ef0f5SIan Rogers #endif 1855615b8f99SAlexander Yarygin { 18565a30a99fSJiri Olsa .name = "{cycles,cache-misses:G}:H", 18575a30a99fSJiri Olsa .check = test__group_gh1, 18588252e791SIan Rogers /* 4 */ 18595a30a99fSJiri Olsa }, 1860615b8f99SAlexander Yarygin { 18615a30a99fSJiri Olsa .name = "{cycles,cache-misses:H}:G", 18625a30a99fSJiri Olsa .check = test__group_gh2, 18638252e791SIan Rogers /* 5 */ 18645a30a99fSJiri Olsa }, 1865615b8f99SAlexander Yarygin { 18665a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:u", 18675a30a99fSJiri Olsa .check = test__group_gh3, 18688252e791SIan Rogers /* 6 */ 18695a30a99fSJiri Olsa }, 1870615b8f99SAlexander Yarygin { 18715a30a99fSJiri Olsa .name = "{cycles:G,cache-misses:H}:uG", 18725a30a99fSJiri Olsa .check = test__group_gh4, 18738252e791SIan Rogers /* 7 */ 18745a30a99fSJiri Olsa }, 1875615b8f99SAlexander Yarygin { 1876a9f93f97SJiri Olsa .name = "{cycles,cache-misses,branch-misses}:S", 1877a9f93f97SJiri Olsa .check = test__leader_sample1, 18788252e791SIan Rogers /* 8 */ 1879a9f93f97SJiri Olsa }, 1880615b8f99SAlexander Yarygin { 1881a9f93f97SJiri Olsa .name = "{instructions,branch-misses}:Su", 1882a9f93f97SJiri Olsa .check = test__leader_sample2, 18838252e791SIan Rogers /* 9 */ 1884a9f93f97SJiri Olsa }, 1885615b8f99SAlexander Yarygin { 1886c9ee780fSMichael Ellerman .name = "instructions:uDp", 1887c9ee780fSMichael Ellerman .check = test__checkevent_pinned_modifier, 18888252e791SIan Rogers /* 0 */ 1889c9ee780fSMichael Ellerman }, 1890615b8f99SAlexander Yarygin { 1891c9ee780fSMichael Ellerman .name = "{cycles,cache-misses,branch-misses}:D", 1892c9ee780fSMichael Ellerman .check = test__pinned_group, 18938252e791SIan Rogers /* 1 */ 1894c9ee780fSMichael Ellerman }, 1895ec32398cSJacob Shin { 1896ec32398cSJacob Shin .name = "mem:0/1", 1897ec32398cSJacob Shin .check = test__checkevent_breakpoint_len, 18988252e791SIan Rogers /* 2 */ 1899ec32398cSJacob Shin }, 1900ec32398cSJacob Shin { 1901ec32398cSJacob Shin .name = "mem:0/2:w", 1902ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_w, 19038252e791SIan Rogers /* 3 */ 1904ec32398cSJacob Shin }, 1905ec32398cSJacob Shin { 1906ec32398cSJacob Shin .name = "mem:0/4:rw:u", 1907ec32398cSJacob Shin .check = test__checkevent_breakpoint_len_rw_modifier, 19088252e791SIan Rogers /* 4 */ 1909ec32398cSJacob Shin }, 1910378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT) 1911c0bc8c6dSAlexander Yarygin { 1912c0bc8c6dSAlexander Yarygin .name = "kvm-s390:kvm_s390_create_vm", 1913c0bc8c6dSAlexander Yarygin .check = test__checkevent_tracepoint, 191453fe307dSThomas Richter .valid = kvm_s390_create_vm_valid, 19158252e791SIan Rogers /* 0 */ 1916c0bc8c6dSAlexander Yarygin }, 1917c0bc8c6dSAlexander Yarygin #endif 1918a1e12da4SJiri Olsa { 1919a1e12da4SJiri Olsa .name = "instructions:I", 1920a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier, 19218252e791SIan Rogers /* 5 */ 1922a1e12da4SJiri Olsa }, 1923a1e12da4SJiri Olsa { 1924a1e12da4SJiri Olsa .name = "instructions:kIG", 1925a1e12da4SJiri Olsa .check = test__checkevent_exclude_idle_modifier_1, 19268252e791SIan Rogers /* 6 */ 1927a1e12da4SJiri Olsa }, 1928ddd83c97SJiri Olsa { 1929ddd83c97SJiri Olsa .name = "task-clock:P,cycles", 1930ddd83c97SJiri Olsa .check = test__checkevent_precise_max_modifier, 19318252e791SIan Rogers /* 7 */ 1932ddd83c97SJiri Olsa }, 193310bf358aSWang Nan { 193410bf358aSWang Nan .name = "instructions/name=insn/", 193510bf358aSWang Nan .check = test__checkevent_config_symbol, 19368252e791SIan Rogers /* 8 */ 193710bf358aSWang Nan }, 193810bf358aSWang Nan { 193910bf358aSWang Nan .name = "r1234/name=rawpmu/", 194010bf358aSWang Nan .check = test__checkevent_config_raw, 19418252e791SIan Rogers /* 9 */ 194210bf358aSWang Nan }, 194310bf358aSWang Nan { 194410bf358aSWang Nan .name = "4:0x6530160/name=numpmu/", 194510bf358aSWang Nan .check = test__checkevent_config_num, 19468252e791SIan Rogers /* 0 */ 194710bf358aSWang Nan }, 194843d0b978SWang Nan { 194943d0b978SWang Nan .name = "L1-dcache-misses/name=cachepmu/", 195043d0b978SWang Nan .check = test__checkevent_config_cache, 19518252e791SIan Rogers /* 1 */ 195243d0b978SWang Nan }, 1953b3f58c8dSArnaldo Carvalho de Melo { 1954b3f58c8dSArnaldo Carvalho de Melo .name = "intel_pt//u", 195516ddcfbfSJiri Olsa .valid = test__intel_pt_valid, 1956b3f58c8dSArnaldo Carvalho de Melo .check = test__intel_pt, 19578252e791SIan Rogers /* 2 */ 1958b3f58c8dSArnaldo Carvalho de Melo }, 195906dc5bf2SAlexey Budankov { 196006dc5bf2SAlexey Budankov .name = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk", 196106dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 19628252e791SIan Rogers /* 3 */ 1963714a92d8SJiri Olsa }, 1964714a92d8SJiri Olsa { 1965714a92d8SJiri Olsa .name = "cycles//u", 1966714a92d8SJiri Olsa .check = test__sym_event_slash, 19678252e791SIan Rogers /* 4 */ 1968714a92d8SJiri Olsa }, 1969714a92d8SJiri Olsa { 1970714a92d8SJiri Olsa .name = "cycles:k", 1971714a92d8SJiri Olsa .check = test__sym_event_dc, 19728252e791SIan Rogers /* 5 */ 19730997a266SAndi Kleen }, 19740997a266SAndi Kleen { 19750997a266SAndi Kleen .name = "instructions:uep", 19760997a266SAndi Kleen .check = test__checkevent_exclusive_modifier, 19778252e791SIan Rogers /* 6 */ 19780997a266SAndi Kleen }, 19790997a266SAndi Kleen { 19800997a266SAndi Kleen .name = "{cycles,cache-misses,branch-misses}:e", 19810997a266SAndi Kleen .check = test__exclusive_group, 19828252e791SIan Rogers /* 7 */ 19830997a266SAndi Kleen }, 1984945aea22SJiri Olsa }; 1985945aea22SJiri Olsa 19868252e791SIan Rogers static const struct evlist_test test__events_pmu[] = { 1987615b8f99SAlexander Yarygin { 1988945aea22SJiri Olsa .name = "cpu/config=10,config1,config2=3,period=1000/u", 1989*8f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 1990945aea22SJiri Olsa .check = test__checkevent_pmu, 19918252e791SIan Rogers /* 0 */ 1992945aea22SJiri Olsa }, 1993615b8f99SAlexander Yarygin { 1994945aea22SJiri Olsa .name = "cpu/config=1,name=krava/u,cpu/config=2/u", 1995*8f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 1996945aea22SJiri Olsa .check = test__checkevent_pmu_name, 19978252e791SIan Rogers /* 1 */ 1998945aea22SJiri Olsa }, 199971ef150eSKan Liang { 200071ef150eSKan Liang .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/", 2001*8f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 200271ef150eSKan Liang .check = test__checkevent_pmu_partial_time_callgraph, 20038252e791SIan Rogers /* 2 */ 200471ef150eSKan Liang }, 200506dc5bf2SAlexey Budankov { 2006a6f39cecSSandipan Das .name = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp", 2007*8f8c1068SIan Rogers .valid = test__pmu_cpu_valid, 200806dc5bf2SAlexey Budankov .check = test__checkevent_complex_name, 20098252e791SIan Rogers /* 3 */ 20103a6c51e4SJiri Olsa }, 20113a6c51e4SJiri Olsa { 20123a6c51e4SJiri Olsa .name = "software/r1a/", 20133a6c51e4SJiri Olsa .check = test__checkevent_raw_pmu, 20148252e791SIan Rogers /* 4 */ 20153a6c51e4SJiri Olsa }, 2016c33cdf54SJiri Olsa { 2017c33cdf54SJiri Olsa .name = "software/r0x1a/", 2018c33cdf54SJiri Olsa .check = test__checkevent_raw_pmu, 20198252e791SIan Rogers /* 5 */ 2020c33cdf54SJiri Olsa }, 2021945aea22SJiri Olsa }; 2022945aea22SJiri Olsa 202323b6339bSArnaldo Carvalho de Melo struct terms_test { 2024945aea22SJiri Olsa const char *str; 2025945aea22SJiri Olsa int (*check)(struct list_head *terms); 2026945aea22SJiri Olsa }; 2027945aea22SJiri Olsa 2028b58eca40SIan Rogers static const struct terms_test test__terms[] = { 2029945aea22SJiri Olsa [0] = { 2030204e7c49SRob Herring .str = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead", 2031945aea22SJiri Olsa .check = test__checkterms_simple, 2032945aea22SJiri Olsa }, 2033945aea22SJiri Olsa }; 2034945aea22SJiri Olsa 20358252e791SIan Rogers static const struct evlist_test test__hybrid_events[] = { 20362541cb63SJin Yao { 20372541cb63SJin Yao .name = "cpu_core/cpu-cycles/", 20382541cb63SJin Yao .check = test__hybrid_hw_event_with_pmu, 20398252e791SIan Rogers /* 0 */ 20402541cb63SJin Yao }, 20412541cb63SJin Yao { 20422541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu_core/instructions/}", 20432541cb63SJin Yao .check = test__hybrid_hw_group_event, 20448252e791SIan Rogers /* 1 */ 20452541cb63SJin Yao }, 20462541cb63SJin Yao { 20472541cb63SJin Yao .name = "{cpu-clock,cpu_core/cpu-cycles/}", 20482541cb63SJin Yao .check = test__hybrid_sw_hw_group_event, 20498252e791SIan Rogers /* 2 */ 20502541cb63SJin Yao }, 20512541cb63SJin Yao { 20522541cb63SJin Yao .name = "{cpu_core/cpu-cycles/,cpu-clock}", 20532541cb63SJin Yao .check = test__hybrid_hw_sw_group_event, 20548252e791SIan Rogers /* 3 */ 20552541cb63SJin Yao }, 20562541cb63SJin Yao { 20572541cb63SJin Yao .name = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}", 20582541cb63SJin Yao .check = test__hybrid_group_modifier1, 20598252e791SIan Rogers /* 4 */ 20602541cb63SJin Yao }, 20612541cb63SJin Yao { 20622541cb63SJin Yao .name = "r1a", 20632541cb63SJin Yao .check = test__hybrid_raw1, 20648252e791SIan Rogers /* 5 */ 20652541cb63SJin Yao }, 20662541cb63SJin Yao { 20672541cb63SJin Yao .name = "cpu_core/r1a/", 20682541cb63SJin Yao .check = test__hybrid_raw2, 20698252e791SIan Rogers /* 6 */ 20702541cb63SJin Yao }, 20712541cb63SJin Yao { 20722541cb63SJin Yao .name = "cpu_core/config=10,config1,config2=3,period=1000/u", 20732541cb63SJin Yao .check = test__checkevent_pmu, 20748252e791SIan Rogers /* 7 */ 20752541cb63SJin Yao }, 20762541cb63SJin Yao { 2077490e9a8fSJin Yao .name = "cpu_core/LLC-loads/", 20782541cb63SJin Yao .check = test__hybrid_cache_event, 20798252e791SIan Rogers /* 8 */ 20802541cb63SJin Yao }, 20812541cb63SJin Yao }; 20822541cb63SJin Yao 20838252e791SIan Rogers static int test_event(const struct evlist_test *e) 2084945aea22SJiri Olsa { 2085a910e466SIan Rogers struct parse_events_error err; 208663503dbaSJiri Olsa struct evlist *evlist; 2087945aea22SJiri Olsa int ret; 2088945aea22SJiri Olsa 208916ddcfbfSJiri Olsa if (e->valid && !e->valid()) { 20907741e03eSIan Rogers pr_debug("... SKIP\n"); 20917741e03eSIan Rogers return TEST_OK; 209216ddcfbfSJiri Olsa } 209316ddcfbfSJiri Olsa 20940f98b11cSJiri Olsa evlist = evlist__new(); 20957741e03eSIan Rogers if (evlist == NULL) { 20967741e03eSIan Rogers pr_err("Failed allocation"); 20977741e03eSIan Rogers return TEST_FAIL; 20987741e03eSIan Rogers } 209907eafd4eSIan Rogers parse_events_error__init(&err); 2100933ccf20SJiri Olsa ret = parse_events(evlist, e->name, &err); 2101945aea22SJiri Olsa if (ret) { 2102933ccf20SJiri Olsa pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2103933ccf20SJiri Olsa e->name, ret, err.str); 21046c191289SIan Rogers parse_events_error__print(&err, e->name); 21057741e03eSIan Rogers ret = TEST_FAIL; 21067741e03eSIan Rogers if (strstr(err.str, "can't access trace events")) 21077741e03eSIan Rogers ret = TEST_SKIP; 21082d4352c0SArnaldo Carvalho de Melo } else { 21092d4352c0SArnaldo Carvalho de Melo ret = e->check(evlist); 2110945aea22SJiri Olsa } 211107eafd4eSIan Rogers parse_events_error__exit(&err); 2112c12995a5SJiri Olsa evlist__delete(evlist); 2113945aea22SJiri Olsa 2114945aea22SJiri Olsa return ret; 2115945aea22SJiri Olsa } 2116945aea22SJiri Olsa 2117b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str) 2118b4a7276cSJohn Garry { 2119b4a7276cSJohn Garry struct parse_events_error err; 2120b4a7276cSJohn Garry struct evlist *evlist; 2121b4a7276cSJohn Garry int ret; 2122b4a7276cSJohn Garry 2123b4a7276cSJohn Garry evlist = evlist__new(); 2124b4a7276cSJohn Garry if (!evlist) 2125b4a7276cSJohn Garry return -ENOMEM; 2126b4a7276cSJohn Garry 2127b4a7276cSJohn Garry parse_events_error__init(&err); 2128b4a7276cSJohn Garry perf_pmu__test_parse_init(); 2129a4c7d7c5SIan Rogers ret = __parse_events(evlist, str, &err, &perf_pmu__fake, /*warn_if_reordered=*/true); 2130b4a7276cSJohn Garry if (ret) { 2131b4a7276cSJohn Garry pr_debug("failed to parse event '%s', err %d, str '%s'\n", 2132b4a7276cSJohn Garry str, ret, err.str); 2133b4a7276cSJohn Garry parse_events_error__print(&err, str); 2134b4a7276cSJohn Garry } 2135b4a7276cSJohn Garry 2136b4a7276cSJohn Garry parse_events_error__exit(&err); 2137b4a7276cSJohn Garry evlist__delete(evlist); 2138b4a7276cSJohn Garry 2139b4a7276cSJohn Garry return ret; 2140b4a7276cSJohn Garry } 2141b4a7276cSJohn Garry 21427741e03eSIan Rogers static int combine_test_results(int existing, int latest) 21437741e03eSIan Rogers { 21447741e03eSIan Rogers if (existing == TEST_FAIL) 21457741e03eSIan Rogers return TEST_FAIL; 21467741e03eSIan Rogers if (existing == TEST_SKIP) 21477741e03eSIan Rogers return latest == TEST_OK ? TEST_SKIP : latest; 21487741e03eSIan Rogers return latest; 21497741e03eSIan Rogers } 21507741e03eSIan Rogers 21518252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt) 2152945aea22SJiri Olsa { 21537741e03eSIan Rogers int ret = TEST_OK; 2154945aea22SJiri Olsa 21558252e791SIan Rogers for (int i = 0; i < cnt; i++) { 21568252e791SIan Rogers const struct evlist_test *e = &events[i]; 21577741e03eSIan Rogers int test_ret; 2158945aea22SJiri Olsa 21597741e03eSIan Rogers pr_debug("running test %d '%s'\n", i, e->name); 21607741e03eSIan Rogers test_ret = test_event(e); 21617741e03eSIan Rogers if (test_ret != TEST_OK) { 21627741e03eSIan Rogers pr_debug("Event test failure: test %d '%s'", i, e->name); 21637741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 21647741e03eSIan Rogers } 2165945aea22SJiri Olsa } 2166945aea22SJiri Olsa 21677741e03eSIan Rogers return ret; 21687741e03eSIan Rogers } 21697741e03eSIan Rogers 21707741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 21717741e03eSIan Rogers { 21727741e03eSIan Rogers return test_events(test__events, ARRAY_SIZE(test__events)); 2173945aea22SJiri Olsa } 2174945aea22SJiri Olsa 2175b58eca40SIan Rogers static int test_term(const struct terms_test *t) 2176945aea22SJiri Olsa { 2177c549aca5SDavid Ahern struct list_head terms; 2178945aea22SJiri Olsa int ret; 2179945aea22SJiri Olsa 2180c549aca5SDavid Ahern INIT_LIST_HEAD(&terms); 2181945aea22SJiri Olsa 21824929e95aSJiri Olsa /* 21834929e95aSJiri Olsa * The perf_pmu__test_parse_init prepares perf_pmu_events_list 21844929e95aSJiri Olsa * which gets freed in parse_events_terms. 21854929e95aSJiri Olsa */ 21864929e95aSJiri Olsa if (perf_pmu__test_parse_init()) 21874929e95aSJiri Olsa return -1; 21884929e95aSJiri Olsa 2189c549aca5SDavid Ahern ret = parse_events_terms(&terms, t->str); 2190945aea22SJiri Olsa if (ret) { 2191945aea22SJiri Olsa pr_debug("failed to parse terms '%s', err %d\n", 2192945aea22SJiri Olsa t->str , ret); 2193945aea22SJiri Olsa return ret; 2194945aea22SJiri Olsa } 2195945aea22SJiri Olsa 2196c549aca5SDavid Ahern ret = t->check(&terms); 2197682dc24cSArnaldo Carvalho de Melo parse_events_terms__purge(&terms); 2198945aea22SJiri Olsa 2199945aea22SJiri Olsa return ret; 2200945aea22SJiri Olsa } 2201945aea22SJiri Olsa 2202b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt) 2203945aea22SJiri Olsa { 2204945aea22SJiri Olsa int ret = 0; 2205945aea22SJiri Olsa 2206b58eca40SIan Rogers for (int i = 0; i < cnt; i++) { 2207b58eca40SIan Rogers const struct terms_test *t = &terms[i]; 2208945aea22SJiri Olsa 2209945aea22SJiri Olsa pr_debug("running test %d '%s'\n", i, t->str); 2210945aea22SJiri Olsa ret = test_term(t); 2211945aea22SJiri Olsa if (ret) 2212945aea22SJiri Olsa break; 2213945aea22SJiri Olsa } 2214945aea22SJiri Olsa 2215945aea22SJiri Olsa return ret; 2216945aea22SJiri Olsa } 2217945aea22SJiri Olsa 22187741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 22197741e03eSIan Rogers { 22207741e03eSIan Rogers return test_terms(test__terms, ARRAY_SIZE(test__terms)); 22217741e03eSIan Rogers } 22227741e03eSIan Rogers 22237741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 2224945aea22SJiri Olsa { 22255a52817eSIan Rogers struct perf_pmu *pmu; 22265a52817eSIan Rogers int ret = TEST_OK; 22275a52817eSIan Rogers 22285a52817eSIan Rogers if (list_empty(&pmus)) 22295a52817eSIan Rogers perf_pmu__scan(NULL); 22305a52817eSIan Rogers 22315a52817eSIan Rogers perf_pmus__for_each_pmu(pmu) { 2232945aea22SJiri Olsa struct stat st; 2233945aea22SJiri Olsa char path[PATH_MAX]; 2234945aea22SJiri Olsa struct dirent *ent; 2235945aea22SJiri Olsa DIR *dir; 22365a52817eSIan Rogers int err; 2237945aea22SJiri Olsa 22385a52817eSIan Rogers snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/", 22395a52817eSIan Rogers sysfs__mountpoint(), pmu->name); 22407741e03eSIan Rogers 22415a52817eSIan Rogers err = stat(path, &st); 22425a52817eSIan Rogers if (err) { 22435a52817eSIan Rogers pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path); 22445a52817eSIan Rogers continue; 2245945aea22SJiri Olsa } 2246945aea22SJiri Olsa 2247945aea22SJiri Olsa dir = opendir(path); 2248945aea22SJiri Olsa if (!dir) { 22497741e03eSIan Rogers pr_debug("can't open pmu event dir: %s\n", path); 22505a52817eSIan Rogers ret = combine_test_results(ret, TEST_SKIP); 22515a52817eSIan Rogers continue; 2252945aea22SJiri Olsa } 2253945aea22SJiri Olsa 22547741e03eSIan Rogers while ((ent = readdir(dir))) { 22558252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 22562e2bbc03SArnaldo Carvalho de Melo char name[2 * NAME_MAX + 1 + 12 + 3]; 22577741e03eSIan Rogers int test_ret; 2258945aea22SJiri Olsa 225917a2634bSAndi Kleen /* Names containing . are special and cannot be used directly */ 226017a2634bSAndi Kleen if (strchr(ent->d_name, '.')) 2261945aea22SJiri Olsa continue; 2262945aea22SJiri Olsa 22635a52817eSIan Rogers snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name); 2264945aea22SJiri Olsa 2265945aea22SJiri Olsa e.name = name; 2266945aea22SJiri Olsa e.check = test__checkevent_pmu_events; 2267945aea22SJiri Olsa 22687741e03eSIan Rogers test_ret = test_event(&e); 22697741e03eSIan Rogers if (test_ret != TEST_OK) { 22707741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22717741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22727741e03eSIan Rogers } 22735a52817eSIan Rogers 22745a52817eSIan Rogers if (!is_pmu_core(pmu->name)) 22755a52817eSIan Rogers continue; 22765a52817eSIan Rogers 2277146edff3SIan Rogers /* 2278146edff3SIan Rogers * Names containing '-' are recognized as prefixes and suffixes 2279146edff3SIan Rogers * due to '-' being a legacy PMU separator. This fails when the 2280146edff3SIan Rogers * prefix or suffix collides with an existing legacy token. For 2281146edff3SIan Rogers * example, branch-brs has a prefix (branch) that collides with 2282146edff3SIan Rogers * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix 2283146edff3SIan Rogers * isn't expected after this. As event names in the config 2284146edff3SIan Rogers * slashes are allowed a '-' in the name we check this works 2285146edff3SIan Rogers * above. 2286146edff3SIan Rogers */ 2287146edff3SIan Rogers if (strchr(ent->d_name, '-')) 2288146edff3SIan Rogers continue; 2289146edff3SIan Rogers 22905a52817eSIan Rogers snprintf(name, sizeof(name), "%s:u,%s/event=%s/u", 22915a52817eSIan Rogers ent->d_name, pmu->name, ent->d_name); 2292ffe59788SKan Liang e.name = name; 2293ffe59788SKan Liang e.check = test__checkevent_pmu_events_mix; 22947741e03eSIan Rogers test_ret = test_event(&e); 22957741e03eSIan Rogers if (test_ret != TEST_OK) { 22967741e03eSIan Rogers pr_debug("Test PMU event failed for '%s'", name); 22977741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 22987741e03eSIan Rogers } 2299945aea22SJiri Olsa } 2300945aea22SJiri Olsa 2301945aea22SJiri Olsa closedir(dir); 23025a52817eSIan Rogers } 2303945aea22SJiri Olsa return ret; 2304945aea22SJiri Olsa } 2305945aea22SJiri Olsa 23067741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23077741e03eSIan Rogers { 23087741e03eSIan Rogers return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu)); 23097741e03eSIan Rogers } 23107741e03eSIan Rogers 2311c7a3828dSJin Yao static bool test_alias(char **event, char **alias) 2312c7a3828dSJin Yao { 2313c7a3828dSJin Yao char path[PATH_MAX]; 2314c7a3828dSJin Yao DIR *dir; 2315c7a3828dSJin Yao struct dirent *dent; 2316c7a3828dSJin Yao const char *sysfs = sysfs__mountpoint(); 2317c7a3828dSJin Yao char buf[128]; 2318c7a3828dSJin Yao FILE *file; 2319c7a3828dSJin Yao 2320c7a3828dSJin Yao if (!sysfs) 2321c7a3828dSJin Yao return false; 2322c7a3828dSJin Yao 2323c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs); 2324c7a3828dSJin Yao dir = opendir(path); 2325c7a3828dSJin Yao if (!dir) 2326c7a3828dSJin Yao return false; 2327c7a3828dSJin Yao 2328c7a3828dSJin Yao while ((dent = readdir(dir))) { 2329c7a3828dSJin Yao if (!strcmp(dent->d_name, ".") || 2330c7a3828dSJin Yao !strcmp(dent->d_name, "..")) 2331c7a3828dSJin Yao continue; 2332c7a3828dSJin Yao 2333c7a3828dSJin Yao snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias", 2334c7a3828dSJin Yao sysfs, dent->d_name); 2335c7a3828dSJin Yao 2336c7a3828dSJin Yao if (!file_available(path)) 2337c7a3828dSJin Yao continue; 2338c7a3828dSJin Yao 2339c7a3828dSJin Yao file = fopen(path, "r"); 2340c7a3828dSJin Yao if (!file) 2341c7a3828dSJin Yao continue; 2342c7a3828dSJin Yao 2343c7a3828dSJin Yao if (!fgets(buf, sizeof(buf), file)) { 2344c7a3828dSJin Yao fclose(file); 2345c7a3828dSJin Yao continue; 2346c7a3828dSJin Yao } 2347c7a3828dSJin Yao 2348c7a3828dSJin Yao /* Remove the last '\n' */ 2349c7a3828dSJin Yao buf[strlen(buf) - 1] = 0; 2350c7a3828dSJin Yao 2351c7a3828dSJin Yao fclose(file); 2352c7a3828dSJin Yao *event = strdup(dent->d_name); 2353c7a3828dSJin Yao *alias = strdup(buf); 2354c7a3828dSJin Yao closedir(dir); 2355c7a3828dSJin Yao 2356c7a3828dSJin Yao if (*event == NULL || *alias == NULL) { 2357c7a3828dSJin Yao free(*event); 2358c7a3828dSJin Yao free(*alias); 2359c7a3828dSJin Yao return false; 2360c7a3828dSJin Yao } 2361c7a3828dSJin Yao 2362c7a3828dSJin Yao return true; 2363c7a3828dSJin Yao } 2364c7a3828dSJin Yao 2365c7a3828dSJin Yao closedir(dir); 2366c7a3828dSJin Yao return false; 2367c7a3828dSJin Yao } 2368c7a3828dSJin Yao 23697741e03eSIan Rogers static int test__hybrid(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 23707741e03eSIan Rogers { 23717741e03eSIan Rogers if (!perf_pmu__has_hybrid()) 23727741e03eSIan Rogers return TEST_SKIP; 23737741e03eSIan Rogers 23747741e03eSIan Rogers return test_events(test__hybrid_events, ARRAY_SIZE(test__hybrid_events)); 23757741e03eSIan Rogers } 23767741e03eSIan Rogers 2377c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist) 2378c7a3828dSJin Yao { 2379c7a3828dSJin Yao struct evsel *evsel1 = evlist__first(evlist); 2380c7a3828dSJin Yao struct evsel *evsel2 = evlist__last(evlist); 2381c7a3828dSJin Yao 2382c7a3828dSJin Yao TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type); 2383c7a3828dSJin Yao TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config); 23847741e03eSIan Rogers return TEST_OK; 2385c7a3828dSJin Yao } 2386c7a3828dSJin Yao 23877741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias) 2388c7a3828dSJin Yao { 23898252e791SIan Rogers struct evlist_test e = { .name = NULL, }; 2390c7a3828dSJin Yao char name[2 * NAME_MAX + 20]; 2391c7a3828dSJin Yao 2392c7a3828dSJin Yao snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/", 2393c7a3828dSJin Yao event, alias); 2394c7a3828dSJin Yao 2395c7a3828dSJin Yao e.name = name; 2396c7a3828dSJin Yao e.check = test__checkevent_pmu_events_alias; 2397c7a3828dSJin Yao return test_event(&e); 2398c7a3828dSJin Yao } 2399c7a3828dSJin Yao 24007741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused) 24017741e03eSIan Rogers { 24027741e03eSIan Rogers char *event, *alias; 24037741e03eSIan Rogers int ret; 24047741e03eSIan Rogers 24057741e03eSIan Rogers if (!test_alias(&event, &alias)) 24067741e03eSIan Rogers return TEST_SKIP; 24077741e03eSIan Rogers 24087741e03eSIan Rogers ret = test__pmu_events_alias(event, alias); 24097741e03eSIan Rogers 24107741e03eSIan Rogers free(event); 24117741e03eSIan Rogers free(alias); 24127741e03eSIan Rogers return ret; 24137741e03eSIan Rogers } 24147741e03eSIan Rogers 24157741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused, 24167741e03eSIan Rogers int subtest __maybe_unused) 2417b4a7276cSJohn Garry { 2418b4a7276cSJohn Garry static const char events[][30] = { 2419b4a7276cSJohn Garry "event-hyphen", 2420b4a7276cSJohn Garry "event-two-hyph", 2421b4a7276cSJohn Garry }; 24227741e03eSIan Rogers int ret = TEST_OK; 2423b4a7276cSJohn Garry 24247741e03eSIan Rogers for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) { 24257741e03eSIan Rogers int test_ret = test_event_fake_pmu(&events[i][0]); 24267741e03eSIan Rogers 24277741e03eSIan Rogers if (test_ret != TEST_OK) { 24287741e03eSIan Rogers pr_debug("check_parse_fake %s failed\n", &events[i][0]); 24297741e03eSIan Rogers ret = combine_test_results(ret, test_ret); 2430b4a7276cSJohn Garry } 2431b4a7276cSJohn Garry } 2432b4a7276cSJohn Garry 2433b4a7276cSJohn Garry return ret; 2434b4a7276cSJohn Garry } 2435b4a7276cSJohn Garry 24367741e03eSIan Rogers static struct test_case tests__parse_events[] = { 24377741e03eSIan Rogers TEST_CASE_REASON("Test event parsing", 24387741e03eSIan Rogers events2, 24397741e03eSIan Rogers "permissions"), 24407741e03eSIan Rogers TEST_CASE_REASON("Test parsing of \"hybrid\" CPU events", 24417741e03eSIan Rogers hybrid, 24427741e03eSIan Rogers "not hybrid"), 24437741e03eSIan Rogers TEST_CASE_REASON("Parsing of all PMU events from sysfs", 24447741e03eSIan Rogers pmu_events, 24457741e03eSIan Rogers "permissions"), 24467741e03eSIan Rogers TEST_CASE_REASON("Parsing of given PMU events from sysfs", 24477741e03eSIan Rogers pmu_events2, 24487741e03eSIan Rogers "permissions"), 24497741e03eSIan Rogers TEST_CASE_REASON("Parsing of aliased events from sysfs", alias, 24507741e03eSIan Rogers "no aliases in sysfs"), 24517741e03eSIan Rogers TEST_CASE("Parsing of aliased events", pmu_events_alias2), 24527741e03eSIan Rogers TEST_CASE("Parsing of terms (event modifiers)", terms2), 24537741e03eSIan Rogers { .name = NULL, } 24547741e03eSIan Rogers }; 2455945aea22SJiri Olsa 24567741e03eSIan Rogers struct test_suite suite__parse_events = { 24577741e03eSIan Rogers .desc = "Parse event definition strings", 24587741e03eSIan Rogers .test_cases = tests__parse_events, 24597741e03eSIan Rogers }; 2460