xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 204e7c499f5fa7732144ef9765c195982be72f31)
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"
1076b31a29SArnaldo Carvalho de Melo #include <dirent.h>
11a43783aeSArnaldo Carvalho de Melo #include <errno.h>
12c7a3828dSJin Yao #include "fncache.h"
137a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h>
147a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h>
157a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h>
16877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h>
17f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h>
1820a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h>
19945aea22SJiri Olsa 
20945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
21945aea22SJiri Olsa 			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
22945aea22SJiri Olsa 
23378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
24378ef0f5SIan Rogers 
2553fe307dSThomas Richter #if defined(__s390x__)
2653fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this
274d39c89fSIngo Molnar  * and return success when trace point kvm_s390_create_vm
2853fe307dSThomas Richter  * exists. Otherwise this test always fails.
2953fe307dSThomas Richter  */
3053fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void)
3153fe307dSThomas Richter {
3253fe307dSThomas Richter 	char *eventfile;
3353fe307dSThomas Richter 	bool rc = false;
3453fe307dSThomas Richter 
3553fe307dSThomas Richter 	eventfile = get_events_file("kvm-s390");
3653fe307dSThomas Richter 
3753fe307dSThomas Richter 	if (eventfile) {
3853fe307dSThomas Richter 		DIR *mydir = opendir(eventfile);
3953fe307dSThomas Richter 
4053fe307dSThomas Richter 		if (mydir) {
4153fe307dSThomas Richter 			rc = true;
4253fe307dSThomas Richter 			closedir(mydir);
4353fe307dSThomas Richter 		}
4453fe307dSThomas Richter 		put_events_file(eventfile);
4553fe307dSThomas Richter 	}
4653fe307dSThomas Richter 
4753fe307dSThomas Richter 	return rc;
4853fe307dSThomas Richter }
4953fe307dSThomas Richter #endif
5053fe307dSThomas Richter 
5163503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist)
52945aea22SJiri Olsa {
53515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
54945aea22SJiri Olsa 
556484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
569d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist));
571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
58945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
591fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
617741e03eSIan Rogers 	return TEST_OK;
62945aea22SJiri Olsa }
63945aea22SJiri Olsa 
6463503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist)
65945aea22SJiri Olsa {
6632dcd021SJiri Olsa 	struct evsel *evsel;
67945aea22SJiri Olsa 
686484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
699d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist));
70945aea22SJiri Olsa 
71e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
72945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong type",
731fc632ceSJiri Olsa 			PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
74945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_type",
751fc632ceSJiri Olsa 			PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
76945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_period",
771fc632ceSJiri Olsa 			1 == evsel->core.attr.sample_period);
78945aea22SJiri Olsa 	}
797741e03eSIan Rogers 	return TEST_OK;
80945aea22SJiri Olsa }
81378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
82945aea22SJiri Olsa 
8363503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist)
84945aea22SJiri Olsa {
85515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
86945aea22SJiri Olsa 
876484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
907741e03eSIan Rogers 	return TEST_OK;
91945aea22SJiri Olsa }
92945aea22SJiri Olsa 
9363503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
94945aea22SJiri Olsa {
95515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
96945aea22SJiri Olsa 
976484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
1007741e03eSIan Rogers 	return TEST_OK;
101945aea22SJiri Olsa }
102945aea22SJiri Olsa 
10363503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist)
104945aea22SJiri Olsa {
105515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
106945aea22SJiri Olsa 
1076484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
109945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1101fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
1117741e03eSIan Rogers 	return TEST_OK;
112945aea22SJiri Olsa }
113945aea22SJiri Olsa 
11463503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
115945aea22SJiri Olsa {
116515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
117945aea22SJiri Olsa 
1186484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
120945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1211fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
122ee4c7588SJiri Olsa 	/*
12378e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
124ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
125ee4c7588SJiri Olsa 	 */
126945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong period",
1271fc632ceSJiri Olsa 			0 == evsel->core.attr.sample_period);
128945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1",
1291fc632ceSJiri Olsa 			0 == evsel->core.attr.config1);
130945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2",
1311fc632ceSJiri Olsa 			1 == evsel->core.attr.config2);
1327741e03eSIan Rogers 	return TEST_OK;
133945aea22SJiri Olsa }
134945aea22SJiri Olsa 
13563503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
136945aea22SJiri Olsa {
137515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
138945aea22SJiri Olsa 
1396484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
141945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1421fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
1437741e03eSIan Rogers 	return TEST_OK;
144945aea22SJiri Olsa }
145945aea22SJiri Olsa 
14663503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
147945aea22SJiri Olsa {
148515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
149945aea22SJiri Olsa 
1506484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
1521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config);
1537741e03eSIan Rogers 	return TEST_OK;
154945aea22SJiri Olsa }
155945aea22SJiri Olsa 
15663503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
157945aea22SJiri Olsa {
158515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
159945aea22SJiri Olsa 
1606484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
163945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
1641fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
165945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
1661fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1677741e03eSIan Rogers 	return TEST_OK;
168945aea22SJiri Olsa }
169945aea22SJiri Olsa 
17063503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist)
171945aea22SJiri Olsa {
172515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
173945aea22SJiri Olsa 
1746484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
177945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1781fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
1791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
1807741e03eSIan Rogers 	return TEST_OK;
181945aea22SJiri Olsa }
182945aea22SJiri Olsa 
18363503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
184945aea22SJiri Olsa {
185515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
186945aea22SJiri Olsa 
1876484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
188945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
1891fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
191945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1921fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
193945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
1941fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
1957741e03eSIan Rogers 	return TEST_OK;
196945aea22SJiri Olsa }
197945aea22SJiri Olsa 
19863503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
199945aea22SJiri Olsa {
200515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
201945aea22SJiri Olsa 
2026484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
203945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2041fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
206945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2071fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
208945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2091fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2107741e03eSIan Rogers 	return TEST_OK;
211945aea22SJiri Olsa }
212945aea22SJiri Olsa 
21363503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
214945aea22SJiri Olsa {
215515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
216945aea22SJiri Olsa 
2176484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
218945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2191fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
221945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2221fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
223945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2241fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2257741e03eSIan Rogers 	return TEST_OK;
226945aea22SJiri Olsa }
227945aea22SJiri Olsa 
228378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
22963503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
230945aea22SJiri Olsa {
231515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
232945aea22SJiri Olsa 
2331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
237945aea22SJiri Olsa 
238945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
239945aea22SJiri Olsa }
240945aea22SJiri Olsa 
241945aea22SJiri Olsa static int
24263503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
243945aea22SJiri Olsa {
24432dcd021SJiri Olsa 	struct evsel *evsel;
245945aea22SJiri Olsa 
2466484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
247945aea22SJiri Olsa 
248e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
249945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user",
2501fc632ceSJiri Olsa 				!evsel->core.attr.exclude_user);
251945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel",
2521fc632ceSJiri Olsa 				evsel->core.attr.exclude_kernel);
2531fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2541fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
255945aea22SJiri Olsa 	}
256945aea22SJiri Olsa 
257945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
258945aea22SJiri Olsa }
259378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
260945aea22SJiri Olsa 
26163503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
262945aea22SJiri Olsa {
263515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
264945aea22SJiri Olsa 
2651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
269945aea22SJiri Olsa 
270945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
271945aea22SJiri Olsa }
272945aea22SJiri Olsa 
27363503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
274945aea22SJiri Olsa {
275515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
276945aea22SJiri Olsa 
2771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
281945aea22SJiri Olsa 
282945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
283945aea22SJiri Olsa }
284945aea22SJiri Olsa 
28563503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
286945aea22SJiri Olsa {
287515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
288945aea22SJiri Olsa 
2891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
293945aea22SJiri Olsa 
294945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
295945aea22SJiri Olsa }
296945aea22SJiri Olsa 
29763503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
298945aea22SJiri Olsa {
299515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
300945aea22SJiri Olsa 
3011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
303945aea22SJiri Olsa 
304945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
305945aea22SJiri Olsa }
306945aea22SJiri Olsa 
30763503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
308945aea22SJiri Olsa {
309515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
310945aea22SJiri Olsa 
3111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
3121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
313945aea22SJiri Olsa 
314945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
315945aea22SJiri Olsa }
316945aea22SJiri Olsa 
31763503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
318945aea22SJiri Olsa {
319515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
320945aea22SJiri Olsa 
3211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
325945aea22SJiri Olsa 
326945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
327945aea22SJiri Olsa }
328945aea22SJiri Olsa 
32963503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
330945aea22SJiri Olsa {
331515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
332945aea22SJiri Olsa 
3331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
337945aea22SJiri Olsa 
338945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
339945aea22SJiri Olsa }
340945aea22SJiri Olsa 
34163503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
342a1e12da4SJiri Olsa {
343515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
344a1e12da4SJiri Olsa 
3451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
3481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
352a1e12da4SJiri Olsa 
353a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
354a1e12da4SJiri Olsa }
355a1e12da4SJiri Olsa 
35663503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
357a1e12da4SJiri Olsa {
358515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
359a1e12da4SJiri Olsa 
3601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
3631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
367a1e12da4SJiri Olsa 
368a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
369a1e12da4SJiri Olsa }
370a1e12da4SJiri Olsa 
37163503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
372945aea22SJiri Olsa {
373515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
374945aea22SJiri Olsa 
375945aea22SJiri Olsa 
3761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
380945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3818ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:u"));
382945aea22SJiri Olsa 
383945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
384945aea22SJiri Olsa }
385945aea22SJiri Olsa 
38663503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
387945aea22SJiri Olsa {
388515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
389945aea22SJiri Olsa 
3901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
394945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3958ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:x:k"));
396945aea22SJiri Olsa 
397945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
398945aea22SJiri Olsa }
399945aea22SJiri Olsa 
40063503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
401945aea22SJiri Olsa {
402515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
403945aea22SJiri Olsa 
4041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
408945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4098ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:r:hp"));
410945aea22SJiri Olsa 
411945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
412945aea22SJiri Olsa }
413945aea22SJiri Olsa 
41463503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
415945aea22SJiri Olsa {
416515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
417945aea22SJiri Olsa 
4181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
422945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4238ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:w:up"));
424945aea22SJiri Olsa 
425945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
426945aea22SJiri Olsa }
427945aea22SJiri Olsa 
42863503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
429945aea22SJiri Olsa {
430515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
431945aea22SJiri Olsa 
4321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
436945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4378ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:rw:kp"));
438945aea22SJiri Olsa 
439945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
440945aea22SJiri Olsa }
441945aea22SJiri Olsa 
44263503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
443945aea22SJiri Olsa {
444945aea22SJiri Olsa 
445515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
446945aea22SJiri Olsa 
4476484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
4481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",    10 == evsel->core.attr.config);
4501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
4511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
452*204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3",    0 == evsel->core.attr.config3);
453ee4c7588SJiri Olsa 	/*
45478e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
455ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
456ee4c7588SJiri Olsa 	 */
4571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
458945aea22SJiri Olsa 
4597741e03eSIan Rogers 	return TEST_OK;
460945aea22SJiri Olsa }
461945aea22SJiri Olsa 
462378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
46363503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
464945aea22SJiri Olsa {
465515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
466945aea22SJiri Olsa 
4676484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
468945aea22SJiri Olsa 
469945aea22SJiri Olsa 	/* r1 */
4701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
4731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
474*204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3);
4751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
479945aea22SJiri Olsa 
48043f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
481e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
483945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
4841fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
4851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
4861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
490945aea22SJiri Olsa 
491945aea22SJiri Olsa 	/* 1:1:hp */
492e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
4941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
499945aea22SJiri Olsa 
5007741e03eSIan Rogers 	return TEST_OK;
501945aea22SJiri Olsa }
502378ef0f5SIan Rogers #endif
503945aea22SJiri Olsa 
50463503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
505945aea22SJiri Olsa {
506515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
507945aea22SJiri Olsa 
508945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
5096484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
5128ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
513945aea22SJiri Olsa 
514945aea22SJiri Olsa 	/* cpu/config=2/u" */
515e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5166484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
519945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
5208ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
521945aea22SJiri Olsa 
5227741e03eSIan Rogers 	return TEST_OK;
523945aea22SJiri Olsa }
524945aea22SJiri Olsa 
52563503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
52671ef150eSKan Liang {
527515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
52871ef150eSKan Liang 
52971ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
5306484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
53371ef150eSKan Liang 	/*
53478e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
53571ef150eSKan Liang 	 * while this test executes only parse events method.
53671ef150eSKan Liang 	 */
5371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
53827de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
54071ef150eSKan Liang 
54171ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
542e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
54571ef150eSKan Liang 	/*
54678e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
54771ef150eSKan Liang 	 * while this test executes only parse events method.
54871ef150eSKan Liang 	 */
5491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
55027de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
55271ef150eSKan Liang 
5537741e03eSIan Rogers 	return TEST_OK;
55471ef150eSKan Liang }
55571ef150eSKan Liang 
55663503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
557945aea22SJiri Olsa {
558515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
559945aea22SJiri Olsa 
5606484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
5611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
562945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
5631fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
564945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
5651fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5690997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
570945aea22SJiri Olsa 
5717741e03eSIan Rogers 	return TEST_OK;
572945aea22SJiri Olsa }
573945aea22SJiri Olsa 
574ffe59788SKan Liang 
57563503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
576ffe59788SKan Liang {
577515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
578ffe59788SKan Liang 
579ffe59788SKan Liang 	/* pmu-event:u */
5806484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
581ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5821fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
583ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5841fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5880997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
589ffe59788SKan Liang 
590ffe59788SKan Liang 	/* cpu/pmu-event/u*/
591e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5926484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
594ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5951fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
596ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5971fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
6001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
6010997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned);
602ffe59788SKan Liang 
6037741e03eSIan Rogers 	return TEST_OK;
604ffe59788SKan Liang }
605ffe59788SKan Liang 
606945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
607945aea22SJiri Olsa {
6086cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
609945aea22SJiri Olsa 
610945aea22SJiri Olsa 	/* config=10 */
6116cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
612945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
613945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
614945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
615945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
616945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
6174f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
618945aea22SJiri Olsa 
619945aea22SJiri Olsa 	/* config1 */
6206cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
621945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
622945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
623945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
624945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
625945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6264f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1"));
627945aea22SJiri Olsa 
628945aea22SJiri Olsa 	/* config2=3 */
6296cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
630945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
631945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
632945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
633945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
634945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
6354f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2"));
636945aea22SJiri Olsa 
637*204e7c49SRob Herring 	/* config3=4 */
638*204e7c49SRob Herring 	term = list_entry(term->list.next, struct parse_events_term, list);
639*204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type term",
640*204e7c49SRob Herring 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3);
641*204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type val",
642*204e7c49SRob Herring 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
643*204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong val", term->val.num == 4);
644*204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3"));
645*204e7c49SRob Herring 
646945aea22SJiri Olsa 	/* umask=1*/
6476cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
648945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
649945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
650945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
651945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
652945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
653945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
654945aea22SJiri Olsa 
6554929e95aSJiri Olsa 	/*
6564929e95aSJiri Olsa 	 * read
6574929e95aSJiri Olsa 	 *
6584929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
6594929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
6604929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
6614929e95aSJiri Olsa 	 */
6624929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6634929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6644929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
6654929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6664929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6674929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6684929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read"));
6694929e95aSJiri Olsa 
6704929e95aSJiri Olsa 	/*
6714929e95aSJiri Olsa 	 * r0xead
6724929e95aSJiri Olsa 	 *
6734929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
6744929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
6754929e95aSJiri Olsa 	 */
6764929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6774929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6784929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
6794929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6804929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6814929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 0xead);
6824f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
6837741e03eSIan Rogers 	return TEST_OK;
684945aea22SJiri Olsa }
685945aea22SJiri Olsa 
68663503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
687945aea22SJiri Olsa {
68832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
689945aea22SJiri Olsa 
6906484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6919d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
692945aea22SJiri Olsa 
693945aea22SJiri Olsa 	/* instructions:k */
694515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
6951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
696945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6971fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
6981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
6991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
704c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7055643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7062bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
707a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
708945aea22SJiri Olsa 
709945aea22SJiri Olsa 	/* cycles:upp */
710e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
712945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7131fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
717945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
7181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
721fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7222bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
723a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
724945aea22SJiri Olsa 
7257741e03eSIan Rogers 	return TEST_OK;
726945aea22SJiri Olsa }
727945aea22SJiri Olsa 
72863503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
729945aea22SJiri Olsa {
73032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
731945aea22SJiri Olsa 
7326484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
7339d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
734945aea22SJiri Olsa 
735945aea22SJiri Olsa 	/* faults + :ku modifier */
736515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
738945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7391fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
7401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
743943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
746c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7475643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7482bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
749a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
750945aea22SJiri Olsa 
751945aea22SJiri Olsa 	/* cache-references + :u modifier */
752e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
754945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7551fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config);
7561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
762fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7632bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
764a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
765945aea22SJiri Olsa 
766945aea22SJiri Olsa 	/* cycles:k */
767e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
769945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7701fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
777c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
778a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
779945aea22SJiri Olsa 
7807741e03eSIan Rogers 	return TEST_OK;
781945aea22SJiri Olsa }
782945aea22SJiri Olsa 
783378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
78463503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
785945aea22SJiri Olsa {
78632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
787945aea22SJiri Olsa 
7886484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
7899d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
790945aea22SJiri Olsa 
79143f322b4SRiku Voipio 	/* group1 syscalls:sys_enter_openat:H */
792515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
794945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
7951fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
7961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
7971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
803c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
804945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
805945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
8065643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8072bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
808a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
809945aea22SJiri Olsa 
810945aea22SJiri Olsa 	/* group1 cycles:kppp */
811e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
813945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8141fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
818945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3);
822fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
823945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
8242bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
825a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
826945aea22SJiri Olsa 
827945aea22SJiri Olsa 	/* group2 cycles + G modifier */
828e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
8291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
830945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8311fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
838c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
839945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
840945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
8415643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8422bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
843a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
844945aea22SJiri Olsa 
845945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
846e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
8481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config);
8491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
855fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8562bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
857a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
858945aea22SJiri Olsa 
859945aea22SJiri Olsa 	/* instructions:u */
860e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
862945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8631fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
867943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
870c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
871a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
872945aea22SJiri Olsa 
8737741e03eSIan Rogers 	return TEST_OK;
874945aea22SJiri Olsa }
875378ef0f5SIan Rogers #endif
876945aea22SJiri Olsa 
87763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
878945aea22SJiri Olsa {
87932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
880945aea22SJiri Olsa 
8816484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
8829d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
883945aea22SJiri Olsa 
884945aea22SJiri Olsa 	/* cycles:u + p */
885515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
8861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
887945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8881fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
892945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
896945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
897c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
8985643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8992bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
900a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
901945aea22SJiri Olsa 
902945aea22SJiri Olsa 	/* instructions:kp + p */
903e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
905945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9061fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
9081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
910945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
9111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
914fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9152bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
916a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
917945aea22SJiri Olsa 
9187741e03eSIan Rogers 	return TEST_OK;
919945aea22SJiri Olsa }
920945aea22SJiri Olsa 
92163503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
922945aea22SJiri Olsa {
92332dcd021SJiri Olsa 	struct evsel *evsel, *leader;
924945aea22SJiri Olsa 
9256484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
9269d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
927945aea22SJiri Olsa 
928945aea22SJiri Olsa 	/* cycles + G */
929515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
931945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9321fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
939945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
940c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9415643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9422bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
943a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
944945aea22SJiri Olsa 
945945aea22SJiri Olsa 	/* instructions + G */
946e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
948945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9491fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
956fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9572bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
958a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
959945aea22SJiri Olsa 
960945aea22SJiri Olsa 	/* cycles:G */
961e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
9621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
963945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9641fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
971945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
972c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9735643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9742bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
975a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
976945aea22SJiri Olsa 
977945aea22SJiri Olsa 	/* instructions:G */
978e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
980945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9811fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
988fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9892bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
990945aea22SJiri Olsa 
991945aea22SJiri Olsa 	/* cycles */
992e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
994945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9951fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1002c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
1003945aea22SJiri Olsa 
10047741e03eSIan Rogers 	return TEST_OK;
1005945aea22SJiri Olsa }
1006945aea22SJiri Olsa 
100763503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
10085a30a99fSJiri Olsa {
100932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10105a30a99fSJiri Olsa 
10116484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10129d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10135a30a99fSJiri Olsa 
10145a30a99fSJiri Olsa 	/* cycles + :H group modifier */
1015515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10175a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10181fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10255a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1026c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10275643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10282bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10295a30a99fSJiri Olsa 
10305a30a99fSJiri Olsa 	/* cache-misses:G + :H group modifier */
1031e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10335a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10341fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1041fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10422bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10435a30a99fSJiri Olsa 
10447741e03eSIan Rogers 	return TEST_OK;
10455a30a99fSJiri Olsa }
10465a30a99fSJiri Olsa 
104763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
10485a30a99fSJiri Olsa {
104932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10505a30a99fSJiri Olsa 
10516484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10529d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10535a30a99fSJiri Olsa 
10545a30a99fSJiri Olsa 	/* cycles + :G group modifier */
1055515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10575a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10581fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10655a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1066c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10675643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10682bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10695a30a99fSJiri Olsa 
10705a30a99fSJiri Olsa 	/* cache-misses:H + :G group modifier */
1071e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10735a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10741fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1081fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10822bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10835a30a99fSJiri Olsa 
10847741e03eSIan Rogers 	return TEST_OK;
10855a30a99fSJiri Olsa }
10865a30a99fSJiri Olsa 
108763503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
10885a30a99fSJiri Olsa {
108932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10905a30a99fSJiri Olsa 
10916484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10929d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10935a30a99fSJiri Olsa 
10945a30a99fSJiri Olsa 	/* cycles:G + :u group modifier */
1095515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10975a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10981fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11055a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1106c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11075643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11082bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11095a30a99fSJiri Olsa 
11105a30a99fSJiri Olsa 	/* cache-misses:H + :u group modifier */
1111e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11135a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11141fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1121fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11222bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11235a30a99fSJiri Olsa 
11247741e03eSIan Rogers 	return TEST_OK;
11255a30a99fSJiri Olsa }
11265a30a99fSJiri Olsa 
112763503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
11285a30a99fSJiri Olsa {
112932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
11305a30a99fSJiri Olsa 
11316484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
11329d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
11335a30a99fSJiri Olsa 
11345a30a99fSJiri Olsa 	/* cycles:G + :uG group modifier */
1135515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11375a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11381fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11455a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1146c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11475643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11482bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11495a30a99fSJiri Olsa 
11505a30a99fSJiri Olsa 	/* cache-misses:H + :uG group modifier */
1151e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11535a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11541fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1161fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11622bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11635a30a99fSJiri Olsa 
11647741e03eSIan Rogers 	return TEST_OK;
11655a30a99fSJiri Olsa }
11665a30a99fSJiri Olsa 
116763503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1168a9f93f97SJiri Olsa {
116932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1170a9f93f97SJiri Olsa 
11716484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1172a9f93f97SJiri Olsa 
1173a9f93f97SJiri Olsa 	/* cycles - sampling group leader */
1174515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1176a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11771fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1184a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1185fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1186a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1187a9f93f97SJiri Olsa 
1188a9f93f97SJiri Olsa 	/* cache-misses - not sampling */
1189e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1191a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11921fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1199fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1200a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1201a9f93f97SJiri Olsa 
1202a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1203e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1205a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12061fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1213a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1214fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1215a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1216a9f93f97SJiri Olsa 
12177741e03eSIan Rogers 	return TEST_OK;
1218a9f93f97SJiri Olsa }
1219a9f93f97SJiri Olsa 
122063503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1221a9f93f97SJiri Olsa {
122232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1223a9f93f97SJiri Olsa 
12246484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
1225a9f93f97SJiri Olsa 
1226a9f93f97SJiri Olsa 	/* instructions - sampling group leader */
1227515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1229a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12301fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
12311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1237a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1238fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1239a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1240a9f93f97SJiri Olsa 
1241a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1242e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1244a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12451fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1252a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1253fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1254a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1255a9f93f97SJiri Olsa 
12567741e03eSIan Rogers 	return TEST_OK;
1257a9f93f97SJiri Olsa }
1258a9f93f97SJiri Olsa 
125963503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1260c9ee780fSMichael Ellerman {
1261515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1262c9ee780fSMichael Ellerman 
12631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1268c9ee780fSMichael Ellerman 
1269c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1270c9ee780fSMichael Ellerman }
1271c9ee780fSMichael Ellerman 
127263503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1273c9ee780fSMichael Ellerman {
127432dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1275c9ee780fSMichael Ellerman 
12766484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1277c9ee780fSMichael Ellerman 
1278c9ee780fSMichael Ellerman 	/* cycles - group leader */
1279515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1281c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12821fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
1283c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1284fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1286c9ee780fSMichael Ellerman 
1287c9ee780fSMichael Ellerman 	/* cache-misses - can not be pinned, but will go on with the leader */
1288e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1290c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12911fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
12921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1293c9ee780fSMichael Ellerman 
1294c9ee780fSMichael Ellerman 	/* branch-misses - ditto */
1295e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
1296c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12971fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1299c9ee780fSMichael Ellerman 
13007741e03eSIan Rogers 	return TEST_OK;
1301c9ee780fSMichael Ellerman }
1302c9ee780fSMichael Ellerman 
13030997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist)
13040997a266SAndi Kleen {
13050997a266SAndi Kleen 	struct evsel *evsel = evlist__first(evlist);
13060997a266SAndi Kleen 
13070997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13080997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13090997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13100997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
13110997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13120997a266SAndi Kleen 
13130997a266SAndi Kleen 	return test__checkevent_symbolic_name(evlist);
13140997a266SAndi Kleen }
13150997a266SAndi Kleen 
13160997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist)
13170997a266SAndi Kleen {
13180997a266SAndi Kleen 	struct evsel *evsel, *leader;
13190997a266SAndi Kleen 
13200997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
13210997a266SAndi Kleen 
13220997a266SAndi Kleen 	/* cycles - group leader */
13230997a266SAndi Kleen 	evsel = leader = evlist__first(evlist);
13240997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13250997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13260997a266SAndi Kleen 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
13270997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1328fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13290997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13300997a266SAndi Kleen 
13310997a266SAndi Kleen 	/* cache-misses - can not be pinned, but will go on with the leader */
13320997a266SAndi Kleen 	evsel = evsel__next(evsel);
13330997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13340997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13350997a266SAndi Kleen 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
13360997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13370997a266SAndi Kleen 
13380997a266SAndi Kleen 	/* branch-misses - ditto */
13390997a266SAndi Kleen 	evsel = evsel__next(evsel);
13400997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13410997a266SAndi Kleen 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
13420997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13430997a266SAndi Kleen 
13447741e03eSIan Rogers 	return TEST_OK;
13450997a266SAndi Kleen }
134663503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1347ec32398cSJacob Shin {
1348515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1349ec32398cSJacob Shin 
13506484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1353ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
13541fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1355ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
13561fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1357ec32398cSJacob Shin 
13587741e03eSIan Rogers 	return TEST_OK;
1359ec32398cSJacob Shin }
1360ec32398cSJacob Shin 
136163503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1362ec32398cSJacob Shin {
1363515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1364ec32398cSJacob Shin 
13656484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1368ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
13691fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1370ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
13711fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1372ec32398cSJacob Shin 
13737741e03eSIan Rogers 	return TEST_OK;
1374ec32398cSJacob Shin }
1375ec32398cSJacob Shin 
1376ec32398cSJacob Shin static int
137763503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1378ec32398cSJacob Shin {
1379515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1380ec32398cSJacob Shin 
13811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1385ec32398cSJacob Shin 
1386ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1387ec32398cSJacob Shin }
1388ec32398cSJacob Shin 
138963503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1390ddd83c97SJiri Olsa {
1391515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1392ddd83c97SJiri Olsa 
13936484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
13941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1395ddd83c97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
13961fc632ceSJiri Olsa 			PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config);
13977741e03eSIan Rogers 	return TEST_OK;
1398ddd83c97SJiri Olsa }
1399ddd83c97SJiri Olsa 
140063503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
140110bf358aSWang Nan {
1402515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
140310bf358aSWang Nan 
140410bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0);
14057741e03eSIan Rogers 	return TEST_OK;
140610bf358aSWang Nan }
140710bf358aSWang Nan 
140863503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
140910bf358aSWang Nan {
1410515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
141110bf358aSWang Nan 
141210bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0);
14137741e03eSIan Rogers 	return TEST_OK;
141410bf358aSWang Nan }
141510bf358aSWang Nan 
141663503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
141710bf358aSWang Nan {
1418515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
141910bf358aSWang Nan 
142010bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0);
14217741e03eSIan Rogers 	return TEST_OK;
142210bf358aSWang Nan }
142310bf358aSWang Nan 
142463503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
142543d0b978SWang Nan {
1426515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
142743d0b978SWang Nan 
142843d0b978SWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0);
14297741e03eSIan Rogers 	return TEST_OK;
143043d0b978SWang Nan }
143110bf358aSWang Nan 
143216ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
143316ddcfbfSJiri Olsa {
143416ddcfbfSJiri Olsa 	return !!perf_pmu__find("intel_pt");
143516ddcfbfSJiri Olsa }
143616ddcfbfSJiri Olsa 
143763503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1438b3f58c8dSArnaldo Carvalho de Melo {
1439515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1440b3f58c8dSArnaldo Carvalho de Melo 
1441b3f58c8dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0);
14427741e03eSIan Rogers 	return TEST_OK;
1443b3f58c8dSArnaldo Carvalho de Melo }
1444b3f58c8dSArnaldo Carvalho de Melo 
144563503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
144606dc5bf2SAlexey Budankov {
1447515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
144806dc5bf2SAlexey Budankov 
144906dc5bf2SAlexey Budankov 	TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0);
14507741e03eSIan Rogers 	return TEST_OK;
145106dc5bf2SAlexey Budankov }
145206dc5bf2SAlexey Budankov 
14533a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
14543a6c51e4SJiri Olsa {
14553a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
14563a6c51e4SJiri Olsa 
14573a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
14583a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
14593a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
14607741e03eSIan Rogers 	return TEST_OK;
14613a6c51e4SJiri Olsa }
14623a6c51e4SJiri Olsa 
146363503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1464714a92d8SJiri Olsa {
1465515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1466714a92d8SJiri Olsa 
14671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14707741e03eSIan Rogers 	return TEST_OK;
1471714a92d8SJiri Olsa }
1472714a92d8SJiri Olsa 
147363503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1474714a92d8SJiri Olsa {
1475515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1476714a92d8SJiri Olsa 
14771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
14807741e03eSIan Rogers 	return TEST_OK;
1481714a92d8SJiri Olsa }
1482714a92d8SJiri Olsa 
1483378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
148482ce75d9SJiri Olsa static int count_tracepoints(void)
148582ce75d9SJiri Olsa {
148682ce75d9SJiri Olsa 	struct dirent *events_ent;
148782ce75d9SJiri Olsa 	DIR *events_dir;
148882ce75d9SJiri Olsa 	int cnt = 0;
148982ce75d9SJiri Olsa 
14907014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
149182ce75d9SJiri Olsa 
149282ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
149382ce75d9SJiri Olsa 
149482ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
149525a7d914SArnaldo Carvalho de Melo 		char *sys_path;
149682ce75d9SJiri Olsa 		struct dirent *sys_ent;
149782ce75d9SJiri Olsa 		DIR *sys_dir;
149882ce75d9SJiri Olsa 
149982ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
150082ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
150182ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
150282ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
150382ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
150482ce75d9SJiri Olsa 			continue;
150582ce75d9SJiri Olsa 
150625a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
150725a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
150882ce75d9SJiri Olsa 
150982ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
151082ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
151182ce75d9SJiri Olsa 
151282ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
151382ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
151482ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
151582ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
151682ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
151782ce75d9SJiri Olsa 				continue;
151882ce75d9SJiri Olsa 
151982ce75d9SJiri Olsa 			cnt++;
152082ce75d9SJiri Olsa 		}
152182ce75d9SJiri Olsa 
152282ce75d9SJiri Olsa 		closedir(sys_dir);
152325a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
152482ce75d9SJiri Olsa 	}
152582ce75d9SJiri Olsa 
152682ce75d9SJiri Olsa 	closedir(events_dir);
152782ce75d9SJiri Olsa 	return cnt;
152882ce75d9SJiri Olsa }
152982ce75d9SJiri Olsa 
153063503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
153182ce75d9SJiri Olsa {
153282ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
15336484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
153482ce75d9SJiri Olsa 
153582ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
153682ce75d9SJiri Olsa }
1537378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */
153882ce75d9SJiri Olsa 
15392541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist)
15402541cb63SJin Yao {
15412541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
15422541cb63SJin Yao 
15432541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
15442541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15452541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
15467741e03eSIan Rogers 	return TEST_OK;
15472541cb63SJin Yao }
15482541cb63SJin Yao 
15492541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist)
15502541cb63SJin Yao {
15512541cb63SJin Yao 	struct evsel *evsel, *leader;
15522541cb63SJin Yao 
15532541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15542541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15552541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15562541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1557fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15582541cb63SJin Yao 
15592541cb63SJin Yao 	evsel = evsel__next(evsel);
15602541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15612541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config);
1562fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15637741e03eSIan Rogers 	return TEST_OK;
15642541cb63SJin Yao }
15652541cb63SJin Yao 
15662541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist)
15672541cb63SJin Yao {
15682541cb63SJin Yao 	struct evsel *evsel, *leader;
15692541cb63SJin Yao 
15702541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15712541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15722541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1573fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15742541cb63SJin Yao 
15752541cb63SJin Yao 	evsel = evsel__next(evsel);
15762541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15772541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1578fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15797741e03eSIan Rogers 	return TEST_OK;
15802541cb63SJin Yao }
15812541cb63SJin Yao 
15822541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist)
15832541cb63SJin Yao {
15842541cb63SJin Yao 	struct evsel *evsel, *leader;
15852541cb63SJin Yao 
15862541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15872541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15882541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15892541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1590fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15912541cb63SJin Yao 
15922541cb63SJin Yao 	evsel = evsel__next(evsel);
15932541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1594fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15957741e03eSIan Rogers 	return TEST_OK;
15962541cb63SJin Yao }
15972541cb63SJin Yao 
15982541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist)
15992541cb63SJin Yao {
16002541cb63SJin Yao 	struct evsel *evsel, *leader;
16012541cb63SJin Yao 
16022541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
16032541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
16042541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16052541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1606fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
16072541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
16082541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
16092541cb63SJin Yao 
16102541cb63SJin Yao 	evsel = evsel__next(evsel);
16112541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16122541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config);
1613fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
16142541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
16152541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
16167741e03eSIan Rogers 	return TEST_OK;
16172541cb63SJin Yao }
16182541cb63SJin Yao 
16192541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist)
16202541cb63SJin Yao {
16212541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16222541cb63SJin Yao 
1623490e9a8fSJin Yao 	if (!perf_pmu__hybrid_mounted("cpu_atom")) {
1624490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1625490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
1626490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16277741e03eSIan Rogers 		return TEST_OK;
1628490e9a8fSJin Yao 	}
1629490e9a8fSJin Yao 
16302541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
16312541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16322541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16332541cb63SJin Yao 
16342541cb63SJin Yao 	/* The type of second event is randome value */
16352541cb63SJin Yao 	evsel = evsel__next(evsel);
16362541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16377741e03eSIan Rogers 	return TEST_OK;
16382541cb63SJin Yao }
16392541cb63SJin Yao 
16402541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist)
16412541cb63SJin Yao {
16422541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16432541cb63SJin Yao 
16442541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16452541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16462541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16477741e03eSIan Rogers 	return TEST_OK;
16482541cb63SJin Yao }
16492541cb63SJin Yao 
16502541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist)
16512541cb63SJin Yao {
16522541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16532541cb63SJin Yao 
1654490e9a8fSJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16552541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
16562541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff));
16577741e03eSIan Rogers 	return TEST_OK;
16582541cb63SJin Yao }
16592541cb63SJin Yao 
166023b6339bSArnaldo Carvalho de Melo struct evlist_test {
1661945aea22SJiri Olsa 	const char *name;
166216ddcfbfSJiri Olsa 	bool (*valid)(void);
166363503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1664945aea22SJiri Olsa };
1665945aea22SJiri Olsa 
16668252e791SIan Rogers static const struct evlist_test test__events[] = {
1667378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1668615b8f99SAlexander Yarygin 	{
166943f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1670945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
16718252e791SIan Rogers 		/* 0 */
1672945aea22SJiri Olsa 	},
1673615b8f99SAlexander Yarygin 	{
1674945aea22SJiri Olsa 		.name  = "syscalls:*",
1675945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
16768252e791SIan Rogers 		/* 1 */
1677945aea22SJiri Olsa 	},
1678378ef0f5SIan Rogers #endif
1679615b8f99SAlexander Yarygin 	{
1680945aea22SJiri Olsa 		.name  = "r1a",
1681945aea22SJiri Olsa 		.check = test__checkevent_raw,
16828252e791SIan Rogers 		/* 2 */
1683945aea22SJiri Olsa 	},
1684615b8f99SAlexander Yarygin 	{
1685945aea22SJiri Olsa 		.name  = "1:1",
1686945aea22SJiri Olsa 		.check = test__checkevent_numeric,
16878252e791SIan Rogers 		/* 3 */
1688945aea22SJiri Olsa 	},
1689615b8f99SAlexander Yarygin 	{
1690945aea22SJiri Olsa 		.name  = "instructions",
1691945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
16928252e791SIan Rogers 		/* 4 */
1693945aea22SJiri Olsa 	},
1694615b8f99SAlexander Yarygin 	{
1695945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1696945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
16978252e791SIan Rogers 		/* 5 */
1698945aea22SJiri Olsa 	},
1699615b8f99SAlexander Yarygin 	{
1700945aea22SJiri Olsa 		.name  = "faults",
1701945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
17028252e791SIan Rogers 		/* 6 */
1703945aea22SJiri Olsa 	},
1704615b8f99SAlexander Yarygin 	{
1705945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1706945aea22SJiri Olsa 		.check = test__checkevent_genhw,
17078252e791SIan Rogers 		/* 7 */
1708945aea22SJiri Olsa 	},
1709615b8f99SAlexander Yarygin 	{
1710945aea22SJiri Olsa 		.name  = "mem:0",
1711945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
17128252e791SIan Rogers 		/* 8 */
1713945aea22SJiri Olsa 	},
1714615b8f99SAlexander Yarygin 	{
1715945aea22SJiri Olsa 		.name  = "mem:0:x",
1716945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
17178252e791SIan Rogers 		/* 9 */
1718945aea22SJiri Olsa 	},
1719615b8f99SAlexander Yarygin 	{
1720945aea22SJiri Olsa 		.name  = "mem:0:r",
1721945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
17228252e791SIan Rogers 		/* 0 */
1723945aea22SJiri Olsa 	},
1724615b8f99SAlexander Yarygin 	{
1725945aea22SJiri Olsa 		.name  = "mem:0:w",
1726945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
17278252e791SIan Rogers 		/* 1 */
1728945aea22SJiri Olsa 	},
1729378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1730615b8f99SAlexander Yarygin 	{
173143f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1732945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
17338252e791SIan Rogers 		/* 2 */
1734945aea22SJiri Olsa 	},
1735615b8f99SAlexander Yarygin 	{
1736945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1737945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
17388252e791SIan Rogers 		/* 3 */
1739945aea22SJiri Olsa 	},
1740378ef0f5SIan Rogers #endif
1741615b8f99SAlexander Yarygin 	{
1742945aea22SJiri Olsa 		.name  = "r1a:kp",
1743945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
17448252e791SIan Rogers 		/* 4 */
1745945aea22SJiri Olsa 	},
1746615b8f99SAlexander Yarygin 	{
1747945aea22SJiri Olsa 		.name  = "1:1:hp",
1748945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
17498252e791SIan Rogers 		/* 5 */
1750945aea22SJiri Olsa 	},
1751615b8f99SAlexander Yarygin 	{
1752945aea22SJiri Olsa 		.name  = "instructions:h",
1753945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
17548252e791SIan Rogers 		/* 6 */
1755945aea22SJiri Olsa 	},
1756615b8f99SAlexander Yarygin 	{
1757945aea22SJiri Olsa 		.name  = "faults:u",
1758945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
17598252e791SIan Rogers 		/* 7 */
1760945aea22SJiri Olsa 	},
1761615b8f99SAlexander Yarygin 	{
1762945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1763945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
17648252e791SIan Rogers 		/* 8 */
1765945aea22SJiri Olsa 	},
1766615b8f99SAlexander Yarygin 	{
1767945aea22SJiri Olsa 		.name  = "mem:0:u",
1768945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
17698252e791SIan Rogers 		/* 9 */
1770945aea22SJiri Olsa 	},
1771615b8f99SAlexander Yarygin 	{
1772945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1773945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
17748252e791SIan Rogers 		/* 0 */
1775945aea22SJiri Olsa 	},
1776615b8f99SAlexander Yarygin 	{
1777945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1778945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
17798252e791SIan Rogers 		/* 1 */
1780945aea22SJiri Olsa 	},
1781615b8f99SAlexander Yarygin 	{
1782945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1783945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
17848252e791SIan Rogers 		/* 2 */
1785945aea22SJiri Olsa 	},
1786378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1787615b8f99SAlexander Yarygin 	{
178843f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1789945aea22SJiri Olsa 		.check = test__checkevent_list,
17908252e791SIan Rogers 		/* 3 */
1791945aea22SJiri Olsa 	},
1792378ef0f5SIan Rogers #endif
1793615b8f99SAlexander Yarygin 	{
1794945aea22SJiri Olsa 		.name  = "instructions:G",
1795945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
17968252e791SIan Rogers 		/* 4 */
1797945aea22SJiri Olsa 	},
1798615b8f99SAlexander Yarygin 	{
1799945aea22SJiri Olsa 		.name  = "instructions:H",
1800945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
18018252e791SIan Rogers 		/* 5 */
1802945aea22SJiri Olsa 	},
1803615b8f99SAlexander Yarygin 	{
1804945aea22SJiri Olsa 		.name  = "mem:0:rw",
1805945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
18068252e791SIan Rogers 		/* 6 */
1807945aea22SJiri Olsa 	},
1808615b8f99SAlexander Yarygin 	{
1809945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1810945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
18118252e791SIan Rogers 		/* 7 */
1812945aea22SJiri Olsa 	},
1813615b8f99SAlexander Yarygin 	{
1814945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1815945aea22SJiri Olsa 		.check = test__group1,
18168252e791SIan Rogers 		/* 8 */
1817945aea22SJiri Olsa 	},
1818615b8f99SAlexander Yarygin 	{
1819945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1820945aea22SJiri Olsa 		.check = test__group2,
18218252e791SIan Rogers 		/* 9 */
1822945aea22SJiri Olsa 	},
1823378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1824615b8f99SAlexander Yarygin 	{
182543f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1826945aea22SJiri Olsa 		.check = test__group3,
18278252e791SIan Rogers 		/* 0 */
1828945aea22SJiri Olsa 	},
1829378ef0f5SIan Rogers #endif
1830615b8f99SAlexander Yarygin 	{
1831945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1832945aea22SJiri Olsa 		.check = test__group4,
18338252e791SIan Rogers 		/* 1 */
1834945aea22SJiri Olsa 	},
1835615b8f99SAlexander Yarygin 	{
1836945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1837945aea22SJiri Olsa 		.check = test__group5,
18388252e791SIan Rogers 		/* 2 */
1839945aea22SJiri Olsa 	},
1840378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1841615b8f99SAlexander Yarygin 	{
184282ce75d9SJiri Olsa 		.name  = "*:*",
184382ce75d9SJiri Olsa 		.check = test__all_tracepoints,
18448252e791SIan Rogers 		/* 3 */
184582ce75d9SJiri Olsa 	},
1846378ef0f5SIan Rogers #endif
1847615b8f99SAlexander Yarygin 	{
18485a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
18495a30a99fSJiri Olsa 		.check = test__group_gh1,
18508252e791SIan Rogers 		/* 4 */
18515a30a99fSJiri Olsa 	},
1852615b8f99SAlexander Yarygin 	{
18535a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
18545a30a99fSJiri Olsa 		.check = test__group_gh2,
18558252e791SIan Rogers 		/* 5 */
18565a30a99fSJiri Olsa 	},
1857615b8f99SAlexander Yarygin 	{
18585a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
18595a30a99fSJiri Olsa 		.check = test__group_gh3,
18608252e791SIan Rogers 		/* 6 */
18615a30a99fSJiri Olsa 	},
1862615b8f99SAlexander Yarygin 	{
18635a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
18645a30a99fSJiri Olsa 		.check = test__group_gh4,
18658252e791SIan Rogers 		/* 7 */
18665a30a99fSJiri Olsa 	},
1867615b8f99SAlexander Yarygin 	{
1868a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1869a9f93f97SJiri Olsa 		.check = test__leader_sample1,
18708252e791SIan Rogers 		/* 8 */
1871a9f93f97SJiri Olsa 	},
1872615b8f99SAlexander Yarygin 	{
1873a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1874a9f93f97SJiri Olsa 		.check = test__leader_sample2,
18758252e791SIan Rogers 		/* 9 */
1876a9f93f97SJiri Olsa 	},
1877615b8f99SAlexander Yarygin 	{
1878c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1879c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
18808252e791SIan Rogers 		/* 0 */
1881c9ee780fSMichael Ellerman 	},
1882615b8f99SAlexander Yarygin 	{
1883c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1884c9ee780fSMichael Ellerman 		.check = test__pinned_group,
18858252e791SIan Rogers 		/* 1 */
1886c9ee780fSMichael Ellerman 	},
1887ec32398cSJacob Shin 	{
1888ec32398cSJacob Shin 		.name  = "mem:0/1",
1889ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
18908252e791SIan Rogers 		/* 2 */
1891ec32398cSJacob Shin 	},
1892ec32398cSJacob Shin 	{
1893ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1894ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
18958252e791SIan Rogers 		/* 3 */
1896ec32398cSJacob Shin 	},
1897ec32398cSJacob Shin 	{
1898ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1899ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
19008252e791SIan Rogers 		/* 4 */
1901ec32398cSJacob Shin 	},
1902378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT)
1903c0bc8c6dSAlexander Yarygin 	{
1904c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1905c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
190653fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
19078252e791SIan Rogers 		/* 0 */
1908c0bc8c6dSAlexander Yarygin 	},
1909c0bc8c6dSAlexander Yarygin #endif
1910a1e12da4SJiri Olsa 	{
1911a1e12da4SJiri Olsa 		.name  = "instructions:I",
1912a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
19138252e791SIan Rogers 		/* 5 */
1914a1e12da4SJiri Olsa 	},
1915a1e12da4SJiri Olsa 	{
1916a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1917a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
19188252e791SIan Rogers 		/* 6 */
1919a1e12da4SJiri Olsa 	},
1920ddd83c97SJiri Olsa 	{
1921ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1922ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
19238252e791SIan Rogers 		/* 7 */
1924ddd83c97SJiri Olsa 	},
192510bf358aSWang Nan 	{
192610bf358aSWang Nan 		.name  = "instructions/name=insn/",
192710bf358aSWang Nan 		.check = test__checkevent_config_symbol,
19288252e791SIan Rogers 		/* 8 */
192910bf358aSWang Nan 	},
193010bf358aSWang Nan 	{
193110bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
193210bf358aSWang Nan 		.check = test__checkevent_config_raw,
19338252e791SIan Rogers 		/* 9 */
193410bf358aSWang Nan 	},
193510bf358aSWang Nan 	{
193610bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
193710bf358aSWang Nan 		.check = test__checkevent_config_num,
19388252e791SIan Rogers 		/* 0 */
193910bf358aSWang Nan 	},
194043d0b978SWang Nan 	{
194143d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
194243d0b978SWang Nan 		.check = test__checkevent_config_cache,
19438252e791SIan Rogers 		/* 1 */
194443d0b978SWang Nan 	},
1945b3f58c8dSArnaldo Carvalho de Melo 	{
1946b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
194716ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1948b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
19498252e791SIan Rogers 		/* 2 */
1950b3f58c8dSArnaldo Carvalho de Melo 	},
195106dc5bf2SAlexey Budankov 	{
195206dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
195306dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
19548252e791SIan Rogers 		/* 3 */
1955714a92d8SJiri Olsa 	},
1956714a92d8SJiri Olsa 	{
1957714a92d8SJiri Olsa 		.name  = "cycles//u",
1958714a92d8SJiri Olsa 		.check = test__sym_event_slash,
19598252e791SIan Rogers 		/* 4 */
1960714a92d8SJiri Olsa 	},
1961714a92d8SJiri Olsa 	{
1962714a92d8SJiri Olsa 		.name  = "cycles:k",
1963714a92d8SJiri Olsa 		.check = test__sym_event_dc,
19648252e791SIan Rogers 		/* 5 */
19650997a266SAndi Kleen 	},
19660997a266SAndi Kleen 	{
19670997a266SAndi Kleen 		.name  = "instructions:uep",
19680997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
19698252e791SIan Rogers 		/* 6 */
19700997a266SAndi Kleen 	},
19710997a266SAndi Kleen 	{
19720997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
19730997a266SAndi Kleen 		.check = test__exclusive_group,
19748252e791SIan Rogers 		/* 7 */
19750997a266SAndi Kleen 	},
1976945aea22SJiri Olsa };
1977945aea22SJiri Olsa 
19788252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
1979615b8f99SAlexander Yarygin 	{
1980945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
1981945aea22SJiri Olsa 		.check = test__checkevent_pmu,
19828252e791SIan Rogers 		/* 0 */
1983945aea22SJiri Olsa 	},
1984615b8f99SAlexander Yarygin 	{
1985945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
1986945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
19878252e791SIan Rogers 		/* 1 */
1988945aea22SJiri Olsa 	},
198971ef150eSKan Liang 	{
199071ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
199171ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
19928252e791SIan Rogers 		/* 2 */
199371ef150eSKan Liang 	},
199406dc5bf2SAlexey Budankov 	{
1995a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
199606dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
19978252e791SIan Rogers 		/* 3 */
19983a6c51e4SJiri Olsa 	},
19993a6c51e4SJiri Olsa 	{
20003a6c51e4SJiri Olsa 		.name  = "software/r1a/",
20013a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
20028252e791SIan Rogers 		/* 4 */
20033a6c51e4SJiri Olsa 	},
2004c33cdf54SJiri Olsa 	{
2005c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
2006c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
20078252e791SIan Rogers 		/* 5 */
2008c33cdf54SJiri Olsa 	},
2009945aea22SJiri Olsa };
2010945aea22SJiri Olsa 
201123b6339bSArnaldo Carvalho de Melo struct terms_test {
2012945aea22SJiri Olsa 	const char *str;
2013945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
2014945aea22SJiri Olsa };
2015945aea22SJiri Olsa 
2016b58eca40SIan Rogers static const struct terms_test test__terms[] = {
2017945aea22SJiri Olsa 	[0] = {
2018*204e7c49SRob Herring 		.str   = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead",
2019945aea22SJiri Olsa 		.check = test__checkterms_simple,
2020945aea22SJiri Olsa 	},
2021945aea22SJiri Olsa };
2022945aea22SJiri Olsa 
20238252e791SIan Rogers static const struct evlist_test test__hybrid_events[] = {
20242541cb63SJin Yao 	{
20252541cb63SJin Yao 		.name  = "cpu_core/cpu-cycles/",
20262541cb63SJin Yao 		.check = test__hybrid_hw_event_with_pmu,
20278252e791SIan Rogers 		/* 0 */
20282541cb63SJin Yao 	},
20292541cb63SJin Yao 	{
20302541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/,cpu_core/instructions/}",
20312541cb63SJin Yao 		.check = test__hybrid_hw_group_event,
20328252e791SIan Rogers 		/* 1 */
20332541cb63SJin Yao 	},
20342541cb63SJin Yao 	{
20352541cb63SJin Yao 		.name  = "{cpu-clock,cpu_core/cpu-cycles/}",
20362541cb63SJin Yao 		.check = test__hybrid_sw_hw_group_event,
20378252e791SIan Rogers 		/* 2 */
20382541cb63SJin Yao 	},
20392541cb63SJin Yao 	{
20402541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/,cpu-clock}",
20412541cb63SJin Yao 		.check = test__hybrid_hw_sw_group_event,
20428252e791SIan Rogers 		/* 3 */
20432541cb63SJin Yao 	},
20442541cb63SJin Yao 	{
20452541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}",
20462541cb63SJin Yao 		.check = test__hybrid_group_modifier1,
20478252e791SIan Rogers 		/* 4 */
20482541cb63SJin Yao 	},
20492541cb63SJin Yao 	{
20502541cb63SJin Yao 		.name  = "r1a",
20512541cb63SJin Yao 		.check = test__hybrid_raw1,
20528252e791SIan Rogers 		/* 5 */
20532541cb63SJin Yao 	},
20542541cb63SJin Yao 	{
20552541cb63SJin Yao 		.name  = "cpu_core/r1a/",
20562541cb63SJin Yao 		.check = test__hybrid_raw2,
20578252e791SIan Rogers 		/* 6 */
20582541cb63SJin Yao 	},
20592541cb63SJin Yao 	{
20602541cb63SJin Yao 		.name  = "cpu_core/config=10,config1,config2=3,period=1000/u",
20612541cb63SJin Yao 		.check = test__checkevent_pmu,
20628252e791SIan Rogers 		/* 7 */
20632541cb63SJin Yao 	},
20642541cb63SJin Yao 	{
2065490e9a8fSJin Yao 		.name  = "cpu_core/LLC-loads/",
20662541cb63SJin Yao 		.check = test__hybrid_cache_event,
20678252e791SIan Rogers 		/* 8 */
20682541cb63SJin Yao 	},
20692541cb63SJin Yao };
20702541cb63SJin Yao 
20718252e791SIan Rogers static int test_event(const struct evlist_test *e)
2072945aea22SJiri Olsa {
2073a910e466SIan Rogers 	struct parse_events_error err;
207463503dbaSJiri Olsa 	struct evlist *evlist;
2075945aea22SJiri Olsa 	int ret;
2076945aea22SJiri Olsa 
207716ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
20787741e03eSIan Rogers 		pr_debug("... SKIP\n");
20797741e03eSIan Rogers 		return TEST_OK;
208016ddcfbfSJiri Olsa 	}
208116ddcfbfSJiri Olsa 
20820f98b11cSJiri Olsa 	evlist = evlist__new();
20837741e03eSIan Rogers 	if (evlist == NULL) {
20847741e03eSIan Rogers 		pr_err("Failed allocation");
20857741e03eSIan Rogers 		return TEST_FAIL;
20867741e03eSIan Rogers 	}
208707eafd4eSIan Rogers 	parse_events_error__init(&err);
2088933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
2089945aea22SJiri Olsa 	if (ret) {
2090933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2091933ccf20SJiri Olsa 			 e->name, ret, err.str);
20926c191289SIan Rogers 		parse_events_error__print(&err, e->name);
20937741e03eSIan Rogers 		ret = TEST_FAIL;
20947741e03eSIan Rogers 		if (strstr(err.str, "can't access trace events"))
20957741e03eSIan Rogers 			ret = TEST_SKIP;
20962d4352c0SArnaldo Carvalho de Melo 	} else {
20972d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
2098945aea22SJiri Olsa 	}
209907eafd4eSIan Rogers 	parse_events_error__exit(&err);
2100c12995a5SJiri Olsa 	evlist__delete(evlist);
2101945aea22SJiri Olsa 
2102945aea22SJiri Olsa 	return ret;
2103945aea22SJiri Olsa }
2104945aea22SJiri Olsa 
2105b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
2106b4a7276cSJohn Garry {
2107b4a7276cSJohn Garry 	struct parse_events_error err;
2108b4a7276cSJohn Garry 	struct evlist *evlist;
2109b4a7276cSJohn Garry 	int ret;
2110b4a7276cSJohn Garry 
2111b4a7276cSJohn Garry 	evlist = evlist__new();
2112b4a7276cSJohn Garry 	if (!evlist)
2113b4a7276cSJohn Garry 		return -ENOMEM;
2114b4a7276cSJohn Garry 
2115b4a7276cSJohn Garry 	parse_events_error__init(&err);
2116b4a7276cSJohn Garry 	perf_pmu__test_parse_init();
2117a4c7d7c5SIan Rogers 	ret = __parse_events(evlist, str, &err, &perf_pmu__fake, /*warn_if_reordered=*/true);
2118b4a7276cSJohn Garry 	if (ret) {
2119b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2120b4a7276cSJohn Garry 			 str, ret, err.str);
2121b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
2122b4a7276cSJohn Garry 	}
2123b4a7276cSJohn Garry 
2124b4a7276cSJohn Garry 	parse_events_error__exit(&err);
2125b4a7276cSJohn Garry 	evlist__delete(evlist);
2126b4a7276cSJohn Garry 
2127b4a7276cSJohn Garry 	return ret;
2128b4a7276cSJohn Garry }
2129b4a7276cSJohn Garry 
21307741e03eSIan Rogers static int combine_test_results(int existing, int latest)
21317741e03eSIan Rogers {
21327741e03eSIan Rogers 	if (existing == TEST_FAIL)
21337741e03eSIan Rogers 		return TEST_FAIL;
21347741e03eSIan Rogers 	if (existing == TEST_SKIP)
21357741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
21367741e03eSIan Rogers 	return latest;
21377741e03eSIan Rogers }
21387741e03eSIan Rogers 
21398252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
2140945aea22SJiri Olsa {
21417741e03eSIan Rogers 	int ret = TEST_OK;
2142945aea22SJiri Olsa 
21438252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
21448252e791SIan Rogers 		const struct evlist_test *e = &events[i];
21457741e03eSIan Rogers 		int test_ret;
2146945aea22SJiri Olsa 
21477741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
21487741e03eSIan Rogers 		test_ret = test_event(e);
21497741e03eSIan Rogers 		if (test_ret != TEST_OK) {
21507741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
21517741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
21527741e03eSIan Rogers 		}
2153945aea22SJiri Olsa 	}
2154945aea22SJiri Olsa 
21557741e03eSIan Rogers 	return ret;
21567741e03eSIan Rogers }
21577741e03eSIan Rogers 
21587741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21597741e03eSIan Rogers {
21607741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2161945aea22SJiri Olsa }
2162945aea22SJiri Olsa 
2163b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2164945aea22SJiri Olsa {
2165c549aca5SDavid Ahern 	struct list_head terms;
2166945aea22SJiri Olsa 	int ret;
2167945aea22SJiri Olsa 
2168c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2169945aea22SJiri Olsa 
21704929e95aSJiri Olsa 	/*
21714929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init prepares perf_pmu_events_list
21724929e95aSJiri Olsa 	 * which gets freed in parse_events_terms.
21734929e95aSJiri Olsa 	 */
21744929e95aSJiri Olsa 	if (perf_pmu__test_parse_init())
21754929e95aSJiri Olsa 		return -1;
21764929e95aSJiri Olsa 
2177c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2178945aea22SJiri Olsa 	if (ret) {
2179945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2180945aea22SJiri Olsa 			 t->str , ret);
2181945aea22SJiri Olsa 		return ret;
2182945aea22SJiri Olsa 	}
2183945aea22SJiri Olsa 
2184c549aca5SDavid Ahern 	ret = t->check(&terms);
2185682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2186945aea22SJiri Olsa 
2187945aea22SJiri Olsa 	return ret;
2188945aea22SJiri Olsa }
2189945aea22SJiri Olsa 
2190b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2191945aea22SJiri Olsa {
2192945aea22SJiri Olsa 	int ret = 0;
2193945aea22SJiri Olsa 
2194b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2195b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2196945aea22SJiri Olsa 
2197945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2198945aea22SJiri Olsa 		ret = test_term(t);
2199945aea22SJiri Olsa 		if (ret)
2200945aea22SJiri Olsa 			break;
2201945aea22SJiri Olsa 	}
2202945aea22SJiri Olsa 
2203945aea22SJiri Olsa 	return ret;
2204945aea22SJiri Olsa }
2205945aea22SJiri Olsa 
22067741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
22077741e03eSIan Rogers {
22087741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
22097741e03eSIan Rogers }
22107741e03eSIan Rogers 
2211945aea22SJiri Olsa static int test_pmu(void)
2212945aea22SJiri Olsa {
2213945aea22SJiri Olsa 	struct stat st;
2214945aea22SJiri Olsa 	char path[PATH_MAX];
2215945aea22SJiri Olsa 	int ret;
2216945aea22SJiri Olsa 
2217945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
2218cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
2219945aea22SJiri Olsa 
2220945aea22SJiri Olsa 	ret = stat(path, &st);
2221945aea22SJiri Olsa 	if (ret)
2222945aea22SJiri Olsa 		pr_debug("omitting PMU cpu tests\n");
2223945aea22SJiri Olsa 	return !ret;
2224945aea22SJiri Olsa }
2225945aea22SJiri Olsa 
22267741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2227945aea22SJiri Olsa {
2228945aea22SJiri Olsa 	struct stat st;
2229945aea22SJiri Olsa 	char path[PATH_MAX];
2230945aea22SJiri Olsa 	struct dirent *ent;
2231945aea22SJiri Olsa 	DIR *dir;
2232945aea22SJiri Olsa 	int ret;
2233945aea22SJiri Olsa 
22347741e03eSIan Rogers 	if (!test_pmu())
22357741e03eSIan Rogers 		return TEST_SKIP;
22367741e03eSIan Rogers 
2237945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/",
2238cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
2239945aea22SJiri Olsa 
2240945aea22SJiri Olsa 	ret = stat(path, &st);
2241945aea22SJiri Olsa 	if (ret) {
22427741e03eSIan Rogers 		pr_debug("omitting PMU cpu events tests: %s\n", path);
22437741e03eSIan Rogers 		return TEST_OK;
2244945aea22SJiri Olsa 	}
2245945aea22SJiri Olsa 
2246945aea22SJiri Olsa 	dir = opendir(path);
2247945aea22SJiri Olsa 	if (!dir) {
22487741e03eSIan Rogers 		pr_debug("can't open pmu event dir: %s\n", path);
22497741e03eSIan Rogers 		return TEST_FAIL;
2250945aea22SJiri Olsa 	}
2251945aea22SJiri Olsa 
22527741e03eSIan Rogers 	ret = TEST_OK;
22537741e03eSIan Rogers 	while ((ent = readdir(dir))) {
22548252e791SIan Rogers 		struct evlist_test e = { .name = NULL, };
22552e2bbc03SArnaldo Carvalho de Melo 		char name[2 * NAME_MAX + 1 + 12 + 3];
22567741e03eSIan Rogers 		int test_ret;
2257945aea22SJiri Olsa 
225817a2634bSAndi Kleen 		/* Names containing . are special and cannot be used directly */
225917a2634bSAndi Kleen 		if (strchr(ent->d_name, '.'))
2260945aea22SJiri Olsa 			continue;
2261945aea22SJiri Olsa 
22622e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name);
2263945aea22SJiri Olsa 
2264945aea22SJiri Olsa 		e.name  = name;
2265945aea22SJiri Olsa 		e.check = test__checkevent_pmu_events;
2266945aea22SJiri Olsa 
22677741e03eSIan Rogers 		test_ret = test_event(&e);
22687741e03eSIan Rogers 		if (test_ret != TEST_OK) {
22697741e03eSIan Rogers 			pr_debug("Test PMU event failed for '%s'", name);
22707741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
22717741e03eSIan Rogers 		}
2272146edff3SIan Rogers 		/*
2273146edff3SIan Rogers 		 * Names containing '-' are recognized as prefixes and suffixes
2274146edff3SIan Rogers 		 * due to '-' being a legacy PMU separator. This fails when the
2275146edff3SIan Rogers 		 * prefix or suffix collides with an existing legacy token. For
2276146edff3SIan Rogers 		 * example, branch-brs has a prefix (branch) that collides with
2277146edff3SIan Rogers 		 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2278146edff3SIan Rogers 		 * isn't expected after this. As event names in the config
2279146edff3SIan Rogers 		 * slashes are allowed a '-' in the name we check this works
2280146edff3SIan Rogers 		 * above.
2281146edff3SIan Rogers 		 */
2282146edff3SIan Rogers 		if (strchr(ent->d_name, '-'))
2283146edff3SIan Rogers 			continue;
2284146edff3SIan Rogers 
22852e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);
2286ffe59788SKan Liang 		e.name  = name;
2287ffe59788SKan Liang 		e.check = test__checkevent_pmu_events_mix;
22887741e03eSIan Rogers 		test_ret = test_event(&e);
22897741e03eSIan Rogers 		if (test_ret != TEST_OK) {
22907741e03eSIan Rogers 			pr_debug("Test PMU event failed for '%s'", name);
22917741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
22927741e03eSIan Rogers 		}
2293945aea22SJiri Olsa 	}
2294945aea22SJiri Olsa 
2295945aea22SJiri Olsa 	closedir(dir);
2296945aea22SJiri Olsa 	return ret;
2297945aea22SJiri Olsa }
2298945aea22SJiri Olsa 
22997741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23007741e03eSIan Rogers {
23017741e03eSIan Rogers 	if (!test_pmu())
23027741e03eSIan Rogers 		return TEST_SKIP;
23037741e03eSIan Rogers 
23047741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
23057741e03eSIan Rogers }
23067741e03eSIan Rogers 
2307c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2308c7a3828dSJin Yao {
2309c7a3828dSJin Yao 	char path[PATH_MAX];
2310c7a3828dSJin Yao 	DIR *dir;
2311c7a3828dSJin Yao 	struct dirent *dent;
2312c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2313c7a3828dSJin Yao 	char buf[128];
2314c7a3828dSJin Yao 	FILE *file;
2315c7a3828dSJin Yao 
2316c7a3828dSJin Yao 	if (!sysfs)
2317c7a3828dSJin Yao 		return false;
2318c7a3828dSJin Yao 
2319c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2320c7a3828dSJin Yao 	dir = opendir(path);
2321c7a3828dSJin Yao 	if (!dir)
2322c7a3828dSJin Yao 		return false;
2323c7a3828dSJin Yao 
2324c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2325c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2326c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2327c7a3828dSJin Yao 			continue;
2328c7a3828dSJin Yao 
2329c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2330c7a3828dSJin Yao 			 sysfs, dent->d_name);
2331c7a3828dSJin Yao 
2332c7a3828dSJin Yao 		if (!file_available(path))
2333c7a3828dSJin Yao 			continue;
2334c7a3828dSJin Yao 
2335c7a3828dSJin Yao 		file = fopen(path, "r");
2336c7a3828dSJin Yao 		if (!file)
2337c7a3828dSJin Yao 			continue;
2338c7a3828dSJin Yao 
2339c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2340c7a3828dSJin Yao 			fclose(file);
2341c7a3828dSJin Yao 			continue;
2342c7a3828dSJin Yao 		}
2343c7a3828dSJin Yao 
2344c7a3828dSJin Yao 		/* Remove the last '\n' */
2345c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2346c7a3828dSJin Yao 
2347c7a3828dSJin Yao 		fclose(file);
2348c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2349c7a3828dSJin Yao 		*alias = strdup(buf);
2350c7a3828dSJin Yao 		closedir(dir);
2351c7a3828dSJin Yao 
2352c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2353c7a3828dSJin Yao 			free(*event);
2354c7a3828dSJin Yao 			free(*alias);
2355c7a3828dSJin Yao 			return false;
2356c7a3828dSJin Yao 		}
2357c7a3828dSJin Yao 
2358c7a3828dSJin Yao 		return true;
2359c7a3828dSJin Yao 	}
2360c7a3828dSJin Yao 
2361c7a3828dSJin Yao 	closedir(dir);
2362c7a3828dSJin Yao 	return false;
2363c7a3828dSJin Yao }
2364c7a3828dSJin Yao 
23657741e03eSIan Rogers static int test__hybrid(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23667741e03eSIan Rogers {
23677741e03eSIan Rogers 	if (!perf_pmu__has_hybrid())
23687741e03eSIan Rogers 		return TEST_SKIP;
23697741e03eSIan Rogers 
23707741e03eSIan Rogers 	return test_events(test__hybrid_events, ARRAY_SIZE(test__hybrid_events));
23717741e03eSIan Rogers }
23727741e03eSIan Rogers 
2373c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2374c7a3828dSJin Yao {
2375c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2376c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2377c7a3828dSJin Yao 
2378c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2379c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
23807741e03eSIan Rogers 	return TEST_OK;
2381c7a3828dSJin Yao }
2382c7a3828dSJin Yao 
23837741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2384c7a3828dSJin Yao {
23858252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2386c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2387c7a3828dSJin Yao 
2388c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2389c7a3828dSJin Yao 		 event, alias);
2390c7a3828dSJin Yao 
2391c7a3828dSJin Yao 	e.name  = name;
2392c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2393c7a3828dSJin Yao 	return test_event(&e);
2394c7a3828dSJin Yao }
2395c7a3828dSJin Yao 
23967741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23977741e03eSIan Rogers {
23987741e03eSIan Rogers 	char *event, *alias;
23997741e03eSIan Rogers 	int ret;
24007741e03eSIan Rogers 
24017741e03eSIan Rogers 	if (!test_alias(&event, &alias))
24027741e03eSIan Rogers 		return TEST_SKIP;
24037741e03eSIan Rogers 
24047741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
24057741e03eSIan Rogers 
24067741e03eSIan Rogers 	free(event);
24077741e03eSIan Rogers 	free(alias);
24087741e03eSIan Rogers 	return ret;
24097741e03eSIan Rogers }
24107741e03eSIan Rogers 
24117741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
24127741e03eSIan Rogers 				   int subtest __maybe_unused)
2413b4a7276cSJohn Garry {
2414b4a7276cSJohn Garry 	static const char events[][30] = {
2415b4a7276cSJohn Garry 			"event-hyphen",
2416b4a7276cSJohn Garry 			"event-two-hyph",
2417b4a7276cSJohn Garry 	};
24187741e03eSIan Rogers 	int ret = TEST_OK;
2419b4a7276cSJohn Garry 
24207741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
24217741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
24227741e03eSIan Rogers 
24237741e03eSIan Rogers 		if (test_ret != TEST_OK) {
24247741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
24257741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2426b4a7276cSJohn Garry 		}
2427b4a7276cSJohn Garry 	}
2428b4a7276cSJohn Garry 
2429b4a7276cSJohn Garry 	return ret;
2430b4a7276cSJohn Garry }
2431b4a7276cSJohn Garry 
24327741e03eSIan Rogers static struct test_case tests__parse_events[] = {
24337741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
24347741e03eSIan Rogers 			 events2,
24357741e03eSIan Rogers 			 "permissions"),
24367741e03eSIan Rogers 	TEST_CASE_REASON("Test parsing of \"hybrid\" CPU events",
24377741e03eSIan Rogers 			 hybrid,
24387741e03eSIan Rogers 			"not hybrid"),
24397741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
24407741e03eSIan Rogers 			 pmu_events,
24417741e03eSIan Rogers 			 "permissions"),
24427741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
24437741e03eSIan Rogers 			 pmu_events2,
24447741e03eSIan Rogers 			 "permissions"),
24457741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
24467741e03eSIan Rogers 			 "no aliases in sysfs"),
24477741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
24487741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
24497741e03eSIan Rogers 	{	.name = NULL, }
24507741e03eSIan Rogers };
2451945aea22SJiri Olsa 
24527741e03eSIan Rogers struct test_suite suite__parse_events = {
24537741e03eSIan Rogers 	.desc = "Parse event definition strings",
24547741e03eSIan Rogers 	.test_cases = tests__parse_events,
24557741e03eSIan Rogers };
2456