xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 378ef0f5d9d7f4652d7a40e0711e8b845ada1cbd)
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 
23*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
24*378ef0f5SIan 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);
563a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups);
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);
693a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups);
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 }
81*378ef0f5SIan 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 
228*378ef0f5SIan 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 }
259*378ef0f5SIan 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);
452ee4c7588SJiri Olsa 	/*
45378e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
454ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
455ee4c7588SJiri Olsa 	 */
4561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
457945aea22SJiri Olsa 
4587741e03eSIan Rogers 	return TEST_OK;
459945aea22SJiri Olsa }
460945aea22SJiri Olsa 
461*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
46263503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
463945aea22SJiri Olsa {
464515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
465945aea22SJiri Olsa 
4666484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
467945aea22SJiri Olsa 
468945aea22SJiri Olsa 	/* r1 */
4691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
4721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
4731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
477945aea22SJiri Olsa 
47843f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
479e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
481945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
4821fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
4831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
4841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
488945aea22SJiri Olsa 
489945aea22SJiri Olsa 	/* 1:1:hp */
490e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
4921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
497945aea22SJiri Olsa 
4987741e03eSIan Rogers 	return TEST_OK;
499945aea22SJiri Olsa }
500*378ef0f5SIan Rogers #endif
501945aea22SJiri Olsa 
50263503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
503945aea22SJiri Olsa {
504515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
505945aea22SJiri Olsa 
506945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
5076484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
5108ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
511945aea22SJiri Olsa 
512945aea22SJiri Olsa 	/* cpu/config=2/u" */
513e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5146484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
517945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
5188ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
519945aea22SJiri Olsa 
5207741e03eSIan Rogers 	return TEST_OK;
521945aea22SJiri Olsa }
522945aea22SJiri Olsa 
52363503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
52471ef150eSKan Liang {
525515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
52671ef150eSKan Liang 
52771ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
5286484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
53171ef150eSKan Liang 	/*
53278e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
53371ef150eSKan Liang 	 * while this test executes only parse events method.
53471ef150eSKan Liang 	 */
5351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
53627de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
53871ef150eSKan Liang 
53971ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
540e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
54371ef150eSKan Liang 	/*
54478e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
54571ef150eSKan Liang 	 * while this test executes only parse events method.
54671ef150eSKan Liang 	 */
5471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
54827de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
55071ef150eSKan Liang 
5517741e03eSIan Rogers 	return TEST_OK;
55271ef150eSKan Liang }
55371ef150eSKan Liang 
55463503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
555945aea22SJiri Olsa {
556515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
557945aea22SJiri Olsa 
5586484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
5591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
560945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
5611fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
562945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
5631fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5670997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
568945aea22SJiri Olsa 
5697741e03eSIan Rogers 	return TEST_OK;
570945aea22SJiri Olsa }
571945aea22SJiri Olsa 
572ffe59788SKan Liang 
57363503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
574ffe59788SKan Liang {
575515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
576ffe59788SKan Liang 
577ffe59788SKan Liang 	/* pmu-event:u */
5786484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
579ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5801fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
581ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5821fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5860997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
587ffe59788SKan Liang 
588ffe59788SKan Liang 	/* cpu/pmu-event/u*/
589e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5906484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
592ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5931fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
594ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5951fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5990997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned);
600ffe59788SKan Liang 
6017741e03eSIan Rogers 	return TEST_OK;
602ffe59788SKan Liang }
603ffe59788SKan Liang 
604945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
605945aea22SJiri Olsa {
6066cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
607945aea22SJiri Olsa 
608945aea22SJiri Olsa 	/* config=10 */
6096cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
610945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
611945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
612945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
613945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
614945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
6154f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
616945aea22SJiri Olsa 
617945aea22SJiri Olsa 	/* config1 */
6186cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
619945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
620945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
621945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
622945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
623945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6244f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1"));
625945aea22SJiri Olsa 
626945aea22SJiri Olsa 	/* config2=3 */
6276cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
628945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
629945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
630945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
631945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
632945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
6334f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2"));
634945aea22SJiri Olsa 
635945aea22SJiri Olsa 	/* umask=1*/
6366cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
637945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
638945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
639945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
640945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
641945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
642945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
643945aea22SJiri Olsa 
6444929e95aSJiri Olsa 	/*
6454929e95aSJiri Olsa 	 * read
6464929e95aSJiri Olsa 	 *
6474929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
6484929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
6494929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
6504929e95aSJiri Olsa 	 */
6514929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6524929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6534929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
6544929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6554929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6564929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6574929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read"));
6584929e95aSJiri Olsa 
6594929e95aSJiri Olsa 	/*
6604929e95aSJiri Olsa 	 * r0xead
6614929e95aSJiri Olsa 	 *
6624929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
6634929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
6644929e95aSJiri Olsa 	 */
6654929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6664929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6674929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
6684929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6694929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6704929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 0xead);
6714f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
6727741e03eSIan Rogers 	return TEST_OK;
673945aea22SJiri Olsa }
674945aea22SJiri Olsa 
67563503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
676945aea22SJiri Olsa {
67732dcd021SJiri Olsa 	struct evsel *evsel, *leader;
678945aea22SJiri Olsa 
6796484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6803a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
681945aea22SJiri Olsa 
682945aea22SJiri Olsa 	/* instructions:k */
683515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
6841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
685945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6861fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
6871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
6881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
6891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
6911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
6921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
693c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
6945643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
6952bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
696a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
697945aea22SJiri Olsa 
698945aea22SJiri Olsa 	/* cycles:upp */
699e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
701945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7021fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
706945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
7071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
710fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7112bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
712a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
713945aea22SJiri Olsa 
7147741e03eSIan Rogers 	return TEST_OK;
715945aea22SJiri Olsa }
716945aea22SJiri Olsa 
71763503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
718945aea22SJiri Olsa {
71932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
720945aea22SJiri Olsa 
7216484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
7223a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
723945aea22SJiri Olsa 
724945aea22SJiri Olsa 	/* faults + :ku modifier */
725515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
727945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7281fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
7291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
732943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
735c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7365643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7372bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
738a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
739945aea22SJiri Olsa 
740945aea22SJiri Olsa 	/* cache-references + :u modifier */
741e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
743945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7441fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config);
7451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
751fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7522bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
753a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
754945aea22SJiri Olsa 
755945aea22SJiri Olsa 	/* cycles:k */
756e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
758945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7591fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
766c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
767a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
768945aea22SJiri Olsa 
7697741e03eSIan Rogers 	return TEST_OK;
770945aea22SJiri Olsa }
771945aea22SJiri Olsa 
772*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
77363503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
774945aea22SJiri Olsa {
77532dcd021SJiri Olsa 	struct evsel *evsel, *leader;
776945aea22SJiri Olsa 
7776484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
7783a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups);
779945aea22SJiri Olsa 
78043f322b4SRiku Voipio 	/* group1 syscalls:sys_enter_openat:H */
781515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
783945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
7841fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
7851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
7861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
7891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
792c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
793945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
794945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
7955643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7962bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
797a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
798945aea22SJiri Olsa 
799945aea22SJiri Olsa 	/* group1 cycles:kppp */
800e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
802945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8031fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
807945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3);
811fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
812945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
8132bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
814a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
815945aea22SJiri Olsa 
816945aea22SJiri Olsa 	/* group2 cycles + G modifier */
817e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
8181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
819945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8201fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
827c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
828945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
829945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
8305643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8312bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
832a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
833945aea22SJiri Olsa 
834945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
835e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
8371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config);
8381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
844fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8452bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
846a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
847945aea22SJiri Olsa 
848945aea22SJiri Olsa 	/* instructions:u */
849e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
851945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8521fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
856943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
859c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
860a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
861945aea22SJiri Olsa 
8627741e03eSIan Rogers 	return TEST_OK;
863945aea22SJiri Olsa }
864*378ef0f5SIan Rogers #endif
865945aea22SJiri Olsa 
86663503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
867945aea22SJiri Olsa {
86832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
869945aea22SJiri Olsa 
8706484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
8713a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
872945aea22SJiri Olsa 
873945aea22SJiri Olsa 	/* cycles:u + p */
874515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
8751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
876945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8771fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
881945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
885945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
886c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
8875643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8882bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
889a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
890945aea22SJiri Olsa 
891945aea22SJiri Olsa 	/* instructions:kp + p */
892e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
894945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8951fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
899945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
9001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
903fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9042bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
905a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
906945aea22SJiri Olsa 
9077741e03eSIan Rogers 	return TEST_OK;
908945aea22SJiri Olsa }
909945aea22SJiri Olsa 
91063503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
911945aea22SJiri Olsa {
91232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
913945aea22SJiri Olsa 
9146484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
9153a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups);
916945aea22SJiri Olsa 
917945aea22SJiri Olsa 	/* cycles + G */
918515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
920945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9211fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
928945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
929c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9305643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9312bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
932a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
933945aea22SJiri Olsa 
934945aea22SJiri Olsa 	/* instructions + G */
935e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
937945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9381fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
945fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9462bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
947a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
948945aea22SJiri Olsa 
949945aea22SJiri Olsa 	/* cycles:G */
950e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
9511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
952945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9531fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
960945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
961c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9625643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9632bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
964a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
965945aea22SJiri Olsa 
966945aea22SJiri Olsa 	/* instructions:G */
967e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
969945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9701fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
977fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9782bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
979945aea22SJiri Olsa 
980945aea22SJiri Olsa 	/* cycles */
981e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
983945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9841fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
991c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
992945aea22SJiri Olsa 
9937741e03eSIan Rogers 	return TEST_OK;
994945aea22SJiri Olsa }
995945aea22SJiri Olsa 
99663503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
9975a30a99fSJiri Olsa {
99832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
9995a30a99fSJiri Olsa 
10006484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10013a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
10025a30a99fSJiri Olsa 
10035a30a99fSJiri Olsa 	/* cycles + :H group modifier */
1004515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10065a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10071fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10145a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1015c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10165643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10172bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10185a30a99fSJiri Olsa 
10195a30a99fSJiri Olsa 	/* cache-misses:G + :H group modifier */
1020e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10225a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10231fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1030fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10312bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10325a30a99fSJiri Olsa 
10337741e03eSIan Rogers 	return TEST_OK;
10345a30a99fSJiri Olsa }
10355a30a99fSJiri Olsa 
103663503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
10375a30a99fSJiri Olsa {
103832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10395a30a99fSJiri Olsa 
10406484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10413a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
10425a30a99fSJiri Olsa 
10435a30a99fSJiri Olsa 	/* cycles + :G group modifier */
1044515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10465a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10471fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10545a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1055c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10565643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10572bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10585a30a99fSJiri Olsa 
10595a30a99fSJiri Olsa 	/* cache-misses:H + :G group modifier */
1060e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10625a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10631fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1070fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10712bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10725a30a99fSJiri Olsa 
10737741e03eSIan Rogers 	return TEST_OK;
10745a30a99fSJiri Olsa }
10755a30a99fSJiri Olsa 
107663503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
10775a30a99fSJiri Olsa {
107832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10795a30a99fSJiri Olsa 
10806484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10813a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
10825a30a99fSJiri Olsa 
10835a30a99fSJiri Olsa 	/* cycles:G + :u group modifier */
1084515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10865a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10871fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10945a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1095c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10965643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10972bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10985a30a99fSJiri Olsa 
10995a30a99fSJiri Olsa 	/* cache-misses:H + :u group modifier */
1100e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11025a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11031fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1110fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11112bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11125a30a99fSJiri Olsa 
11137741e03eSIan Rogers 	return TEST_OK;
11145a30a99fSJiri Olsa }
11155a30a99fSJiri Olsa 
111663503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
11175a30a99fSJiri Olsa {
111832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
11195a30a99fSJiri Olsa 
11206484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
11213a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
11225a30a99fSJiri Olsa 
11235a30a99fSJiri Olsa 	/* cycles:G + :uG group modifier */
1124515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11265a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11271fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11345a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1135c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11365643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11372bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11385a30a99fSJiri Olsa 
11395a30a99fSJiri Olsa 	/* cache-misses:H + :uG group modifier */
1140e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11425a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11431fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1150fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11512bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11525a30a99fSJiri Olsa 
11537741e03eSIan Rogers 	return TEST_OK;
11545a30a99fSJiri Olsa }
11555a30a99fSJiri Olsa 
115663503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1157a9f93f97SJiri Olsa {
115832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1159a9f93f97SJiri Olsa 
11606484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1161a9f93f97SJiri Olsa 
1162a9f93f97SJiri Olsa 	/* cycles - sampling group leader */
1163515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1165a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11661fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1173a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1174fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1175a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1176a9f93f97SJiri Olsa 
1177a9f93f97SJiri Olsa 	/* cache-misses - not sampling */
1178e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1180a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11811fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1188fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1189a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1190a9f93f97SJiri Olsa 
1191a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1192e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1194a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11951fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
11961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1202a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1203fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1204a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1205a9f93f97SJiri Olsa 
12067741e03eSIan Rogers 	return TEST_OK;
1207a9f93f97SJiri Olsa }
1208a9f93f97SJiri Olsa 
120963503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1210a9f93f97SJiri Olsa {
121132dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1212a9f93f97SJiri Olsa 
12136484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
1214a9f93f97SJiri Olsa 
1215a9f93f97SJiri Olsa 	/* instructions - sampling group leader */
1216515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1218a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12191fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
12201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1226a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1227fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1228a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1229a9f93f97SJiri Olsa 
1230a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1231e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1233a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12341fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1241a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1242fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1243a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1244a9f93f97SJiri Olsa 
12457741e03eSIan Rogers 	return TEST_OK;
1246a9f93f97SJiri Olsa }
1247a9f93f97SJiri Olsa 
124863503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1249c9ee780fSMichael Ellerman {
1250515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1251c9ee780fSMichael Ellerman 
12521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1257c9ee780fSMichael Ellerman 
1258c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1259c9ee780fSMichael Ellerman }
1260c9ee780fSMichael Ellerman 
126163503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1262c9ee780fSMichael Ellerman {
126332dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1264c9ee780fSMichael Ellerman 
12656484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1266c9ee780fSMichael Ellerman 
1267c9ee780fSMichael Ellerman 	/* cycles - group leader */
1268515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1270c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12711fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
1272c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1273fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1275c9ee780fSMichael Ellerman 
1276c9ee780fSMichael Ellerman 	/* cache-misses - can not be pinned, but will go on with the leader */
1277e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1279c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12801fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
12811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1282c9ee780fSMichael Ellerman 
1283c9ee780fSMichael Ellerman 	/* branch-misses - ditto */
1284e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
1285c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12861fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1288c9ee780fSMichael Ellerman 
12897741e03eSIan Rogers 	return TEST_OK;
1290c9ee780fSMichael Ellerman }
1291c9ee780fSMichael Ellerman 
12920997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist)
12930997a266SAndi Kleen {
12940997a266SAndi Kleen 	struct evsel *evsel = evlist__first(evlist);
12950997a266SAndi Kleen 
12960997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12970997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12980997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12990997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
13000997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13010997a266SAndi Kleen 
13020997a266SAndi Kleen 	return test__checkevent_symbolic_name(evlist);
13030997a266SAndi Kleen }
13040997a266SAndi Kleen 
13050997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist)
13060997a266SAndi Kleen {
13070997a266SAndi Kleen 	struct evsel *evsel, *leader;
13080997a266SAndi Kleen 
13090997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
13100997a266SAndi Kleen 
13110997a266SAndi Kleen 	/* cycles - group leader */
13120997a266SAndi Kleen 	evsel = leader = evlist__first(evlist);
13130997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13140997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13150997a266SAndi Kleen 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
13160997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1317fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13180997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13190997a266SAndi Kleen 
13200997a266SAndi Kleen 	/* cache-misses - can not be pinned, but will go on with the leader */
13210997a266SAndi Kleen 	evsel = evsel__next(evsel);
13220997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13230997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13240997a266SAndi Kleen 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
13250997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13260997a266SAndi Kleen 
13270997a266SAndi Kleen 	/* branch-misses - ditto */
13280997a266SAndi Kleen 	evsel = evsel__next(evsel);
13290997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13300997a266SAndi Kleen 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
13310997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13320997a266SAndi Kleen 
13337741e03eSIan Rogers 	return TEST_OK;
13340997a266SAndi Kleen }
133563503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1336ec32398cSJacob Shin {
1337515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1338ec32398cSJacob Shin 
13396484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1342ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
13431fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1344ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
13451fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1346ec32398cSJacob Shin 
13477741e03eSIan Rogers 	return TEST_OK;
1348ec32398cSJacob Shin }
1349ec32398cSJacob Shin 
135063503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1351ec32398cSJacob Shin {
1352515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1353ec32398cSJacob Shin 
13546484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1357ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
13581fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1359ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
13601fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1361ec32398cSJacob Shin 
13627741e03eSIan Rogers 	return TEST_OK;
1363ec32398cSJacob Shin }
1364ec32398cSJacob Shin 
1365ec32398cSJacob Shin static int
136663503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1367ec32398cSJacob Shin {
1368515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1369ec32398cSJacob Shin 
13701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1374ec32398cSJacob Shin 
1375ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1376ec32398cSJacob Shin }
1377ec32398cSJacob Shin 
137863503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1379ddd83c97SJiri Olsa {
1380515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1381ddd83c97SJiri Olsa 
13826484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
13831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1384ddd83c97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
13851fc632ceSJiri Olsa 			PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config);
13867741e03eSIan Rogers 	return TEST_OK;
1387ddd83c97SJiri Olsa }
1388ddd83c97SJiri Olsa 
138963503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
139010bf358aSWang Nan {
1391515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
139210bf358aSWang Nan 
139310bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0);
13947741e03eSIan Rogers 	return TEST_OK;
139510bf358aSWang Nan }
139610bf358aSWang Nan 
139763503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
139810bf358aSWang Nan {
1399515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
140010bf358aSWang Nan 
140110bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0);
14027741e03eSIan Rogers 	return TEST_OK;
140310bf358aSWang Nan }
140410bf358aSWang Nan 
140563503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
140610bf358aSWang Nan {
1407515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
140810bf358aSWang Nan 
140910bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0);
14107741e03eSIan Rogers 	return TEST_OK;
141110bf358aSWang Nan }
141210bf358aSWang Nan 
141363503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
141443d0b978SWang Nan {
1415515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
141643d0b978SWang Nan 
141743d0b978SWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0);
14187741e03eSIan Rogers 	return TEST_OK;
141943d0b978SWang Nan }
142010bf358aSWang Nan 
142116ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
142216ddcfbfSJiri Olsa {
142316ddcfbfSJiri Olsa 	return !!perf_pmu__find("intel_pt");
142416ddcfbfSJiri Olsa }
142516ddcfbfSJiri Olsa 
142663503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1427b3f58c8dSArnaldo Carvalho de Melo {
1428515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1429b3f58c8dSArnaldo Carvalho de Melo 
1430b3f58c8dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0);
14317741e03eSIan Rogers 	return TEST_OK;
1432b3f58c8dSArnaldo Carvalho de Melo }
1433b3f58c8dSArnaldo Carvalho de Melo 
143463503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
143506dc5bf2SAlexey Budankov {
1436515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
143706dc5bf2SAlexey Budankov 
143806dc5bf2SAlexey Budankov 	TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0);
14397741e03eSIan Rogers 	return TEST_OK;
144006dc5bf2SAlexey Budankov }
144106dc5bf2SAlexey Budankov 
14423a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
14433a6c51e4SJiri Olsa {
14443a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
14453a6c51e4SJiri Olsa 
14463a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
14473a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
14483a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
14497741e03eSIan Rogers 	return TEST_OK;
14503a6c51e4SJiri Olsa }
14513a6c51e4SJiri Olsa 
145263503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1453714a92d8SJiri Olsa {
1454515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1455714a92d8SJiri Olsa 
14561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14597741e03eSIan Rogers 	return TEST_OK;
1460714a92d8SJiri Olsa }
1461714a92d8SJiri Olsa 
146263503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1463714a92d8SJiri Olsa {
1464515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1465714a92d8SJiri Olsa 
14661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
14697741e03eSIan Rogers 	return TEST_OK;
1470714a92d8SJiri Olsa }
1471714a92d8SJiri Olsa 
1472*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
147382ce75d9SJiri Olsa static int count_tracepoints(void)
147482ce75d9SJiri Olsa {
147582ce75d9SJiri Olsa 	struct dirent *events_ent;
147682ce75d9SJiri Olsa 	DIR *events_dir;
147782ce75d9SJiri Olsa 	int cnt = 0;
147882ce75d9SJiri Olsa 
14797014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
148082ce75d9SJiri Olsa 
148182ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
148282ce75d9SJiri Olsa 
148382ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
148425a7d914SArnaldo Carvalho de Melo 		char *sys_path;
148582ce75d9SJiri Olsa 		struct dirent *sys_ent;
148682ce75d9SJiri Olsa 		DIR *sys_dir;
148782ce75d9SJiri Olsa 
148882ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
148982ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
149082ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
149182ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
149282ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
149382ce75d9SJiri Olsa 			continue;
149482ce75d9SJiri Olsa 
149525a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
149625a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
149782ce75d9SJiri Olsa 
149882ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
149982ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
150082ce75d9SJiri Olsa 
150182ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
150282ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
150382ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
150482ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
150582ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
150682ce75d9SJiri Olsa 				continue;
150782ce75d9SJiri Olsa 
150882ce75d9SJiri Olsa 			cnt++;
150982ce75d9SJiri Olsa 		}
151082ce75d9SJiri Olsa 
151182ce75d9SJiri Olsa 		closedir(sys_dir);
151225a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
151382ce75d9SJiri Olsa 	}
151482ce75d9SJiri Olsa 
151582ce75d9SJiri Olsa 	closedir(events_dir);
151682ce75d9SJiri Olsa 	return cnt;
151782ce75d9SJiri Olsa }
151882ce75d9SJiri Olsa 
151963503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
152082ce75d9SJiri Olsa {
152182ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
15226484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
152382ce75d9SJiri Olsa 
152482ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
152582ce75d9SJiri Olsa }
1526*378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */
152782ce75d9SJiri Olsa 
15282541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist)
15292541cb63SJin Yao {
15302541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
15312541cb63SJin Yao 
15322541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
15332541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15342541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
15357741e03eSIan Rogers 	return TEST_OK;
15362541cb63SJin Yao }
15372541cb63SJin Yao 
15382541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist)
15392541cb63SJin Yao {
15402541cb63SJin Yao 	struct evsel *evsel, *leader;
15412541cb63SJin Yao 
15422541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15432541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == 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);
1546fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15472541cb63SJin Yao 
15482541cb63SJin Yao 	evsel = evsel__next(evsel);
15492541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15502541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config);
1551fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15527741e03eSIan Rogers 	return TEST_OK;
15532541cb63SJin Yao }
15542541cb63SJin Yao 
15552541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist)
15562541cb63SJin Yao {
15572541cb63SJin Yao 	struct evsel *evsel, *leader;
15582541cb63SJin Yao 
15592541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15602541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15612541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1562fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15632541cb63SJin Yao 
15642541cb63SJin Yao 	evsel = evsel__next(evsel);
15652541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15662541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1567fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15687741e03eSIan Rogers 	return TEST_OK;
15692541cb63SJin Yao }
15702541cb63SJin Yao 
15712541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist)
15722541cb63SJin Yao {
15732541cb63SJin Yao 	struct evsel *evsel, *leader;
15742541cb63SJin Yao 
15752541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15762541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15772541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15782541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1579fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15802541cb63SJin Yao 
15812541cb63SJin Yao 	evsel = evsel__next(evsel);
15822541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1583fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15847741e03eSIan Rogers 	return TEST_OK;
15852541cb63SJin Yao }
15862541cb63SJin Yao 
15872541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist)
15882541cb63SJin Yao {
15892541cb63SJin Yao 	struct evsel *evsel, *leader;
15902541cb63SJin Yao 
15912541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15922541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15932541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15942541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1595fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15962541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
15972541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
15982541cb63SJin Yao 
15992541cb63SJin Yao 	evsel = evsel__next(evsel);
16002541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16012541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config);
1602fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
16032541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
16042541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
16057741e03eSIan Rogers 	return TEST_OK;
16062541cb63SJin Yao }
16072541cb63SJin Yao 
16082541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist)
16092541cb63SJin Yao {
16102541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16112541cb63SJin Yao 
1612490e9a8fSJin Yao 	if (!perf_pmu__hybrid_mounted("cpu_atom")) {
1613490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1614490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
1615490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16167741e03eSIan Rogers 		return TEST_OK;
1617490e9a8fSJin Yao 	}
1618490e9a8fSJin Yao 
16192541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
16202541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16212541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16222541cb63SJin Yao 
16232541cb63SJin Yao 	/* The type of second event is randome value */
16242541cb63SJin Yao 	evsel = evsel__next(evsel);
16252541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16267741e03eSIan Rogers 	return TEST_OK;
16272541cb63SJin Yao }
16282541cb63SJin Yao 
16292541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist)
16302541cb63SJin Yao {
16312541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16322541cb63SJin Yao 
16332541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16342541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16352541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16367741e03eSIan Rogers 	return TEST_OK;
16372541cb63SJin Yao }
16382541cb63SJin Yao 
16392541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist)
16402541cb63SJin Yao {
16412541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16422541cb63SJin Yao 
1643490e9a8fSJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16442541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
16452541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff));
16467741e03eSIan Rogers 	return TEST_OK;
16472541cb63SJin Yao }
16482541cb63SJin Yao 
164923b6339bSArnaldo Carvalho de Melo struct evlist_test {
1650945aea22SJiri Olsa 	const char *name;
165116ddcfbfSJiri Olsa 	bool (*valid)(void);
165263503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1653945aea22SJiri Olsa };
1654945aea22SJiri Olsa 
16558252e791SIan Rogers static const struct evlist_test test__events[] = {
1656*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1657615b8f99SAlexander Yarygin 	{
165843f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1659945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
16608252e791SIan Rogers 		/* 0 */
1661945aea22SJiri Olsa 	},
1662615b8f99SAlexander Yarygin 	{
1663945aea22SJiri Olsa 		.name  = "syscalls:*",
1664945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
16658252e791SIan Rogers 		/* 1 */
1666945aea22SJiri Olsa 	},
1667*378ef0f5SIan Rogers #endif
1668615b8f99SAlexander Yarygin 	{
1669945aea22SJiri Olsa 		.name  = "r1a",
1670945aea22SJiri Olsa 		.check = test__checkevent_raw,
16718252e791SIan Rogers 		/* 2 */
1672945aea22SJiri Olsa 	},
1673615b8f99SAlexander Yarygin 	{
1674945aea22SJiri Olsa 		.name  = "1:1",
1675945aea22SJiri Olsa 		.check = test__checkevent_numeric,
16768252e791SIan Rogers 		/* 3 */
1677945aea22SJiri Olsa 	},
1678615b8f99SAlexander Yarygin 	{
1679945aea22SJiri Olsa 		.name  = "instructions",
1680945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
16818252e791SIan Rogers 		/* 4 */
1682945aea22SJiri Olsa 	},
1683615b8f99SAlexander Yarygin 	{
1684945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1685945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
16868252e791SIan Rogers 		/* 5 */
1687945aea22SJiri Olsa 	},
1688615b8f99SAlexander Yarygin 	{
1689945aea22SJiri Olsa 		.name  = "faults",
1690945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
16918252e791SIan Rogers 		/* 6 */
1692945aea22SJiri Olsa 	},
1693615b8f99SAlexander Yarygin 	{
1694945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1695945aea22SJiri Olsa 		.check = test__checkevent_genhw,
16968252e791SIan Rogers 		/* 7 */
1697945aea22SJiri Olsa 	},
1698615b8f99SAlexander Yarygin 	{
1699945aea22SJiri Olsa 		.name  = "mem:0",
1700945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
17018252e791SIan Rogers 		/* 8 */
1702945aea22SJiri Olsa 	},
1703615b8f99SAlexander Yarygin 	{
1704945aea22SJiri Olsa 		.name  = "mem:0:x",
1705945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
17068252e791SIan Rogers 		/* 9 */
1707945aea22SJiri Olsa 	},
1708615b8f99SAlexander Yarygin 	{
1709945aea22SJiri Olsa 		.name  = "mem:0:r",
1710945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
17118252e791SIan Rogers 		/* 0 */
1712945aea22SJiri Olsa 	},
1713615b8f99SAlexander Yarygin 	{
1714945aea22SJiri Olsa 		.name  = "mem:0:w",
1715945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
17168252e791SIan Rogers 		/* 1 */
1717945aea22SJiri Olsa 	},
1718*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1719615b8f99SAlexander Yarygin 	{
172043f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1721945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
17228252e791SIan Rogers 		/* 2 */
1723945aea22SJiri Olsa 	},
1724615b8f99SAlexander Yarygin 	{
1725945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1726945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
17278252e791SIan Rogers 		/* 3 */
1728945aea22SJiri Olsa 	},
1729*378ef0f5SIan Rogers #endif
1730615b8f99SAlexander Yarygin 	{
1731945aea22SJiri Olsa 		.name  = "r1a:kp",
1732945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
17338252e791SIan Rogers 		/* 4 */
1734945aea22SJiri Olsa 	},
1735615b8f99SAlexander Yarygin 	{
1736945aea22SJiri Olsa 		.name  = "1:1:hp",
1737945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
17388252e791SIan Rogers 		/* 5 */
1739945aea22SJiri Olsa 	},
1740615b8f99SAlexander Yarygin 	{
1741945aea22SJiri Olsa 		.name  = "instructions:h",
1742945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
17438252e791SIan Rogers 		/* 6 */
1744945aea22SJiri Olsa 	},
1745615b8f99SAlexander Yarygin 	{
1746945aea22SJiri Olsa 		.name  = "faults:u",
1747945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
17488252e791SIan Rogers 		/* 7 */
1749945aea22SJiri Olsa 	},
1750615b8f99SAlexander Yarygin 	{
1751945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1752945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
17538252e791SIan Rogers 		/* 8 */
1754945aea22SJiri Olsa 	},
1755615b8f99SAlexander Yarygin 	{
1756945aea22SJiri Olsa 		.name  = "mem:0:u",
1757945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
17588252e791SIan Rogers 		/* 9 */
1759945aea22SJiri Olsa 	},
1760615b8f99SAlexander Yarygin 	{
1761945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1762945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
17638252e791SIan Rogers 		/* 0 */
1764945aea22SJiri Olsa 	},
1765615b8f99SAlexander Yarygin 	{
1766945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1767945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
17688252e791SIan Rogers 		/* 1 */
1769945aea22SJiri Olsa 	},
1770615b8f99SAlexander Yarygin 	{
1771945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1772945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
17738252e791SIan Rogers 		/* 2 */
1774945aea22SJiri Olsa 	},
1775*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1776615b8f99SAlexander Yarygin 	{
177743f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1778945aea22SJiri Olsa 		.check = test__checkevent_list,
17798252e791SIan Rogers 		/* 3 */
1780945aea22SJiri Olsa 	},
1781*378ef0f5SIan Rogers #endif
1782615b8f99SAlexander Yarygin 	{
1783945aea22SJiri Olsa 		.name  = "instructions:G",
1784945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
17858252e791SIan Rogers 		/* 4 */
1786945aea22SJiri Olsa 	},
1787615b8f99SAlexander Yarygin 	{
1788945aea22SJiri Olsa 		.name  = "instructions:H",
1789945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
17908252e791SIan Rogers 		/* 5 */
1791945aea22SJiri Olsa 	},
1792615b8f99SAlexander Yarygin 	{
1793945aea22SJiri Olsa 		.name  = "mem:0:rw",
1794945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
17958252e791SIan Rogers 		/* 6 */
1796945aea22SJiri Olsa 	},
1797615b8f99SAlexander Yarygin 	{
1798945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1799945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
18008252e791SIan Rogers 		/* 7 */
1801945aea22SJiri Olsa 	},
1802615b8f99SAlexander Yarygin 	{
1803945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1804945aea22SJiri Olsa 		.check = test__group1,
18058252e791SIan Rogers 		/* 8 */
1806945aea22SJiri Olsa 	},
1807615b8f99SAlexander Yarygin 	{
1808945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1809945aea22SJiri Olsa 		.check = test__group2,
18108252e791SIan Rogers 		/* 9 */
1811945aea22SJiri Olsa 	},
1812*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1813615b8f99SAlexander Yarygin 	{
181443f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1815945aea22SJiri Olsa 		.check = test__group3,
18168252e791SIan Rogers 		/* 0 */
1817945aea22SJiri Olsa 	},
1818*378ef0f5SIan Rogers #endif
1819615b8f99SAlexander Yarygin 	{
1820945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1821945aea22SJiri Olsa 		.check = test__group4,
18228252e791SIan Rogers 		/* 1 */
1823945aea22SJiri Olsa 	},
1824615b8f99SAlexander Yarygin 	{
1825945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1826945aea22SJiri Olsa 		.check = test__group5,
18278252e791SIan Rogers 		/* 2 */
1828945aea22SJiri Olsa 	},
1829*378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1830615b8f99SAlexander Yarygin 	{
183182ce75d9SJiri Olsa 		.name  = "*:*",
183282ce75d9SJiri Olsa 		.check = test__all_tracepoints,
18338252e791SIan Rogers 		/* 3 */
183482ce75d9SJiri Olsa 	},
1835*378ef0f5SIan Rogers #endif
1836615b8f99SAlexander Yarygin 	{
18375a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
18385a30a99fSJiri Olsa 		.check = test__group_gh1,
18398252e791SIan Rogers 		/* 4 */
18405a30a99fSJiri Olsa 	},
1841615b8f99SAlexander Yarygin 	{
18425a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
18435a30a99fSJiri Olsa 		.check = test__group_gh2,
18448252e791SIan Rogers 		/* 5 */
18455a30a99fSJiri Olsa 	},
1846615b8f99SAlexander Yarygin 	{
18475a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
18485a30a99fSJiri Olsa 		.check = test__group_gh3,
18498252e791SIan Rogers 		/* 6 */
18505a30a99fSJiri Olsa 	},
1851615b8f99SAlexander Yarygin 	{
18525a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
18535a30a99fSJiri Olsa 		.check = test__group_gh4,
18548252e791SIan Rogers 		/* 7 */
18555a30a99fSJiri Olsa 	},
1856615b8f99SAlexander Yarygin 	{
1857a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1858a9f93f97SJiri Olsa 		.check = test__leader_sample1,
18598252e791SIan Rogers 		/* 8 */
1860a9f93f97SJiri Olsa 	},
1861615b8f99SAlexander Yarygin 	{
1862a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1863a9f93f97SJiri Olsa 		.check = test__leader_sample2,
18648252e791SIan Rogers 		/* 9 */
1865a9f93f97SJiri Olsa 	},
1866615b8f99SAlexander Yarygin 	{
1867c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1868c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
18698252e791SIan Rogers 		/* 0 */
1870c9ee780fSMichael Ellerman 	},
1871615b8f99SAlexander Yarygin 	{
1872c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1873c9ee780fSMichael Ellerman 		.check = test__pinned_group,
18748252e791SIan Rogers 		/* 1 */
1875c9ee780fSMichael Ellerman 	},
1876ec32398cSJacob Shin 	{
1877ec32398cSJacob Shin 		.name  = "mem:0/1",
1878ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
18798252e791SIan Rogers 		/* 2 */
1880ec32398cSJacob Shin 	},
1881ec32398cSJacob Shin 	{
1882ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1883ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
18848252e791SIan Rogers 		/* 3 */
1885ec32398cSJacob Shin 	},
1886ec32398cSJacob Shin 	{
1887ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1888ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
18898252e791SIan Rogers 		/* 4 */
1890ec32398cSJacob Shin 	},
1891*378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT)
1892c0bc8c6dSAlexander Yarygin 	{
1893c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1894c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
189553fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
18968252e791SIan Rogers 		/* 0 */
1897c0bc8c6dSAlexander Yarygin 	},
1898c0bc8c6dSAlexander Yarygin #endif
1899a1e12da4SJiri Olsa 	{
1900a1e12da4SJiri Olsa 		.name  = "instructions:I",
1901a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
19028252e791SIan Rogers 		/* 5 */
1903a1e12da4SJiri Olsa 	},
1904a1e12da4SJiri Olsa 	{
1905a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1906a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
19078252e791SIan Rogers 		/* 6 */
1908a1e12da4SJiri Olsa 	},
1909ddd83c97SJiri Olsa 	{
1910ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1911ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
19128252e791SIan Rogers 		/* 7 */
1913ddd83c97SJiri Olsa 	},
191410bf358aSWang Nan 	{
191510bf358aSWang Nan 		.name  = "instructions/name=insn/",
191610bf358aSWang Nan 		.check = test__checkevent_config_symbol,
19178252e791SIan Rogers 		/* 8 */
191810bf358aSWang Nan 	},
191910bf358aSWang Nan 	{
192010bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
192110bf358aSWang Nan 		.check = test__checkevent_config_raw,
19228252e791SIan Rogers 		/* 9 */
192310bf358aSWang Nan 	},
192410bf358aSWang Nan 	{
192510bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
192610bf358aSWang Nan 		.check = test__checkevent_config_num,
19278252e791SIan Rogers 		/* 0 */
192810bf358aSWang Nan 	},
192943d0b978SWang Nan 	{
193043d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
193143d0b978SWang Nan 		.check = test__checkevent_config_cache,
19328252e791SIan Rogers 		/* 1 */
193343d0b978SWang Nan 	},
1934b3f58c8dSArnaldo Carvalho de Melo 	{
1935b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
193616ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1937b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
19388252e791SIan Rogers 		/* 2 */
1939b3f58c8dSArnaldo Carvalho de Melo 	},
194006dc5bf2SAlexey Budankov 	{
194106dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
194206dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
19438252e791SIan Rogers 		/* 3 */
1944714a92d8SJiri Olsa 	},
1945714a92d8SJiri Olsa 	{
1946714a92d8SJiri Olsa 		.name  = "cycles//u",
1947714a92d8SJiri Olsa 		.check = test__sym_event_slash,
19488252e791SIan Rogers 		/* 4 */
1949714a92d8SJiri Olsa 	},
1950714a92d8SJiri Olsa 	{
1951714a92d8SJiri Olsa 		.name  = "cycles:k",
1952714a92d8SJiri Olsa 		.check = test__sym_event_dc,
19538252e791SIan Rogers 		/* 5 */
19540997a266SAndi Kleen 	},
19550997a266SAndi Kleen 	{
19560997a266SAndi Kleen 		.name  = "instructions:uep",
19570997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
19588252e791SIan Rogers 		/* 6 */
19590997a266SAndi Kleen 	},
19600997a266SAndi Kleen 	{
19610997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
19620997a266SAndi Kleen 		.check = test__exclusive_group,
19638252e791SIan Rogers 		/* 7 */
19640997a266SAndi Kleen 	},
1965945aea22SJiri Olsa };
1966945aea22SJiri Olsa 
19678252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
1968615b8f99SAlexander Yarygin 	{
1969945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
1970945aea22SJiri Olsa 		.check = test__checkevent_pmu,
19718252e791SIan Rogers 		/* 0 */
1972945aea22SJiri Olsa 	},
1973615b8f99SAlexander Yarygin 	{
1974945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
1975945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
19768252e791SIan Rogers 		/* 1 */
1977945aea22SJiri Olsa 	},
197871ef150eSKan Liang 	{
197971ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
198071ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
19818252e791SIan Rogers 		/* 2 */
198271ef150eSKan Liang 	},
198306dc5bf2SAlexey Budankov 	{
1984a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
198506dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
19868252e791SIan Rogers 		/* 3 */
19873a6c51e4SJiri Olsa 	},
19883a6c51e4SJiri Olsa 	{
19893a6c51e4SJiri Olsa 		.name  = "software/r1a/",
19903a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
19918252e791SIan Rogers 		/* 4 */
19923a6c51e4SJiri Olsa 	},
1993c33cdf54SJiri Olsa 	{
1994c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
1995c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
19968252e791SIan Rogers 		/* 5 */
1997c33cdf54SJiri Olsa 	},
1998945aea22SJiri Olsa };
1999945aea22SJiri Olsa 
200023b6339bSArnaldo Carvalho de Melo struct terms_test {
2001945aea22SJiri Olsa 	const char *str;
2002945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
2003945aea22SJiri Olsa };
2004945aea22SJiri Olsa 
2005b58eca40SIan Rogers static const struct terms_test test__terms[] = {
2006945aea22SJiri Olsa 	[0] = {
20074929e95aSJiri Olsa 		.str   = "config=10,config1,config2=3,umask=1,read,r0xead",
2008945aea22SJiri Olsa 		.check = test__checkterms_simple,
2009945aea22SJiri Olsa 	},
2010945aea22SJiri Olsa };
2011945aea22SJiri Olsa 
20128252e791SIan Rogers static const struct evlist_test test__hybrid_events[] = {
20132541cb63SJin Yao 	{
20142541cb63SJin Yao 		.name  = "cpu_core/cpu-cycles/",
20152541cb63SJin Yao 		.check = test__hybrid_hw_event_with_pmu,
20168252e791SIan Rogers 		/* 0 */
20172541cb63SJin Yao 	},
20182541cb63SJin Yao 	{
20192541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/,cpu_core/instructions/}",
20202541cb63SJin Yao 		.check = test__hybrid_hw_group_event,
20218252e791SIan Rogers 		/* 1 */
20222541cb63SJin Yao 	},
20232541cb63SJin Yao 	{
20242541cb63SJin Yao 		.name  = "{cpu-clock,cpu_core/cpu-cycles/}",
20252541cb63SJin Yao 		.check = test__hybrid_sw_hw_group_event,
20268252e791SIan Rogers 		/* 2 */
20272541cb63SJin Yao 	},
20282541cb63SJin Yao 	{
20292541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/,cpu-clock}",
20302541cb63SJin Yao 		.check = test__hybrid_hw_sw_group_event,
20318252e791SIan Rogers 		/* 3 */
20322541cb63SJin Yao 	},
20332541cb63SJin Yao 	{
20342541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}",
20352541cb63SJin Yao 		.check = test__hybrid_group_modifier1,
20368252e791SIan Rogers 		/* 4 */
20372541cb63SJin Yao 	},
20382541cb63SJin Yao 	{
20392541cb63SJin Yao 		.name  = "r1a",
20402541cb63SJin Yao 		.check = test__hybrid_raw1,
20418252e791SIan Rogers 		/* 5 */
20422541cb63SJin Yao 	},
20432541cb63SJin Yao 	{
20442541cb63SJin Yao 		.name  = "cpu_core/r1a/",
20452541cb63SJin Yao 		.check = test__hybrid_raw2,
20468252e791SIan Rogers 		/* 6 */
20472541cb63SJin Yao 	},
20482541cb63SJin Yao 	{
20492541cb63SJin Yao 		.name  = "cpu_core/config=10,config1,config2=3,period=1000/u",
20502541cb63SJin Yao 		.check = test__checkevent_pmu,
20518252e791SIan Rogers 		/* 7 */
20522541cb63SJin Yao 	},
20532541cb63SJin Yao 	{
2054490e9a8fSJin Yao 		.name  = "cpu_core/LLC-loads/",
20552541cb63SJin Yao 		.check = test__hybrid_cache_event,
20568252e791SIan Rogers 		/* 8 */
20572541cb63SJin Yao 	},
20582541cb63SJin Yao };
20592541cb63SJin Yao 
20608252e791SIan Rogers static int test_event(const struct evlist_test *e)
2061945aea22SJiri Olsa {
2062a910e466SIan Rogers 	struct parse_events_error err;
206363503dbaSJiri Olsa 	struct evlist *evlist;
2064945aea22SJiri Olsa 	int ret;
2065945aea22SJiri Olsa 
206616ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
20677741e03eSIan Rogers 		pr_debug("... SKIP\n");
20687741e03eSIan Rogers 		return TEST_OK;
206916ddcfbfSJiri Olsa 	}
207016ddcfbfSJiri Olsa 
20710f98b11cSJiri Olsa 	evlist = evlist__new();
20727741e03eSIan Rogers 	if (evlist == NULL) {
20737741e03eSIan Rogers 		pr_err("Failed allocation");
20747741e03eSIan Rogers 		return TEST_FAIL;
20757741e03eSIan Rogers 	}
207607eafd4eSIan Rogers 	parse_events_error__init(&err);
2077933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
2078945aea22SJiri Olsa 	if (ret) {
2079933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2080933ccf20SJiri Olsa 			 e->name, ret, err.str);
20816c191289SIan Rogers 		parse_events_error__print(&err, e->name);
20827741e03eSIan Rogers 		ret = TEST_FAIL;
20837741e03eSIan Rogers 		if (strstr(err.str, "can't access trace events"))
20847741e03eSIan Rogers 			ret = TEST_SKIP;
20852d4352c0SArnaldo Carvalho de Melo 	} else {
20862d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
2087945aea22SJiri Olsa 	}
208807eafd4eSIan Rogers 	parse_events_error__exit(&err);
2089c12995a5SJiri Olsa 	evlist__delete(evlist);
2090945aea22SJiri Olsa 
2091945aea22SJiri Olsa 	return ret;
2092945aea22SJiri Olsa }
2093945aea22SJiri Olsa 
2094b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
2095b4a7276cSJohn Garry {
2096b4a7276cSJohn Garry 	struct parse_events_error err;
2097b4a7276cSJohn Garry 	struct evlist *evlist;
2098b4a7276cSJohn Garry 	int ret;
2099b4a7276cSJohn Garry 
2100b4a7276cSJohn Garry 	evlist = evlist__new();
2101b4a7276cSJohn Garry 	if (!evlist)
2102b4a7276cSJohn Garry 		return -ENOMEM;
2103b4a7276cSJohn Garry 
2104b4a7276cSJohn Garry 	parse_events_error__init(&err);
2105b4a7276cSJohn Garry 	perf_pmu__test_parse_init();
2106b4a7276cSJohn Garry 	ret = __parse_events(evlist, str, &err, &perf_pmu__fake);
2107b4a7276cSJohn Garry 	if (ret) {
2108b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2109b4a7276cSJohn Garry 			 str, ret, err.str);
2110b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
2111b4a7276cSJohn Garry 	}
2112b4a7276cSJohn Garry 
2113b4a7276cSJohn Garry 	parse_events_error__exit(&err);
2114b4a7276cSJohn Garry 	evlist__delete(evlist);
2115b4a7276cSJohn Garry 
2116b4a7276cSJohn Garry 	return ret;
2117b4a7276cSJohn Garry }
2118b4a7276cSJohn Garry 
21197741e03eSIan Rogers static int combine_test_results(int existing, int latest)
21207741e03eSIan Rogers {
21217741e03eSIan Rogers 	if (existing == TEST_FAIL)
21227741e03eSIan Rogers 		return TEST_FAIL;
21237741e03eSIan Rogers 	if (existing == TEST_SKIP)
21247741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
21257741e03eSIan Rogers 	return latest;
21267741e03eSIan Rogers }
21277741e03eSIan Rogers 
21288252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
2129945aea22SJiri Olsa {
21307741e03eSIan Rogers 	int ret = TEST_OK;
2131945aea22SJiri Olsa 
21328252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
21338252e791SIan Rogers 		const struct evlist_test *e = &events[i];
21347741e03eSIan Rogers 		int test_ret;
2135945aea22SJiri Olsa 
21367741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
21377741e03eSIan Rogers 		test_ret = test_event(e);
21387741e03eSIan Rogers 		if (test_ret != TEST_OK) {
21397741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
21407741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
21417741e03eSIan Rogers 		}
2142945aea22SJiri Olsa 	}
2143945aea22SJiri Olsa 
21447741e03eSIan Rogers 	return ret;
21457741e03eSIan Rogers }
21467741e03eSIan Rogers 
21477741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21487741e03eSIan Rogers {
21497741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2150945aea22SJiri Olsa }
2151945aea22SJiri Olsa 
2152b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2153945aea22SJiri Olsa {
2154c549aca5SDavid Ahern 	struct list_head terms;
2155945aea22SJiri Olsa 	int ret;
2156945aea22SJiri Olsa 
2157c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2158945aea22SJiri Olsa 
21594929e95aSJiri Olsa 	/*
21604929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init prepares perf_pmu_events_list
21614929e95aSJiri Olsa 	 * which gets freed in parse_events_terms.
21624929e95aSJiri Olsa 	 */
21634929e95aSJiri Olsa 	if (perf_pmu__test_parse_init())
21644929e95aSJiri Olsa 		return -1;
21654929e95aSJiri Olsa 
2166c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2167945aea22SJiri Olsa 	if (ret) {
2168945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2169945aea22SJiri Olsa 			 t->str , ret);
2170945aea22SJiri Olsa 		return ret;
2171945aea22SJiri Olsa 	}
2172945aea22SJiri Olsa 
2173c549aca5SDavid Ahern 	ret = t->check(&terms);
2174682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2175945aea22SJiri Olsa 
2176945aea22SJiri Olsa 	return ret;
2177945aea22SJiri Olsa }
2178945aea22SJiri Olsa 
2179b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2180945aea22SJiri Olsa {
2181945aea22SJiri Olsa 	int ret = 0;
2182945aea22SJiri Olsa 
2183b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2184b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2185945aea22SJiri Olsa 
2186945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2187945aea22SJiri Olsa 		ret = test_term(t);
2188945aea22SJiri Olsa 		if (ret)
2189945aea22SJiri Olsa 			break;
2190945aea22SJiri Olsa 	}
2191945aea22SJiri Olsa 
2192945aea22SJiri Olsa 	return ret;
2193945aea22SJiri Olsa }
2194945aea22SJiri Olsa 
21957741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21967741e03eSIan Rogers {
21977741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
21987741e03eSIan Rogers }
21997741e03eSIan Rogers 
2200945aea22SJiri Olsa static int test_pmu(void)
2201945aea22SJiri Olsa {
2202945aea22SJiri Olsa 	struct stat st;
2203945aea22SJiri Olsa 	char path[PATH_MAX];
2204945aea22SJiri Olsa 	int ret;
2205945aea22SJiri Olsa 
2206945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
2207cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
2208945aea22SJiri Olsa 
2209945aea22SJiri Olsa 	ret = stat(path, &st);
2210945aea22SJiri Olsa 	if (ret)
2211945aea22SJiri Olsa 		pr_debug("omitting PMU cpu tests\n");
2212945aea22SJiri Olsa 	return !ret;
2213945aea22SJiri Olsa }
2214945aea22SJiri Olsa 
22157741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2216945aea22SJiri Olsa {
2217945aea22SJiri Olsa 	struct stat st;
2218945aea22SJiri Olsa 	char path[PATH_MAX];
2219945aea22SJiri Olsa 	struct dirent *ent;
2220945aea22SJiri Olsa 	DIR *dir;
2221945aea22SJiri Olsa 	int ret;
2222945aea22SJiri Olsa 
22237741e03eSIan Rogers 	if (!test_pmu())
22247741e03eSIan Rogers 		return TEST_SKIP;
22257741e03eSIan Rogers 
2226945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/",
2227cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
2228945aea22SJiri Olsa 
2229945aea22SJiri Olsa 	ret = stat(path, &st);
2230945aea22SJiri Olsa 	if (ret) {
22317741e03eSIan Rogers 		pr_debug("omitting PMU cpu events tests: %s\n", path);
22327741e03eSIan Rogers 		return TEST_OK;
2233945aea22SJiri Olsa 	}
2234945aea22SJiri Olsa 
2235945aea22SJiri Olsa 	dir = opendir(path);
2236945aea22SJiri Olsa 	if (!dir) {
22377741e03eSIan Rogers 		pr_debug("can't open pmu event dir: %s\n", path);
22387741e03eSIan Rogers 		return TEST_FAIL;
2239945aea22SJiri Olsa 	}
2240945aea22SJiri Olsa 
22417741e03eSIan Rogers 	ret = TEST_OK;
22427741e03eSIan Rogers 	while ((ent = readdir(dir))) {
22438252e791SIan Rogers 		struct evlist_test e = { .name = NULL, };
22442e2bbc03SArnaldo Carvalho de Melo 		char name[2 * NAME_MAX + 1 + 12 + 3];
22457741e03eSIan Rogers 		int test_ret;
2246945aea22SJiri Olsa 
224717a2634bSAndi Kleen 		/* Names containing . are special and cannot be used directly */
224817a2634bSAndi Kleen 		if (strchr(ent->d_name, '.'))
2249945aea22SJiri Olsa 			continue;
2250945aea22SJiri Olsa 
22512e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name);
2252945aea22SJiri Olsa 
2253945aea22SJiri Olsa 		e.name  = name;
2254945aea22SJiri Olsa 		e.check = test__checkevent_pmu_events;
2255945aea22SJiri Olsa 
22567741e03eSIan Rogers 		test_ret = test_event(&e);
22577741e03eSIan Rogers 		if (test_ret != TEST_OK) {
22587741e03eSIan Rogers 			pr_debug("Test PMU event failed for '%s'", name);
22597741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
22607741e03eSIan Rogers 		}
2261146edff3SIan Rogers 		/*
2262146edff3SIan Rogers 		 * Names containing '-' are recognized as prefixes and suffixes
2263146edff3SIan Rogers 		 * due to '-' being a legacy PMU separator. This fails when the
2264146edff3SIan Rogers 		 * prefix or suffix collides with an existing legacy token. For
2265146edff3SIan Rogers 		 * example, branch-brs has a prefix (branch) that collides with
2266146edff3SIan Rogers 		 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2267146edff3SIan Rogers 		 * isn't expected after this. As event names in the config
2268146edff3SIan Rogers 		 * slashes are allowed a '-' in the name we check this works
2269146edff3SIan Rogers 		 * above.
2270146edff3SIan Rogers 		 */
2271146edff3SIan Rogers 		if (strchr(ent->d_name, '-'))
2272146edff3SIan Rogers 			continue;
2273146edff3SIan Rogers 
22742e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);
2275ffe59788SKan Liang 		e.name  = name;
2276ffe59788SKan Liang 		e.check = test__checkevent_pmu_events_mix;
22777741e03eSIan Rogers 		test_ret = test_event(&e);
22787741e03eSIan Rogers 		if (test_ret != TEST_OK) {
22797741e03eSIan Rogers 			pr_debug("Test PMU event failed for '%s'", name);
22807741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
22817741e03eSIan Rogers 		}
2282945aea22SJiri Olsa 	}
2283945aea22SJiri Olsa 
2284945aea22SJiri Olsa 	closedir(dir);
2285945aea22SJiri Olsa 	return ret;
2286945aea22SJiri Olsa }
2287945aea22SJiri Olsa 
22887741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
22897741e03eSIan Rogers {
22907741e03eSIan Rogers 	if (!test_pmu())
22917741e03eSIan Rogers 		return TEST_SKIP;
22927741e03eSIan Rogers 
22937741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
22947741e03eSIan Rogers }
22957741e03eSIan Rogers 
2296c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2297c7a3828dSJin Yao {
2298c7a3828dSJin Yao 	char path[PATH_MAX];
2299c7a3828dSJin Yao 	DIR *dir;
2300c7a3828dSJin Yao 	struct dirent *dent;
2301c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2302c7a3828dSJin Yao 	char buf[128];
2303c7a3828dSJin Yao 	FILE *file;
2304c7a3828dSJin Yao 
2305c7a3828dSJin Yao 	if (!sysfs)
2306c7a3828dSJin Yao 		return false;
2307c7a3828dSJin Yao 
2308c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2309c7a3828dSJin Yao 	dir = opendir(path);
2310c7a3828dSJin Yao 	if (!dir)
2311c7a3828dSJin Yao 		return false;
2312c7a3828dSJin Yao 
2313c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2314c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2315c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2316c7a3828dSJin Yao 			continue;
2317c7a3828dSJin Yao 
2318c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2319c7a3828dSJin Yao 			 sysfs, dent->d_name);
2320c7a3828dSJin Yao 
2321c7a3828dSJin Yao 		if (!file_available(path))
2322c7a3828dSJin Yao 			continue;
2323c7a3828dSJin Yao 
2324c7a3828dSJin Yao 		file = fopen(path, "r");
2325c7a3828dSJin Yao 		if (!file)
2326c7a3828dSJin Yao 			continue;
2327c7a3828dSJin Yao 
2328c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2329c7a3828dSJin Yao 			fclose(file);
2330c7a3828dSJin Yao 			continue;
2331c7a3828dSJin Yao 		}
2332c7a3828dSJin Yao 
2333c7a3828dSJin Yao 		/* Remove the last '\n' */
2334c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2335c7a3828dSJin Yao 
2336c7a3828dSJin Yao 		fclose(file);
2337c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2338c7a3828dSJin Yao 		*alias = strdup(buf);
2339c7a3828dSJin Yao 		closedir(dir);
2340c7a3828dSJin Yao 
2341c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2342c7a3828dSJin Yao 			free(*event);
2343c7a3828dSJin Yao 			free(*alias);
2344c7a3828dSJin Yao 			return false;
2345c7a3828dSJin Yao 		}
2346c7a3828dSJin Yao 
2347c7a3828dSJin Yao 		return true;
2348c7a3828dSJin Yao 	}
2349c7a3828dSJin Yao 
2350c7a3828dSJin Yao 	closedir(dir);
2351c7a3828dSJin Yao 	return false;
2352c7a3828dSJin Yao }
2353c7a3828dSJin Yao 
23547741e03eSIan Rogers static int test__hybrid(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23557741e03eSIan Rogers {
23567741e03eSIan Rogers 	if (!perf_pmu__has_hybrid())
23577741e03eSIan Rogers 		return TEST_SKIP;
23587741e03eSIan Rogers 
23597741e03eSIan Rogers 	return test_events(test__hybrid_events, ARRAY_SIZE(test__hybrid_events));
23607741e03eSIan Rogers }
23617741e03eSIan Rogers 
2362c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2363c7a3828dSJin Yao {
2364c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2365c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2366c7a3828dSJin Yao 
2367c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2368c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
23697741e03eSIan Rogers 	return TEST_OK;
2370c7a3828dSJin Yao }
2371c7a3828dSJin Yao 
23727741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2373c7a3828dSJin Yao {
23748252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2375c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2376c7a3828dSJin Yao 
2377c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2378c7a3828dSJin Yao 		 event, alias);
2379c7a3828dSJin Yao 
2380c7a3828dSJin Yao 	e.name  = name;
2381c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2382c7a3828dSJin Yao 	return test_event(&e);
2383c7a3828dSJin Yao }
2384c7a3828dSJin Yao 
23857741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23867741e03eSIan Rogers {
23877741e03eSIan Rogers 	char *event, *alias;
23887741e03eSIan Rogers 	int ret;
23897741e03eSIan Rogers 
23907741e03eSIan Rogers 	if (!test_alias(&event, &alias))
23917741e03eSIan Rogers 		return TEST_SKIP;
23927741e03eSIan Rogers 
23937741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
23947741e03eSIan Rogers 
23957741e03eSIan Rogers 	free(event);
23967741e03eSIan Rogers 	free(alias);
23977741e03eSIan Rogers 	return ret;
23987741e03eSIan Rogers }
23997741e03eSIan Rogers 
24007741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
24017741e03eSIan Rogers 				   int subtest __maybe_unused)
2402b4a7276cSJohn Garry {
2403b4a7276cSJohn Garry 	static const char events[][30] = {
2404b4a7276cSJohn Garry 			"event-hyphen",
2405b4a7276cSJohn Garry 			"event-two-hyph",
2406b4a7276cSJohn Garry 	};
24077741e03eSIan Rogers 	int ret = TEST_OK;
2408b4a7276cSJohn Garry 
24097741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
24107741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
24117741e03eSIan Rogers 
24127741e03eSIan Rogers 		if (test_ret != TEST_OK) {
24137741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
24147741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2415b4a7276cSJohn Garry 		}
2416b4a7276cSJohn Garry 	}
2417b4a7276cSJohn Garry 
2418b4a7276cSJohn Garry 	return ret;
2419b4a7276cSJohn Garry }
2420b4a7276cSJohn Garry 
24217741e03eSIan Rogers static struct test_case tests__parse_events[] = {
24227741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
24237741e03eSIan Rogers 			 events2,
24247741e03eSIan Rogers 			 "permissions"),
24257741e03eSIan Rogers 	TEST_CASE_REASON("Test parsing of \"hybrid\" CPU events",
24267741e03eSIan Rogers 			 hybrid,
24277741e03eSIan Rogers 			"not hybrid"),
24287741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
24297741e03eSIan Rogers 			 pmu_events,
24307741e03eSIan Rogers 			 "permissions"),
24317741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
24327741e03eSIan Rogers 			 pmu_events2,
24337741e03eSIan Rogers 			 "permissions"),
24347741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
24357741e03eSIan Rogers 			 "no aliases in sysfs"),
24367741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
24377741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
24387741e03eSIan Rogers 	{	.name = NULL, }
24397741e03eSIan Rogers };
2440945aea22SJiri Olsa 
24417741e03eSIan Rogers struct test_suite suite__parse_events = {
24427741e03eSIan Rogers 	.desc = "Parse event definition strings",
24437741e03eSIan Rogers 	.test_cases = tests__parse_events,
24447741e03eSIan Rogers };
2445