xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 5a52817e388bc2beaceff7b2059988987491cb59)
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"
10*5a52817eSIan Rogers #include "pmus.h"
1176b31a29SArnaldo Carvalho de Melo #include <dirent.h>
12a43783aeSArnaldo Carvalho de Melo #include <errno.h>
13c7a3828dSJin Yao #include "fncache.h"
147a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h>
157a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h>
167a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h>
17877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h>
18f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h>
1920a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h>
20945aea22SJiri Olsa 
21945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
22945aea22SJiri Olsa 			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
23945aea22SJiri Olsa 
24378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
25378ef0f5SIan Rogers 
2653fe307dSThomas Richter #if defined(__s390x__)
2753fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this
284d39c89fSIngo Molnar  * and return success when trace point kvm_s390_create_vm
2953fe307dSThomas Richter  * exists. Otherwise this test always fails.
3053fe307dSThomas Richter  */
3153fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void)
3253fe307dSThomas Richter {
3353fe307dSThomas Richter 	char *eventfile;
3453fe307dSThomas Richter 	bool rc = false;
3553fe307dSThomas Richter 
3653fe307dSThomas Richter 	eventfile = get_events_file("kvm-s390");
3753fe307dSThomas Richter 
3853fe307dSThomas Richter 	if (eventfile) {
3953fe307dSThomas Richter 		DIR *mydir = opendir(eventfile);
4053fe307dSThomas Richter 
4153fe307dSThomas Richter 		if (mydir) {
4253fe307dSThomas Richter 			rc = true;
4353fe307dSThomas Richter 			closedir(mydir);
4453fe307dSThomas Richter 		}
4553fe307dSThomas Richter 		put_events_file(eventfile);
4653fe307dSThomas Richter 	}
4753fe307dSThomas Richter 
4853fe307dSThomas Richter 	return rc;
4953fe307dSThomas Richter }
5053fe307dSThomas Richter #endif
5153fe307dSThomas Richter 
5263503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist)
53945aea22SJiri Olsa {
54515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
55945aea22SJiri Olsa 
566484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
579d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist));
581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
59945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
601fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
627741e03eSIan Rogers 	return TEST_OK;
63945aea22SJiri Olsa }
64945aea22SJiri Olsa 
6563503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist)
66945aea22SJiri Olsa {
6732dcd021SJiri Olsa 	struct evsel *evsel;
68945aea22SJiri Olsa 
696484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
709d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist));
71945aea22SJiri Olsa 
72e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
73945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong type",
741fc632ceSJiri Olsa 			PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
75945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_type",
761fc632ceSJiri Olsa 			PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
77945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_period",
781fc632ceSJiri Olsa 			1 == evsel->core.attr.sample_period);
79945aea22SJiri Olsa 	}
807741e03eSIan Rogers 	return TEST_OK;
81945aea22SJiri Olsa }
82378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
83945aea22SJiri Olsa 
8463503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist)
85945aea22SJiri Olsa {
86515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
87945aea22SJiri Olsa 
886484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
917741e03eSIan Rogers 	return TEST_OK;
92945aea22SJiri Olsa }
93945aea22SJiri Olsa 
9463503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
95945aea22SJiri Olsa {
96515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
97945aea22SJiri Olsa 
986484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
1001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
1017741e03eSIan Rogers 	return TEST_OK;
102945aea22SJiri Olsa }
103945aea22SJiri Olsa 
10463503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist)
105945aea22SJiri Olsa {
106515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
107945aea22SJiri Olsa 
1086484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
110945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1111fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
1127741e03eSIan Rogers 	return TEST_OK;
113945aea22SJiri Olsa }
114945aea22SJiri Olsa 
11563503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
116945aea22SJiri Olsa {
117515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
118945aea22SJiri Olsa 
1196484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
121945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1221fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
123ee4c7588SJiri Olsa 	/*
12478e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
125ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
126ee4c7588SJiri Olsa 	 */
127945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong period",
1281fc632ceSJiri Olsa 			0 == evsel->core.attr.sample_period);
129945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1",
1301fc632ceSJiri Olsa 			0 == evsel->core.attr.config1);
131945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2",
1321fc632ceSJiri Olsa 			1 == evsel->core.attr.config2);
1337741e03eSIan Rogers 	return TEST_OK;
134945aea22SJiri Olsa }
135945aea22SJiri Olsa 
13663503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
137945aea22SJiri Olsa {
138515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
139945aea22SJiri Olsa 
1406484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
142945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1431fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
1447741e03eSIan Rogers 	return TEST_OK;
145945aea22SJiri Olsa }
146945aea22SJiri Olsa 
14763503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
148945aea22SJiri Olsa {
149515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
150945aea22SJiri Olsa 
1516484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
1531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config);
1547741e03eSIan Rogers 	return TEST_OK;
155945aea22SJiri Olsa }
156945aea22SJiri Olsa 
15763503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
158945aea22SJiri Olsa {
159515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
160945aea22SJiri Olsa 
1616484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
164945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
1651fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
166945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
1671fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1687741e03eSIan Rogers 	return TEST_OK;
169945aea22SJiri Olsa }
170945aea22SJiri Olsa 
17163503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist)
172945aea22SJiri Olsa {
173515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
174945aea22SJiri Olsa 
1756484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
178945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1791fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
1801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
1817741e03eSIan Rogers 	return TEST_OK;
182945aea22SJiri Olsa }
183945aea22SJiri Olsa 
18463503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
185945aea22SJiri Olsa {
186515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
187945aea22SJiri Olsa 
1886484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
189945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
1901fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
192945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1931fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
194945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
1951fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
1967741e03eSIan Rogers 	return TEST_OK;
197945aea22SJiri Olsa }
198945aea22SJiri Olsa 
19963503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
200945aea22SJiri Olsa {
201515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
202945aea22SJiri Olsa 
2036484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
204945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2051fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
207945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2081fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
209945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2101fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2117741e03eSIan Rogers 	return TEST_OK;
212945aea22SJiri Olsa }
213945aea22SJiri Olsa 
21463503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
215945aea22SJiri Olsa {
216515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
217945aea22SJiri Olsa 
2186484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
219945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2201fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
222945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2231fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
224945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2251fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2267741e03eSIan Rogers 	return TEST_OK;
227945aea22SJiri Olsa }
228945aea22SJiri Olsa 
229378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
23063503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
231945aea22SJiri Olsa {
232515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
233945aea22SJiri Olsa 
2341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
238945aea22SJiri Olsa 
239945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
240945aea22SJiri Olsa }
241945aea22SJiri Olsa 
242945aea22SJiri Olsa static int
24363503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
244945aea22SJiri Olsa {
24532dcd021SJiri Olsa 	struct evsel *evsel;
246945aea22SJiri Olsa 
2476484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
248945aea22SJiri Olsa 
249e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
250945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user",
2511fc632ceSJiri Olsa 				!evsel->core.attr.exclude_user);
252945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel",
2531fc632ceSJiri Olsa 				evsel->core.attr.exclude_kernel);
2541fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2551fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
256945aea22SJiri Olsa 	}
257945aea22SJiri Olsa 
258945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
259945aea22SJiri Olsa }
260378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
261945aea22SJiri Olsa 
26263503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
263945aea22SJiri Olsa {
264515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
265945aea22SJiri Olsa 
2661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
270945aea22SJiri Olsa 
271945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
272945aea22SJiri Olsa }
273945aea22SJiri Olsa 
27463503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
275945aea22SJiri Olsa {
276515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
277945aea22SJiri Olsa 
2781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
282945aea22SJiri Olsa 
283945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
284945aea22SJiri Olsa }
285945aea22SJiri Olsa 
28663503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
287945aea22SJiri Olsa {
288515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
289945aea22SJiri Olsa 
2901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
294945aea22SJiri Olsa 
295945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
296945aea22SJiri Olsa }
297945aea22SJiri Olsa 
29863503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
299945aea22SJiri Olsa {
300515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
301945aea22SJiri Olsa 
3021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
304945aea22SJiri Olsa 
305945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
306945aea22SJiri Olsa }
307945aea22SJiri Olsa 
30863503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
309945aea22SJiri Olsa {
310515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
311945aea22SJiri Olsa 
3121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
3131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
314945aea22SJiri Olsa 
315945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
316945aea22SJiri Olsa }
317945aea22SJiri Olsa 
31863503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
319945aea22SJiri Olsa {
320515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
321945aea22SJiri Olsa 
3221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
326945aea22SJiri Olsa 
327945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
328945aea22SJiri Olsa }
329945aea22SJiri Olsa 
33063503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
331945aea22SJiri Olsa {
332515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
333945aea22SJiri Olsa 
3341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
338945aea22SJiri Olsa 
339945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
340945aea22SJiri Olsa }
341945aea22SJiri Olsa 
34263503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
343a1e12da4SJiri Olsa {
344515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
345a1e12da4SJiri Olsa 
3461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
3491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
353a1e12da4SJiri Olsa 
354a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
355a1e12da4SJiri Olsa }
356a1e12da4SJiri Olsa 
35763503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
358a1e12da4SJiri Olsa {
359515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
360a1e12da4SJiri Olsa 
3611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
3641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
368a1e12da4SJiri Olsa 
369a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
370a1e12da4SJiri Olsa }
371a1e12da4SJiri Olsa 
37263503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
373945aea22SJiri Olsa {
374515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
375945aea22SJiri Olsa 
376945aea22SJiri Olsa 
3771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
381945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3828ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:u"));
383945aea22SJiri Olsa 
384945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
385945aea22SJiri Olsa }
386945aea22SJiri Olsa 
38763503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
388945aea22SJiri Olsa {
389515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
390945aea22SJiri Olsa 
3911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
395945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3968ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:x:k"));
397945aea22SJiri Olsa 
398945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
399945aea22SJiri Olsa }
400945aea22SJiri Olsa 
40163503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
402945aea22SJiri Olsa {
403515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
404945aea22SJiri Olsa 
4051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
409945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4108ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:r:hp"));
411945aea22SJiri Olsa 
412945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
413945aea22SJiri Olsa }
414945aea22SJiri Olsa 
41563503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
416945aea22SJiri Olsa {
417515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
418945aea22SJiri Olsa 
4191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
423945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4248ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:w:up"));
425945aea22SJiri Olsa 
426945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
427945aea22SJiri Olsa }
428945aea22SJiri Olsa 
42963503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
430945aea22SJiri Olsa {
431515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
432945aea22SJiri Olsa 
4331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
437945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4388ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:rw:kp"));
439945aea22SJiri Olsa 
440945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
441945aea22SJiri Olsa }
442945aea22SJiri Olsa 
44363503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
444945aea22SJiri Olsa {
445945aea22SJiri Olsa 
446515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
447945aea22SJiri Olsa 
4486484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
4491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",    10 == evsel->core.attr.config);
4511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
4521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
453204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3",    0 == evsel->core.attr.config3);
454ee4c7588SJiri Olsa 	/*
45578e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
456ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
457ee4c7588SJiri Olsa 	 */
4581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
459945aea22SJiri Olsa 
4607741e03eSIan Rogers 	return TEST_OK;
461945aea22SJiri Olsa }
462945aea22SJiri Olsa 
463378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
46463503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
465945aea22SJiri Olsa {
466515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
467945aea22SJiri Olsa 
4686484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
469945aea22SJiri Olsa 
470945aea22SJiri Olsa 	/* r1 */
4711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
4741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
475204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3);
4761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
480945aea22SJiri Olsa 
48143f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
482e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
484945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
4851fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
4861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
4871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
491945aea22SJiri Olsa 
492945aea22SJiri Olsa 	/* 1:1:hp */
493e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
4951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
500945aea22SJiri Olsa 
5017741e03eSIan Rogers 	return TEST_OK;
502945aea22SJiri Olsa }
503378ef0f5SIan Rogers #endif
504945aea22SJiri Olsa 
50563503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
506945aea22SJiri Olsa {
507515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
508945aea22SJiri Olsa 
509945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
5106484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
5138ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
514945aea22SJiri Olsa 
515945aea22SJiri Olsa 	/* cpu/config=2/u" */
516e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5176484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
520945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
5218ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
522945aea22SJiri Olsa 
5237741e03eSIan Rogers 	return TEST_OK;
524945aea22SJiri Olsa }
525945aea22SJiri Olsa 
52663503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
52771ef150eSKan Liang {
528515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
52971ef150eSKan Liang 
53071ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
5316484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
53471ef150eSKan Liang 	/*
53578e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
53671ef150eSKan Liang 	 * while this test executes only parse events method.
53771ef150eSKan Liang 	 */
5381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
53927de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
54171ef150eSKan Liang 
54271ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
543e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
54671ef150eSKan Liang 	/*
54778e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
54871ef150eSKan Liang 	 * while this test executes only parse events method.
54971ef150eSKan Liang 	 */
5501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
55127de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
55371ef150eSKan Liang 
5547741e03eSIan Rogers 	return TEST_OK;
55571ef150eSKan Liang }
55671ef150eSKan Liang 
55763503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
558945aea22SJiri Olsa {
559515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
560945aea22SJiri Olsa 
5616484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
562*5a52817eSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type ||
563*5a52817eSIan Rogers 				      strcmp(evsel->pmu_name, "cpu"));
564945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
5651fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
566945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
5671fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5710997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
572945aea22SJiri Olsa 
5737741e03eSIan Rogers 	return TEST_OK;
574945aea22SJiri Olsa }
575945aea22SJiri Olsa 
576ffe59788SKan Liang 
57763503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
578ffe59788SKan Liang {
579515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
580ffe59788SKan Liang 
581ffe59788SKan Liang 	/* pmu-event:u */
5826484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
583ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5841fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
585ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5861fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5900997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
591ffe59788SKan Liang 
592ffe59788SKan Liang 	/* cpu/pmu-event/u*/
593e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5946484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
595*5a52817eSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type ||
596*5a52817eSIan Rogers 				      strcmp(evsel->pmu_name, "cpu"));
597ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5981fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
599ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
6001fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
6011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
6031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
6040997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned);
605ffe59788SKan Liang 
6067741e03eSIan Rogers 	return TEST_OK;
607ffe59788SKan Liang }
608ffe59788SKan Liang 
609945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
610945aea22SJiri Olsa {
6116cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
612945aea22SJiri Olsa 
613945aea22SJiri Olsa 	/* config=10 */
6146cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
615945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
616945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
617945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
618945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
619945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
6204f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
621945aea22SJiri Olsa 
622945aea22SJiri Olsa 	/* config1 */
6236cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
624945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
625945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
626945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
627945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
628945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6294f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1"));
630945aea22SJiri Olsa 
631945aea22SJiri Olsa 	/* config2=3 */
6326cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
633945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
634945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
635945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
636945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
637945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
6384f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2"));
639945aea22SJiri Olsa 
640204e7c49SRob Herring 	/* config3=4 */
641204e7c49SRob Herring 	term = list_entry(term->list.next, struct parse_events_term, list);
642204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type term",
643204e7c49SRob Herring 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3);
644204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type val",
645204e7c49SRob Herring 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
646204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong val", term->val.num == 4);
647204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3"));
648204e7c49SRob Herring 
649945aea22SJiri Olsa 	/* umask=1*/
6506cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
651945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
652945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
653945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
654945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
655945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
656945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
657945aea22SJiri Olsa 
6584929e95aSJiri Olsa 	/*
6594929e95aSJiri Olsa 	 * read
6604929e95aSJiri Olsa 	 *
6614929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
6624929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
6634929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
6644929e95aSJiri Olsa 	 */
6654929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6664929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6674929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
6684929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6694929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6704929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6714929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read"));
6724929e95aSJiri Olsa 
6734929e95aSJiri Olsa 	/*
6744929e95aSJiri Olsa 	 * r0xead
6754929e95aSJiri Olsa 	 *
6764929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
6774929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
6784929e95aSJiri Olsa 	 */
6794929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6804929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6814929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
6824929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6834929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6844929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 0xead);
6854f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
6867741e03eSIan Rogers 	return TEST_OK;
687945aea22SJiri Olsa }
688945aea22SJiri Olsa 
68963503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
690945aea22SJiri Olsa {
69132dcd021SJiri Olsa 	struct evsel *evsel, *leader;
692945aea22SJiri Olsa 
6936484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6949d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
695945aea22SJiri Olsa 
696945aea22SJiri Olsa 	/* instructions:k */
697515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
6981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
699945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7001fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
7011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
707c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7085643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7092bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
710a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
711945aea22SJiri Olsa 
712945aea22SJiri Olsa 	/* cycles:upp */
713e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
715945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7161fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
720945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
7211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
724fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7252bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
726a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
727945aea22SJiri Olsa 
7287741e03eSIan Rogers 	return TEST_OK;
729945aea22SJiri Olsa }
730945aea22SJiri Olsa 
73163503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
732945aea22SJiri Olsa {
73332dcd021SJiri Olsa 	struct evsel *evsel, *leader;
734945aea22SJiri Olsa 
7356484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
7369d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
737945aea22SJiri Olsa 
738945aea22SJiri Olsa 	/* faults + :ku modifier */
739515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
741945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7421fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
7431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
746943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
749c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7505643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7512bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
752a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
753945aea22SJiri Olsa 
754945aea22SJiri Olsa 	/* cache-references + :u modifier */
755e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
757945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7581fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config);
7591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
765fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7662bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
767a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
768945aea22SJiri Olsa 
769945aea22SJiri Olsa 	/* cycles:k */
770e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
772945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7731fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
780c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
781a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
782945aea22SJiri Olsa 
7837741e03eSIan Rogers 	return TEST_OK;
784945aea22SJiri Olsa }
785945aea22SJiri Olsa 
786378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
78763503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
788945aea22SJiri Olsa {
78932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
790945aea22SJiri Olsa 
7916484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
7929d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
793945aea22SJiri Olsa 
79443f322b4SRiku Voipio 	/* group1 syscalls:sys_enter_openat:H */
795515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
797945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
7981fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
7991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
8001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
806c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
807945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
808945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
8095643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8102bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
811a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
812945aea22SJiri Olsa 
813945aea22SJiri Olsa 	/* group1 cycles:kppp */
814e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
816945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8171fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
821945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3);
825fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
826945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
8272bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
828a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
829945aea22SJiri Olsa 
830945aea22SJiri Olsa 	/* group2 cycles + G modifier */
831e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
8321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
833945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8341fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
841c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
842945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
843945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
8445643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8452bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
846a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
847945aea22SJiri Olsa 
848945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
849e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
8511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config);
8521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
858fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8592bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
860a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
861945aea22SJiri Olsa 
862945aea22SJiri Olsa 	/* instructions:u */
863e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
865945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8661fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
870943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
873c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
874a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
875945aea22SJiri Olsa 
8767741e03eSIan Rogers 	return TEST_OK;
877945aea22SJiri Olsa }
878378ef0f5SIan Rogers #endif
879945aea22SJiri Olsa 
88063503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
881945aea22SJiri Olsa {
88232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
883945aea22SJiri Olsa 
8846484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
8859d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
886945aea22SJiri Olsa 
887945aea22SJiri Olsa 	/* cycles:u + p */
888515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
8891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
890945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8911fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
895945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
899945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
900c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9015643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9022bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
903a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
904945aea22SJiri Olsa 
905945aea22SJiri Olsa 	/* instructions:kp + p */
906e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
908945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9091fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
9111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
913945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
9141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
917fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9182bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
919a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
920945aea22SJiri Olsa 
9217741e03eSIan Rogers 	return TEST_OK;
922945aea22SJiri Olsa }
923945aea22SJiri Olsa 
92463503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
925945aea22SJiri Olsa {
92632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
927945aea22SJiri Olsa 
9286484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
9299d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
930945aea22SJiri Olsa 
931945aea22SJiri Olsa 	/* cycles + G */
932515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
934945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9351fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
942945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
943c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9445643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9452bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
946a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
947945aea22SJiri Olsa 
948945aea22SJiri Olsa 	/* instructions + G */
949e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
951945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9521fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
959fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9602bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
961a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
962945aea22SJiri Olsa 
963945aea22SJiri Olsa 	/* cycles:G */
964e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
9651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
966945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9671fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
974945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
975c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9765643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9772bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
978a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
979945aea22SJiri Olsa 
980945aea22SJiri Olsa 	/* instructions:G */
981e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
983945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9841fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
991fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9922bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
993945aea22SJiri Olsa 
994945aea22SJiri Olsa 	/* cycles */
995e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
997945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9981fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1005c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
1006945aea22SJiri Olsa 
10077741e03eSIan Rogers 	return TEST_OK;
1008945aea22SJiri Olsa }
1009945aea22SJiri Olsa 
101063503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
10115a30a99fSJiri Olsa {
101232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10135a30a99fSJiri Olsa 
10146484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10159d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10165a30a99fSJiri Olsa 
10175a30a99fSJiri Olsa 	/* cycles + :H group modifier */
1018515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10205a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10211fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10285a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1029c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10305643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10312bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10325a30a99fSJiri Olsa 
10335a30a99fSJiri Olsa 	/* cache-misses:G + :H group modifier */
1034e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10365a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10371fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1044fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10452bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10465a30a99fSJiri Olsa 
10477741e03eSIan Rogers 	return TEST_OK;
10485a30a99fSJiri Olsa }
10495a30a99fSJiri Olsa 
105063503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
10515a30a99fSJiri Olsa {
105232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10535a30a99fSJiri Olsa 
10546484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10559d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10565a30a99fSJiri Olsa 
10575a30a99fSJiri Olsa 	/* cycles + :G group modifier */
1058515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10605a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10611fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10685a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1069c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10705643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10712bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10725a30a99fSJiri Olsa 
10735a30a99fSJiri Olsa 	/* cache-misses:H + :G group modifier */
1074e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10765a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10771fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1084fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10852bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10865a30a99fSJiri Olsa 
10877741e03eSIan Rogers 	return TEST_OK;
10885a30a99fSJiri Olsa }
10895a30a99fSJiri Olsa 
109063503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
10915a30a99fSJiri Olsa {
109232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10935a30a99fSJiri Olsa 
10946484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10959d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10965a30a99fSJiri Olsa 
10975a30a99fSJiri Olsa 	/* cycles:G + :u group modifier */
1098515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11005a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11011fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11085a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1109c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11105643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11112bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11125a30a99fSJiri Olsa 
11135a30a99fSJiri Olsa 	/* cache-misses:H + :u group modifier */
1114e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11165a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11171fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1124fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11252bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11265a30a99fSJiri Olsa 
11277741e03eSIan Rogers 	return TEST_OK;
11285a30a99fSJiri Olsa }
11295a30a99fSJiri Olsa 
113063503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
11315a30a99fSJiri Olsa {
113232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
11335a30a99fSJiri Olsa 
11346484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
11359d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
11365a30a99fSJiri Olsa 
11375a30a99fSJiri Olsa 	/* cycles:G + :uG group modifier */
1138515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11405a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11411fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11485a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1149c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11505643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11512bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11525a30a99fSJiri Olsa 
11535a30a99fSJiri Olsa 	/* cache-misses:H + :uG group modifier */
1154e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11565a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11571fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1164fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11652bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11665a30a99fSJiri Olsa 
11677741e03eSIan Rogers 	return TEST_OK;
11685a30a99fSJiri Olsa }
11695a30a99fSJiri Olsa 
117063503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1171a9f93f97SJiri Olsa {
117232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1173a9f93f97SJiri Olsa 
11746484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1175a9f93f97SJiri Olsa 
1176a9f93f97SJiri Olsa 	/* cycles - sampling group leader */
1177515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1179a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11801fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1187a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1188fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1189a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1190a9f93f97SJiri Olsa 
1191a9f93f97SJiri Olsa 	/* cache-misses - not sampling */
1192e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1194a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11951fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1202fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1203a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1204a9f93f97SJiri Olsa 
1205a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1206e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1208a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12091fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1216a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1217fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1218a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1219a9f93f97SJiri Olsa 
12207741e03eSIan Rogers 	return TEST_OK;
1221a9f93f97SJiri Olsa }
1222a9f93f97SJiri Olsa 
122363503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1224a9f93f97SJiri Olsa {
122532dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1226a9f93f97SJiri Olsa 
12276484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
1228a9f93f97SJiri Olsa 
1229a9f93f97SJiri Olsa 	/* instructions - sampling group leader */
1230515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1232a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12331fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
12341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1240a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1241fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1242a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1243a9f93f97SJiri Olsa 
1244a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1245e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1247a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12481fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1255a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1256fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1257a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1258a9f93f97SJiri Olsa 
12597741e03eSIan Rogers 	return TEST_OK;
1260a9f93f97SJiri Olsa }
1261a9f93f97SJiri Olsa 
126263503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1263c9ee780fSMichael Ellerman {
1264515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1265c9ee780fSMichael Ellerman 
12661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1271c9ee780fSMichael Ellerman 
1272c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1273c9ee780fSMichael Ellerman }
1274c9ee780fSMichael Ellerman 
127563503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1276c9ee780fSMichael Ellerman {
127732dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1278c9ee780fSMichael Ellerman 
12796484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1280c9ee780fSMichael Ellerman 
1281c9ee780fSMichael Ellerman 	/* cycles - group leader */
1282515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1284c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12851fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
1286c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1287fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1289c9ee780fSMichael Ellerman 
1290c9ee780fSMichael Ellerman 	/* cache-misses - can not be pinned, but will go on with the leader */
1291e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1293c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12941fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
12951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1296c9ee780fSMichael Ellerman 
1297c9ee780fSMichael Ellerman 	/* branch-misses - ditto */
1298e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
1299c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
13001fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
13011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1302c9ee780fSMichael Ellerman 
13037741e03eSIan Rogers 	return TEST_OK;
1304c9ee780fSMichael Ellerman }
1305c9ee780fSMichael Ellerman 
13060997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist)
13070997a266SAndi Kleen {
13080997a266SAndi Kleen 	struct evsel *evsel = evlist__first(evlist);
13090997a266SAndi Kleen 
13100997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13110997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13120997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13130997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
13140997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13150997a266SAndi Kleen 
13160997a266SAndi Kleen 	return test__checkevent_symbolic_name(evlist);
13170997a266SAndi Kleen }
13180997a266SAndi Kleen 
13190997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist)
13200997a266SAndi Kleen {
13210997a266SAndi Kleen 	struct evsel *evsel, *leader;
13220997a266SAndi Kleen 
13230997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
13240997a266SAndi Kleen 
13250997a266SAndi Kleen 	/* cycles - group leader */
13260997a266SAndi Kleen 	evsel = leader = evlist__first(evlist);
13270997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13280997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13290997a266SAndi Kleen 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
13300997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1331fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13320997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13330997a266SAndi Kleen 
13340997a266SAndi Kleen 	/* cache-misses - can not be pinned, but will go on with the leader */
13350997a266SAndi Kleen 	evsel = evsel__next(evsel);
13360997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13370997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13380997a266SAndi Kleen 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
13390997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13400997a266SAndi Kleen 
13410997a266SAndi Kleen 	/* branch-misses - ditto */
13420997a266SAndi Kleen 	evsel = evsel__next(evsel);
13430997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13440997a266SAndi Kleen 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
13450997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13460997a266SAndi Kleen 
13477741e03eSIan Rogers 	return TEST_OK;
13480997a266SAndi Kleen }
134963503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1350ec32398cSJacob Shin {
1351515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1352ec32398cSJacob Shin 
13536484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1356ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
13571fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1358ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
13591fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1360ec32398cSJacob Shin 
13617741e03eSIan Rogers 	return TEST_OK;
1362ec32398cSJacob Shin }
1363ec32398cSJacob Shin 
136463503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1365ec32398cSJacob Shin {
1366515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1367ec32398cSJacob Shin 
13686484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1371ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
13721fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1373ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
13741fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1375ec32398cSJacob Shin 
13767741e03eSIan Rogers 	return TEST_OK;
1377ec32398cSJacob Shin }
1378ec32398cSJacob Shin 
1379ec32398cSJacob Shin static int
138063503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1381ec32398cSJacob Shin {
1382515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1383ec32398cSJacob Shin 
13841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1388ec32398cSJacob Shin 
1389ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1390ec32398cSJacob Shin }
1391ec32398cSJacob Shin 
139263503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1393ddd83c97SJiri Olsa {
1394515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1395ddd83c97SJiri Olsa 
13966484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
13971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1398ddd83c97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
13991fc632ceSJiri Olsa 			PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config);
14007741e03eSIan Rogers 	return TEST_OK;
1401ddd83c97SJiri Olsa }
1402ddd83c97SJiri Olsa 
140363503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
140410bf358aSWang Nan {
1405515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
140610bf358aSWang Nan 
1407ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn"));
14087741e03eSIan Rogers 	return TEST_OK;
140910bf358aSWang Nan }
141010bf358aSWang Nan 
141163503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
141210bf358aSWang Nan {
1413515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
141410bf358aSWang Nan 
1415ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu"));
14167741e03eSIan Rogers 	return TEST_OK;
141710bf358aSWang Nan }
141810bf358aSWang Nan 
141963503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
142010bf358aSWang Nan {
1421515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
142210bf358aSWang Nan 
1423ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu"));
14247741e03eSIan Rogers 	return TEST_OK;
142510bf358aSWang Nan }
142610bf358aSWang Nan 
142763503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
142843d0b978SWang Nan {
1429515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
143043d0b978SWang Nan 
1431ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu"));
14327741e03eSIan Rogers 	return TEST_OK;
143343d0b978SWang Nan }
143410bf358aSWang Nan 
143516ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
143616ddcfbfSJiri Olsa {
143716ddcfbfSJiri Olsa 	return !!perf_pmu__find("intel_pt");
143816ddcfbfSJiri Olsa }
143916ddcfbfSJiri Olsa 
144063503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1441b3f58c8dSArnaldo Carvalho de Melo {
1442515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1443b3f58c8dSArnaldo Carvalho de Melo 
1444ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u"));
14457741e03eSIan Rogers 	return TEST_OK;
1446b3f58c8dSArnaldo Carvalho de Melo }
1447b3f58c8dSArnaldo Carvalho de Melo 
144863503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
144906dc5bf2SAlexey Budankov {
1450515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
145106dc5bf2SAlexey Budankov 
1452ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong complex name parsing", evsel__name_is(evsel, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks"));
14537741e03eSIan Rogers 	return TEST_OK;
145406dc5bf2SAlexey Budankov }
145506dc5bf2SAlexey Budankov 
14563a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
14573a6c51e4SJiri Olsa {
14583a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
14593a6c51e4SJiri Olsa 
14603a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
14613a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
14623a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
14637741e03eSIan Rogers 	return TEST_OK;
14643a6c51e4SJiri Olsa }
14653a6c51e4SJiri Olsa 
146663503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1467714a92d8SJiri Olsa {
1468515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1469714a92d8SJiri Olsa 
14701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14737741e03eSIan Rogers 	return TEST_OK;
1474714a92d8SJiri Olsa }
1475714a92d8SJiri Olsa 
147663503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1477714a92d8SJiri Olsa {
1478515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1479714a92d8SJiri Olsa 
14801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
14837741e03eSIan Rogers 	return TEST_OK;
1484714a92d8SJiri Olsa }
1485714a92d8SJiri Olsa 
1486378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
148782ce75d9SJiri Olsa static int count_tracepoints(void)
148882ce75d9SJiri Olsa {
148982ce75d9SJiri Olsa 	struct dirent *events_ent;
149082ce75d9SJiri Olsa 	DIR *events_dir;
149182ce75d9SJiri Olsa 	int cnt = 0;
149282ce75d9SJiri Olsa 
14937014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
149482ce75d9SJiri Olsa 
149582ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
149682ce75d9SJiri Olsa 
149782ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
149825a7d914SArnaldo Carvalho de Melo 		char *sys_path;
149982ce75d9SJiri Olsa 		struct dirent *sys_ent;
150082ce75d9SJiri Olsa 		DIR *sys_dir;
150182ce75d9SJiri Olsa 
150282ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
150382ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
150482ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
150582ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
150682ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
150782ce75d9SJiri Olsa 			continue;
150882ce75d9SJiri Olsa 
150925a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
151025a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
151182ce75d9SJiri Olsa 
151282ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
151382ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
151482ce75d9SJiri Olsa 
151582ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
151682ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
151782ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
151882ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
151982ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
152082ce75d9SJiri Olsa 				continue;
152182ce75d9SJiri Olsa 
152282ce75d9SJiri Olsa 			cnt++;
152382ce75d9SJiri Olsa 		}
152482ce75d9SJiri Olsa 
152582ce75d9SJiri Olsa 		closedir(sys_dir);
152625a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
152782ce75d9SJiri Olsa 	}
152882ce75d9SJiri Olsa 
152982ce75d9SJiri Olsa 	closedir(events_dir);
153082ce75d9SJiri Olsa 	return cnt;
153182ce75d9SJiri Olsa }
153282ce75d9SJiri Olsa 
153363503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
153482ce75d9SJiri Olsa {
153582ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
15366484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
153782ce75d9SJiri Olsa 
153882ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
153982ce75d9SJiri Olsa }
1540378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */
154182ce75d9SJiri Olsa 
15422541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist)
15432541cb63SJin Yao {
15442541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
15452541cb63SJin Yao 
15462541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
15472541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15482541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
15497741e03eSIan Rogers 	return TEST_OK;
15502541cb63SJin Yao }
15512541cb63SJin Yao 
15522541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist)
15532541cb63SJin Yao {
15542541cb63SJin Yao 	struct evsel *evsel, *leader;
15552541cb63SJin Yao 
15562541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15572541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15582541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15592541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1560fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15612541cb63SJin Yao 
15622541cb63SJin Yao 	evsel = evsel__next(evsel);
15632541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15642541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config);
1565fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15667741e03eSIan Rogers 	return TEST_OK;
15672541cb63SJin Yao }
15682541cb63SJin Yao 
15692541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist)
15702541cb63SJin Yao {
15712541cb63SJin Yao 	struct evsel *evsel, *leader;
15722541cb63SJin Yao 
15732541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15742541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15752541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1576fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15772541cb63SJin Yao 
15782541cb63SJin Yao 	evsel = evsel__next(evsel);
15792541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15802541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1581fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15827741e03eSIan Rogers 	return TEST_OK;
15832541cb63SJin Yao }
15842541cb63SJin Yao 
15852541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist)
15862541cb63SJin Yao {
15872541cb63SJin Yao 	struct evsel *evsel, *leader;
15882541cb63SJin Yao 
15892541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15902541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15912541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15922541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1593fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15942541cb63SJin Yao 
15952541cb63SJin Yao 	evsel = evsel__next(evsel);
15962541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1597fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15987741e03eSIan Rogers 	return TEST_OK;
15992541cb63SJin Yao }
16002541cb63SJin Yao 
16012541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist)
16022541cb63SJin Yao {
16032541cb63SJin Yao 	struct evsel *evsel, *leader;
16042541cb63SJin Yao 
16052541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
16062541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
16072541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16082541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1609fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
16102541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
16112541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
16122541cb63SJin Yao 
16132541cb63SJin Yao 	evsel = evsel__next(evsel);
16142541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16152541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config);
1616fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
16172541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
16182541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
16197741e03eSIan Rogers 	return TEST_OK;
16202541cb63SJin Yao }
16212541cb63SJin Yao 
16222541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist)
16232541cb63SJin Yao {
16242541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16252541cb63SJin Yao 
1626490e9a8fSJin Yao 	if (!perf_pmu__hybrid_mounted("cpu_atom")) {
1627490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1628490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
1629490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16307741e03eSIan Rogers 		return TEST_OK;
1631490e9a8fSJin Yao 	}
1632490e9a8fSJin Yao 
16332541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == 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);
16362541cb63SJin Yao 
16372541cb63SJin Yao 	/* The type of second event is randome value */
16382541cb63SJin Yao 	evsel = evsel__next(evsel);
16392541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16407741e03eSIan Rogers 	return TEST_OK;
16412541cb63SJin Yao }
16422541cb63SJin Yao 
16432541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist)
16442541cb63SJin Yao {
16452541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16462541cb63SJin Yao 
16472541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16482541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16492541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16507741e03eSIan Rogers 	return TEST_OK;
16512541cb63SJin Yao }
16522541cb63SJin Yao 
16532541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist)
16542541cb63SJin Yao {
16552541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16562541cb63SJin Yao 
1657490e9a8fSJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16582541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
16592541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff));
16607741e03eSIan Rogers 	return TEST_OK;
16612541cb63SJin Yao }
16622541cb63SJin Yao 
166323b6339bSArnaldo Carvalho de Melo struct evlist_test {
1664945aea22SJiri Olsa 	const char *name;
166516ddcfbfSJiri Olsa 	bool (*valid)(void);
166663503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1667945aea22SJiri Olsa };
1668945aea22SJiri Olsa 
16698252e791SIan Rogers static const struct evlist_test test__events[] = {
1670378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1671615b8f99SAlexander Yarygin 	{
167243f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1673945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
16748252e791SIan Rogers 		/* 0 */
1675945aea22SJiri Olsa 	},
1676615b8f99SAlexander Yarygin 	{
1677945aea22SJiri Olsa 		.name  = "syscalls:*",
1678945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
16798252e791SIan Rogers 		/* 1 */
1680945aea22SJiri Olsa 	},
1681378ef0f5SIan Rogers #endif
1682615b8f99SAlexander Yarygin 	{
1683945aea22SJiri Olsa 		.name  = "r1a",
1684945aea22SJiri Olsa 		.check = test__checkevent_raw,
16858252e791SIan Rogers 		/* 2 */
1686945aea22SJiri Olsa 	},
1687615b8f99SAlexander Yarygin 	{
1688945aea22SJiri Olsa 		.name  = "1:1",
1689945aea22SJiri Olsa 		.check = test__checkevent_numeric,
16908252e791SIan Rogers 		/* 3 */
1691945aea22SJiri Olsa 	},
1692615b8f99SAlexander Yarygin 	{
1693945aea22SJiri Olsa 		.name  = "instructions",
1694945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
16958252e791SIan Rogers 		/* 4 */
1696945aea22SJiri Olsa 	},
1697615b8f99SAlexander Yarygin 	{
1698945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1699945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
17008252e791SIan Rogers 		/* 5 */
1701945aea22SJiri Olsa 	},
1702615b8f99SAlexander Yarygin 	{
1703945aea22SJiri Olsa 		.name  = "faults",
1704945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
17058252e791SIan Rogers 		/* 6 */
1706945aea22SJiri Olsa 	},
1707615b8f99SAlexander Yarygin 	{
1708945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1709945aea22SJiri Olsa 		.check = test__checkevent_genhw,
17108252e791SIan Rogers 		/* 7 */
1711945aea22SJiri Olsa 	},
1712615b8f99SAlexander Yarygin 	{
1713945aea22SJiri Olsa 		.name  = "mem:0",
1714945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
17158252e791SIan Rogers 		/* 8 */
1716945aea22SJiri Olsa 	},
1717615b8f99SAlexander Yarygin 	{
1718945aea22SJiri Olsa 		.name  = "mem:0:x",
1719945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
17208252e791SIan Rogers 		/* 9 */
1721945aea22SJiri Olsa 	},
1722615b8f99SAlexander Yarygin 	{
1723945aea22SJiri Olsa 		.name  = "mem:0:r",
1724945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
17258252e791SIan Rogers 		/* 0 */
1726945aea22SJiri Olsa 	},
1727615b8f99SAlexander Yarygin 	{
1728945aea22SJiri Olsa 		.name  = "mem:0:w",
1729945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
17308252e791SIan Rogers 		/* 1 */
1731945aea22SJiri Olsa 	},
1732378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1733615b8f99SAlexander Yarygin 	{
173443f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1735945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
17368252e791SIan Rogers 		/* 2 */
1737945aea22SJiri Olsa 	},
1738615b8f99SAlexander Yarygin 	{
1739945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1740945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
17418252e791SIan Rogers 		/* 3 */
1742945aea22SJiri Olsa 	},
1743378ef0f5SIan Rogers #endif
1744615b8f99SAlexander Yarygin 	{
1745945aea22SJiri Olsa 		.name  = "r1a:kp",
1746945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
17478252e791SIan Rogers 		/* 4 */
1748945aea22SJiri Olsa 	},
1749615b8f99SAlexander Yarygin 	{
1750945aea22SJiri Olsa 		.name  = "1:1:hp",
1751945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
17528252e791SIan Rogers 		/* 5 */
1753945aea22SJiri Olsa 	},
1754615b8f99SAlexander Yarygin 	{
1755945aea22SJiri Olsa 		.name  = "instructions:h",
1756945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
17578252e791SIan Rogers 		/* 6 */
1758945aea22SJiri Olsa 	},
1759615b8f99SAlexander Yarygin 	{
1760945aea22SJiri Olsa 		.name  = "faults:u",
1761945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
17628252e791SIan Rogers 		/* 7 */
1763945aea22SJiri Olsa 	},
1764615b8f99SAlexander Yarygin 	{
1765945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1766945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
17678252e791SIan Rogers 		/* 8 */
1768945aea22SJiri Olsa 	},
1769615b8f99SAlexander Yarygin 	{
1770945aea22SJiri Olsa 		.name  = "mem:0:u",
1771945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
17728252e791SIan Rogers 		/* 9 */
1773945aea22SJiri Olsa 	},
1774615b8f99SAlexander Yarygin 	{
1775945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1776945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
17778252e791SIan Rogers 		/* 0 */
1778945aea22SJiri Olsa 	},
1779615b8f99SAlexander Yarygin 	{
1780945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1781945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
17828252e791SIan Rogers 		/* 1 */
1783945aea22SJiri Olsa 	},
1784615b8f99SAlexander Yarygin 	{
1785945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1786945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
17878252e791SIan Rogers 		/* 2 */
1788945aea22SJiri Olsa 	},
1789378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1790615b8f99SAlexander Yarygin 	{
179143f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1792945aea22SJiri Olsa 		.check = test__checkevent_list,
17938252e791SIan Rogers 		/* 3 */
1794945aea22SJiri Olsa 	},
1795378ef0f5SIan Rogers #endif
1796615b8f99SAlexander Yarygin 	{
1797945aea22SJiri Olsa 		.name  = "instructions:G",
1798945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
17998252e791SIan Rogers 		/* 4 */
1800945aea22SJiri Olsa 	},
1801615b8f99SAlexander Yarygin 	{
1802945aea22SJiri Olsa 		.name  = "instructions:H",
1803945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
18048252e791SIan Rogers 		/* 5 */
1805945aea22SJiri Olsa 	},
1806615b8f99SAlexander Yarygin 	{
1807945aea22SJiri Olsa 		.name  = "mem:0:rw",
1808945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
18098252e791SIan Rogers 		/* 6 */
1810945aea22SJiri Olsa 	},
1811615b8f99SAlexander Yarygin 	{
1812945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1813945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
18148252e791SIan Rogers 		/* 7 */
1815945aea22SJiri Olsa 	},
1816615b8f99SAlexander Yarygin 	{
1817945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1818945aea22SJiri Olsa 		.check = test__group1,
18198252e791SIan Rogers 		/* 8 */
1820945aea22SJiri Olsa 	},
1821615b8f99SAlexander Yarygin 	{
1822945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1823945aea22SJiri Olsa 		.check = test__group2,
18248252e791SIan Rogers 		/* 9 */
1825945aea22SJiri Olsa 	},
1826378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1827615b8f99SAlexander Yarygin 	{
182843f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1829945aea22SJiri Olsa 		.check = test__group3,
18308252e791SIan Rogers 		/* 0 */
1831945aea22SJiri Olsa 	},
1832378ef0f5SIan Rogers #endif
1833615b8f99SAlexander Yarygin 	{
1834945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1835945aea22SJiri Olsa 		.check = test__group4,
18368252e791SIan Rogers 		/* 1 */
1837945aea22SJiri Olsa 	},
1838615b8f99SAlexander Yarygin 	{
1839945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1840945aea22SJiri Olsa 		.check = test__group5,
18418252e791SIan Rogers 		/* 2 */
1842945aea22SJiri Olsa 	},
1843378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1844615b8f99SAlexander Yarygin 	{
184582ce75d9SJiri Olsa 		.name  = "*:*",
184682ce75d9SJiri Olsa 		.check = test__all_tracepoints,
18478252e791SIan Rogers 		/* 3 */
184882ce75d9SJiri Olsa 	},
1849378ef0f5SIan Rogers #endif
1850615b8f99SAlexander Yarygin 	{
18515a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
18525a30a99fSJiri Olsa 		.check = test__group_gh1,
18538252e791SIan Rogers 		/* 4 */
18545a30a99fSJiri Olsa 	},
1855615b8f99SAlexander Yarygin 	{
18565a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
18575a30a99fSJiri Olsa 		.check = test__group_gh2,
18588252e791SIan Rogers 		/* 5 */
18595a30a99fSJiri Olsa 	},
1860615b8f99SAlexander Yarygin 	{
18615a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
18625a30a99fSJiri Olsa 		.check = test__group_gh3,
18638252e791SIan Rogers 		/* 6 */
18645a30a99fSJiri Olsa 	},
1865615b8f99SAlexander Yarygin 	{
18665a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
18675a30a99fSJiri Olsa 		.check = test__group_gh4,
18688252e791SIan Rogers 		/* 7 */
18695a30a99fSJiri Olsa 	},
1870615b8f99SAlexander Yarygin 	{
1871a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1872a9f93f97SJiri Olsa 		.check = test__leader_sample1,
18738252e791SIan Rogers 		/* 8 */
1874a9f93f97SJiri Olsa 	},
1875615b8f99SAlexander Yarygin 	{
1876a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1877a9f93f97SJiri Olsa 		.check = test__leader_sample2,
18788252e791SIan Rogers 		/* 9 */
1879a9f93f97SJiri Olsa 	},
1880615b8f99SAlexander Yarygin 	{
1881c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1882c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
18838252e791SIan Rogers 		/* 0 */
1884c9ee780fSMichael Ellerman 	},
1885615b8f99SAlexander Yarygin 	{
1886c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1887c9ee780fSMichael Ellerman 		.check = test__pinned_group,
18888252e791SIan Rogers 		/* 1 */
1889c9ee780fSMichael Ellerman 	},
1890ec32398cSJacob Shin 	{
1891ec32398cSJacob Shin 		.name  = "mem:0/1",
1892ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
18938252e791SIan Rogers 		/* 2 */
1894ec32398cSJacob Shin 	},
1895ec32398cSJacob Shin 	{
1896ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1897ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
18988252e791SIan Rogers 		/* 3 */
1899ec32398cSJacob Shin 	},
1900ec32398cSJacob Shin 	{
1901ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1902ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
19038252e791SIan Rogers 		/* 4 */
1904ec32398cSJacob Shin 	},
1905378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT)
1906c0bc8c6dSAlexander Yarygin 	{
1907c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1908c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
190953fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
19108252e791SIan Rogers 		/* 0 */
1911c0bc8c6dSAlexander Yarygin 	},
1912c0bc8c6dSAlexander Yarygin #endif
1913a1e12da4SJiri Olsa 	{
1914a1e12da4SJiri Olsa 		.name  = "instructions:I",
1915a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
19168252e791SIan Rogers 		/* 5 */
1917a1e12da4SJiri Olsa 	},
1918a1e12da4SJiri Olsa 	{
1919a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1920a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
19218252e791SIan Rogers 		/* 6 */
1922a1e12da4SJiri Olsa 	},
1923ddd83c97SJiri Olsa 	{
1924ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1925ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
19268252e791SIan Rogers 		/* 7 */
1927ddd83c97SJiri Olsa 	},
192810bf358aSWang Nan 	{
192910bf358aSWang Nan 		.name  = "instructions/name=insn/",
193010bf358aSWang Nan 		.check = test__checkevent_config_symbol,
19318252e791SIan Rogers 		/* 8 */
193210bf358aSWang Nan 	},
193310bf358aSWang Nan 	{
193410bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
193510bf358aSWang Nan 		.check = test__checkevent_config_raw,
19368252e791SIan Rogers 		/* 9 */
193710bf358aSWang Nan 	},
193810bf358aSWang Nan 	{
193910bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
194010bf358aSWang Nan 		.check = test__checkevent_config_num,
19418252e791SIan Rogers 		/* 0 */
194210bf358aSWang Nan 	},
194343d0b978SWang Nan 	{
194443d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
194543d0b978SWang Nan 		.check = test__checkevent_config_cache,
19468252e791SIan Rogers 		/* 1 */
194743d0b978SWang Nan 	},
1948b3f58c8dSArnaldo Carvalho de Melo 	{
1949b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
195016ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1951b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
19528252e791SIan Rogers 		/* 2 */
1953b3f58c8dSArnaldo Carvalho de Melo 	},
195406dc5bf2SAlexey Budankov 	{
195506dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
195606dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
19578252e791SIan Rogers 		/* 3 */
1958714a92d8SJiri Olsa 	},
1959714a92d8SJiri Olsa 	{
1960714a92d8SJiri Olsa 		.name  = "cycles//u",
1961714a92d8SJiri Olsa 		.check = test__sym_event_slash,
19628252e791SIan Rogers 		/* 4 */
1963714a92d8SJiri Olsa 	},
1964714a92d8SJiri Olsa 	{
1965714a92d8SJiri Olsa 		.name  = "cycles:k",
1966714a92d8SJiri Olsa 		.check = test__sym_event_dc,
19678252e791SIan Rogers 		/* 5 */
19680997a266SAndi Kleen 	},
19690997a266SAndi Kleen 	{
19700997a266SAndi Kleen 		.name  = "instructions:uep",
19710997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
19728252e791SIan Rogers 		/* 6 */
19730997a266SAndi Kleen 	},
19740997a266SAndi Kleen 	{
19750997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
19760997a266SAndi Kleen 		.check = test__exclusive_group,
19778252e791SIan Rogers 		/* 7 */
19780997a266SAndi Kleen 	},
1979945aea22SJiri Olsa };
1980945aea22SJiri Olsa 
19818252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
1982615b8f99SAlexander Yarygin 	{
1983945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
1984945aea22SJiri Olsa 		.check = test__checkevent_pmu,
19858252e791SIan Rogers 		/* 0 */
1986945aea22SJiri Olsa 	},
1987615b8f99SAlexander Yarygin 	{
1988945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
1989945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
19908252e791SIan Rogers 		/* 1 */
1991945aea22SJiri Olsa 	},
199271ef150eSKan Liang 	{
199371ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
199471ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
19958252e791SIan Rogers 		/* 2 */
199671ef150eSKan Liang 	},
199706dc5bf2SAlexey Budankov 	{
1998a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
199906dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
20008252e791SIan Rogers 		/* 3 */
20013a6c51e4SJiri Olsa 	},
20023a6c51e4SJiri Olsa 	{
20033a6c51e4SJiri Olsa 		.name  = "software/r1a/",
20043a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
20058252e791SIan Rogers 		/* 4 */
20063a6c51e4SJiri Olsa 	},
2007c33cdf54SJiri Olsa 	{
2008c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
2009c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
20108252e791SIan Rogers 		/* 5 */
2011c33cdf54SJiri Olsa 	},
2012945aea22SJiri Olsa };
2013945aea22SJiri Olsa 
201423b6339bSArnaldo Carvalho de Melo struct terms_test {
2015945aea22SJiri Olsa 	const char *str;
2016945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
2017945aea22SJiri Olsa };
2018945aea22SJiri Olsa 
2019b58eca40SIan Rogers static const struct terms_test test__terms[] = {
2020945aea22SJiri Olsa 	[0] = {
2021204e7c49SRob Herring 		.str   = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead",
2022945aea22SJiri Olsa 		.check = test__checkterms_simple,
2023945aea22SJiri Olsa 	},
2024945aea22SJiri Olsa };
2025945aea22SJiri Olsa 
20268252e791SIan Rogers static const struct evlist_test test__hybrid_events[] = {
20272541cb63SJin Yao 	{
20282541cb63SJin Yao 		.name  = "cpu_core/cpu-cycles/",
20292541cb63SJin Yao 		.check = test__hybrid_hw_event_with_pmu,
20308252e791SIan Rogers 		/* 0 */
20312541cb63SJin Yao 	},
20322541cb63SJin Yao 	{
20332541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/,cpu_core/instructions/}",
20342541cb63SJin Yao 		.check = test__hybrid_hw_group_event,
20358252e791SIan Rogers 		/* 1 */
20362541cb63SJin Yao 	},
20372541cb63SJin Yao 	{
20382541cb63SJin Yao 		.name  = "{cpu-clock,cpu_core/cpu-cycles/}",
20392541cb63SJin Yao 		.check = test__hybrid_sw_hw_group_event,
20408252e791SIan Rogers 		/* 2 */
20412541cb63SJin Yao 	},
20422541cb63SJin Yao 	{
20432541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/,cpu-clock}",
20442541cb63SJin Yao 		.check = test__hybrid_hw_sw_group_event,
20458252e791SIan Rogers 		/* 3 */
20462541cb63SJin Yao 	},
20472541cb63SJin Yao 	{
20482541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}",
20492541cb63SJin Yao 		.check = test__hybrid_group_modifier1,
20508252e791SIan Rogers 		/* 4 */
20512541cb63SJin Yao 	},
20522541cb63SJin Yao 	{
20532541cb63SJin Yao 		.name  = "r1a",
20542541cb63SJin Yao 		.check = test__hybrid_raw1,
20558252e791SIan Rogers 		/* 5 */
20562541cb63SJin Yao 	},
20572541cb63SJin Yao 	{
20582541cb63SJin Yao 		.name  = "cpu_core/r1a/",
20592541cb63SJin Yao 		.check = test__hybrid_raw2,
20608252e791SIan Rogers 		/* 6 */
20612541cb63SJin Yao 	},
20622541cb63SJin Yao 	{
20632541cb63SJin Yao 		.name  = "cpu_core/config=10,config1,config2=3,period=1000/u",
20642541cb63SJin Yao 		.check = test__checkevent_pmu,
20658252e791SIan Rogers 		/* 7 */
20662541cb63SJin Yao 	},
20672541cb63SJin Yao 	{
2068490e9a8fSJin Yao 		.name  = "cpu_core/LLC-loads/",
20692541cb63SJin Yao 		.check = test__hybrid_cache_event,
20708252e791SIan Rogers 		/* 8 */
20712541cb63SJin Yao 	},
20722541cb63SJin Yao };
20732541cb63SJin Yao 
20748252e791SIan Rogers static int test_event(const struct evlist_test *e)
2075945aea22SJiri Olsa {
2076a910e466SIan Rogers 	struct parse_events_error err;
207763503dbaSJiri Olsa 	struct evlist *evlist;
2078945aea22SJiri Olsa 	int ret;
2079945aea22SJiri Olsa 
208016ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
20817741e03eSIan Rogers 		pr_debug("... SKIP\n");
20827741e03eSIan Rogers 		return TEST_OK;
208316ddcfbfSJiri Olsa 	}
208416ddcfbfSJiri Olsa 
20850f98b11cSJiri Olsa 	evlist = evlist__new();
20867741e03eSIan Rogers 	if (evlist == NULL) {
20877741e03eSIan Rogers 		pr_err("Failed allocation");
20887741e03eSIan Rogers 		return TEST_FAIL;
20897741e03eSIan Rogers 	}
209007eafd4eSIan Rogers 	parse_events_error__init(&err);
2091933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
2092945aea22SJiri Olsa 	if (ret) {
2093933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2094933ccf20SJiri Olsa 			 e->name, ret, err.str);
20956c191289SIan Rogers 		parse_events_error__print(&err, e->name);
20967741e03eSIan Rogers 		ret = TEST_FAIL;
20977741e03eSIan Rogers 		if (strstr(err.str, "can't access trace events"))
20987741e03eSIan Rogers 			ret = TEST_SKIP;
20992d4352c0SArnaldo Carvalho de Melo 	} else {
21002d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
2101945aea22SJiri Olsa 	}
210207eafd4eSIan Rogers 	parse_events_error__exit(&err);
2103c12995a5SJiri Olsa 	evlist__delete(evlist);
2104945aea22SJiri Olsa 
2105945aea22SJiri Olsa 	return ret;
2106945aea22SJiri Olsa }
2107945aea22SJiri Olsa 
2108b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
2109b4a7276cSJohn Garry {
2110b4a7276cSJohn Garry 	struct parse_events_error err;
2111b4a7276cSJohn Garry 	struct evlist *evlist;
2112b4a7276cSJohn Garry 	int ret;
2113b4a7276cSJohn Garry 
2114b4a7276cSJohn Garry 	evlist = evlist__new();
2115b4a7276cSJohn Garry 	if (!evlist)
2116b4a7276cSJohn Garry 		return -ENOMEM;
2117b4a7276cSJohn Garry 
2118b4a7276cSJohn Garry 	parse_events_error__init(&err);
2119b4a7276cSJohn Garry 	perf_pmu__test_parse_init();
2120a4c7d7c5SIan Rogers 	ret = __parse_events(evlist, str, &err, &perf_pmu__fake, /*warn_if_reordered=*/true);
2121b4a7276cSJohn Garry 	if (ret) {
2122b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2123b4a7276cSJohn Garry 			 str, ret, err.str);
2124b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
2125b4a7276cSJohn Garry 	}
2126b4a7276cSJohn Garry 
2127b4a7276cSJohn Garry 	parse_events_error__exit(&err);
2128b4a7276cSJohn Garry 	evlist__delete(evlist);
2129b4a7276cSJohn Garry 
2130b4a7276cSJohn Garry 	return ret;
2131b4a7276cSJohn Garry }
2132b4a7276cSJohn Garry 
21337741e03eSIan Rogers static int combine_test_results(int existing, int latest)
21347741e03eSIan Rogers {
21357741e03eSIan Rogers 	if (existing == TEST_FAIL)
21367741e03eSIan Rogers 		return TEST_FAIL;
21377741e03eSIan Rogers 	if (existing == TEST_SKIP)
21387741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
21397741e03eSIan Rogers 	return latest;
21407741e03eSIan Rogers }
21417741e03eSIan Rogers 
21428252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
2143945aea22SJiri Olsa {
21447741e03eSIan Rogers 	int ret = TEST_OK;
2145945aea22SJiri Olsa 
21468252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
21478252e791SIan Rogers 		const struct evlist_test *e = &events[i];
21487741e03eSIan Rogers 		int test_ret;
2149945aea22SJiri Olsa 
21507741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
21517741e03eSIan Rogers 		test_ret = test_event(e);
21527741e03eSIan Rogers 		if (test_ret != TEST_OK) {
21537741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
21547741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
21557741e03eSIan Rogers 		}
2156945aea22SJiri Olsa 	}
2157945aea22SJiri Olsa 
21587741e03eSIan Rogers 	return ret;
21597741e03eSIan Rogers }
21607741e03eSIan Rogers 
21617741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21627741e03eSIan Rogers {
21637741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2164945aea22SJiri Olsa }
2165945aea22SJiri Olsa 
2166b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2167945aea22SJiri Olsa {
2168c549aca5SDavid Ahern 	struct list_head terms;
2169945aea22SJiri Olsa 	int ret;
2170945aea22SJiri Olsa 
2171c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2172945aea22SJiri Olsa 
21734929e95aSJiri Olsa 	/*
21744929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init prepares perf_pmu_events_list
21754929e95aSJiri Olsa 	 * which gets freed in parse_events_terms.
21764929e95aSJiri Olsa 	 */
21774929e95aSJiri Olsa 	if (perf_pmu__test_parse_init())
21784929e95aSJiri Olsa 		return -1;
21794929e95aSJiri Olsa 
2180c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2181945aea22SJiri Olsa 	if (ret) {
2182945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2183945aea22SJiri Olsa 			 t->str , ret);
2184945aea22SJiri Olsa 		return ret;
2185945aea22SJiri Olsa 	}
2186945aea22SJiri Olsa 
2187c549aca5SDavid Ahern 	ret = t->check(&terms);
2188682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2189945aea22SJiri Olsa 
2190945aea22SJiri Olsa 	return ret;
2191945aea22SJiri Olsa }
2192945aea22SJiri Olsa 
2193b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2194945aea22SJiri Olsa {
2195945aea22SJiri Olsa 	int ret = 0;
2196945aea22SJiri Olsa 
2197b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2198b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2199945aea22SJiri Olsa 
2200945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2201945aea22SJiri Olsa 		ret = test_term(t);
2202945aea22SJiri Olsa 		if (ret)
2203945aea22SJiri Olsa 			break;
2204945aea22SJiri Olsa 	}
2205945aea22SJiri Olsa 
2206945aea22SJiri Olsa 	return ret;
2207945aea22SJiri Olsa }
2208945aea22SJiri Olsa 
22097741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
22107741e03eSIan Rogers {
22117741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
22127741e03eSIan Rogers }
22137741e03eSIan Rogers 
2214945aea22SJiri Olsa static int test_pmu(void)
2215945aea22SJiri Olsa {
2216945aea22SJiri Olsa 	struct stat st;
2217945aea22SJiri Olsa 	char path[PATH_MAX];
2218945aea22SJiri Olsa 	int ret;
2219945aea22SJiri Olsa 
2220945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
2221cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
2222945aea22SJiri Olsa 
2223945aea22SJiri Olsa 	ret = stat(path, &st);
2224945aea22SJiri Olsa 	if (ret)
2225945aea22SJiri Olsa 		pr_debug("omitting PMU cpu tests\n");
2226945aea22SJiri Olsa 	return !ret;
2227945aea22SJiri Olsa }
2228945aea22SJiri Olsa 
22297741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2230945aea22SJiri Olsa {
2231*5a52817eSIan Rogers 	struct perf_pmu *pmu;
2232*5a52817eSIan Rogers 	int ret = TEST_OK;
2233*5a52817eSIan Rogers 
2234*5a52817eSIan Rogers 	if (list_empty(&pmus))
2235*5a52817eSIan Rogers 		perf_pmu__scan(NULL);
2236*5a52817eSIan Rogers 
2237*5a52817eSIan Rogers 	perf_pmus__for_each_pmu(pmu) {
2238945aea22SJiri Olsa 		struct stat st;
2239945aea22SJiri Olsa 		char path[PATH_MAX];
2240945aea22SJiri Olsa 		struct dirent *ent;
2241945aea22SJiri Olsa 		DIR *dir;
2242*5a52817eSIan Rogers 		int err;
2243945aea22SJiri Olsa 
2244*5a52817eSIan Rogers 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/",
2245*5a52817eSIan Rogers 			sysfs__mountpoint(), pmu->name);
22467741e03eSIan Rogers 
2247*5a52817eSIan Rogers 		err = stat(path, &st);
2248*5a52817eSIan Rogers 		if (err) {
2249*5a52817eSIan Rogers 			pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path);
2250*5a52817eSIan Rogers 			continue;
2251945aea22SJiri Olsa 		}
2252945aea22SJiri Olsa 
2253945aea22SJiri Olsa 		dir = opendir(path);
2254945aea22SJiri Olsa 		if (!dir) {
22557741e03eSIan Rogers 			pr_debug("can't open pmu event dir: %s\n", path);
2256*5a52817eSIan Rogers 			ret = combine_test_results(ret, TEST_SKIP);
2257*5a52817eSIan Rogers 			continue;
2258945aea22SJiri Olsa 		}
2259945aea22SJiri Olsa 
22607741e03eSIan Rogers 		while ((ent = readdir(dir))) {
22618252e791SIan Rogers 			struct evlist_test e = { .name = NULL, };
22622e2bbc03SArnaldo Carvalho de Melo 			char name[2 * NAME_MAX + 1 + 12 + 3];
22637741e03eSIan Rogers 			int test_ret;
2264945aea22SJiri Olsa 
226517a2634bSAndi Kleen 			/* Names containing . are special and cannot be used directly */
226617a2634bSAndi Kleen 			if (strchr(ent->d_name, '.'))
2267945aea22SJiri Olsa 				continue;
2268945aea22SJiri Olsa 
2269*5a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name);
2270945aea22SJiri Olsa 
2271945aea22SJiri Olsa 			e.name  = name;
2272945aea22SJiri Olsa 			e.check = test__checkevent_pmu_events;
2273945aea22SJiri Olsa 
22747741e03eSIan Rogers 			test_ret = test_event(&e);
22757741e03eSIan Rogers 			if (test_ret != TEST_OK) {
22767741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
22777741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
22787741e03eSIan Rogers 			}
2279*5a52817eSIan Rogers 
2280*5a52817eSIan Rogers 			if (!is_pmu_core(pmu->name))
2281*5a52817eSIan Rogers 				continue;
2282*5a52817eSIan Rogers 
2283146edff3SIan Rogers 			/*
2284146edff3SIan Rogers 			 * Names containing '-' are recognized as prefixes and suffixes
2285146edff3SIan Rogers 			 * due to '-' being a legacy PMU separator. This fails when the
2286146edff3SIan Rogers 			 * prefix or suffix collides with an existing legacy token. For
2287146edff3SIan Rogers 			 * example, branch-brs has a prefix (branch) that collides with
2288146edff3SIan Rogers 			 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2289146edff3SIan Rogers 			 * isn't expected after this. As event names in the config
2290146edff3SIan Rogers 			 * slashes are allowed a '-' in the name we check this works
2291146edff3SIan Rogers 			 * above.
2292146edff3SIan Rogers 			 */
2293146edff3SIan Rogers 			if (strchr(ent->d_name, '-'))
2294146edff3SIan Rogers 				continue;
2295146edff3SIan Rogers 
2296*5a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s:u,%s/event=%s/u",
2297*5a52817eSIan Rogers 				 ent->d_name, pmu->name, ent->d_name);
2298ffe59788SKan Liang 			e.name  = name;
2299ffe59788SKan Liang 			e.check = test__checkevent_pmu_events_mix;
23007741e03eSIan Rogers 			test_ret = test_event(&e);
23017741e03eSIan Rogers 			if (test_ret != TEST_OK) {
23027741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
23037741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
23047741e03eSIan Rogers 			}
2305945aea22SJiri Olsa 		}
2306945aea22SJiri Olsa 
2307945aea22SJiri Olsa 		closedir(dir);
2308*5a52817eSIan Rogers 	}
2309945aea22SJiri Olsa 	return ret;
2310945aea22SJiri Olsa }
2311945aea22SJiri Olsa 
23127741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23137741e03eSIan Rogers {
23147741e03eSIan Rogers 	if (!test_pmu())
23157741e03eSIan Rogers 		return TEST_SKIP;
23167741e03eSIan Rogers 
23177741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
23187741e03eSIan Rogers }
23197741e03eSIan Rogers 
2320c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2321c7a3828dSJin Yao {
2322c7a3828dSJin Yao 	char path[PATH_MAX];
2323c7a3828dSJin Yao 	DIR *dir;
2324c7a3828dSJin Yao 	struct dirent *dent;
2325c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2326c7a3828dSJin Yao 	char buf[128];
2327c7a3828dSJin Yao 	FILE *file;
2328c7a3828dSJin Yao 
2329c7a3828dSJin Yao 	if (!sysfs)
2330c7a3828dSJin Yao 		return false;
2331c7a3828dSJin Yao 
2332c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2333c7a3828dSJin Yao 	dir = opendir(path);
2334c7a3828dSJin Yao 	if (!dir)
2335c7a3828dSJin Yao 		return false;
2336c7a3828dSJin Yao 
2337c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2338c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2339c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2340c7a3828dSJin Yao 			continue;
2341c7a3828dSJin Yao 
2342c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2343c7a3828dSJin Yao 			 sysfs, dent->d_name);
2344c7a3828dSJin Yao 
2345c7a3828dSJin Yao 		if (!file_available(path))
2346c7a3828dSJin Yao 			continue;
2347c7a3828dSJin Yao 
2348c7a3828dSJin Yao 		file = fopen(path, "r");
2349c7a3828dSJin Yao 		if (!file)
2350c7a3828dSJin Yao 			continue;
2351c7a3828dSJin Yao 
2352c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2353c7a3828dSJin Yao 			fclose(file);
2354c7a3828dSJin Yao 			continue;
2355c7a3828dSJin Yao 		}
2356c7a3828dSJin Yao 
2357c7a3828dSJin Yao 		/* Remove the last '\n' */
2358c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2359c7a3828dSJin Yao 
2360c7a3828dSJin Yao 		fclose(file);
2361c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2362c7a3828dSJin Yao 		*alias = strdup(buf);
2363c7a3828dSJin Yao 		closedir(dir);
2364c7a3828dSJin Yao 
2365c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2366c7a3828dSJin Yao 			free(*event);
2367c7a3828dSJin Yao 			free(*alias);
2368c7a3828dSJin Yao 			return false;
2369c7a3828dSJin Yao 		}
2370c7a3828dSJin Yao 
2371c7a3828dSJin Yao 		return true;
2372c7a3828dSJin Yao 	}
2373c7a3828dSJin Yao 
2374c7a3828dSJin Yao 	closedir(dir);
2375c7a3828dSJin Yao 	return false;
2376c7a3828dSJin Yao }
2377c7a3828dSJin Yao 
23787741e03eSIan Rogers static int test__hybrid(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23797741e03eSIan Rogers {
23807741e03eSIan Rogers 	if (!perf_pmu__has_hybrid())
23817741e03eSIan Rogers 		return TEST_SKIP;
23827741e03eSIan Rogers 
23837741e03eSIan Rogers 	return test_events(test__hybrid_events, ARRAY_SIZE(test__hybrid_events));
23847741e03eSIan Rogers }
23857741e03eSIan Rogers 
2386c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2387c7a3828dSJin Yao {
2388c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2389c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2390c7a3828dSJin Yao 
2391c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2392c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
23937741e03eSIan Rogers 	return TEST_OK;
2394c7a3828dSJin Yao }
2395c7a3828dSJin Yao 
23967741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2397c7a3828dSJin Yao {
23988252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2399c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2400c7a3828dSJin Yao 
2401c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2402c7a3828dSJin Yao 		 event, alias);
2403c7a3828dSJin Yao 
2404c7a3828dSJin Yao 	e.name  = name;
2405c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2406c7a3828dSJin Yao 	return test_event(&e);
2407c7a3828dSJin Yao }
2408c7a3828dSJin Yao 
24097741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
24107741e03eSIan Rogers {
24117741e03eSIan Rogers 	char *event, *alias;
24127741e03eSIan Rogers 	int ret;
24137741e03eSIan Rogers 
24147741e03eSIan Rogers 	if (!test_alias(&event, &alias))
24157741e03eSIan Rogers 		return TEST_SKIP;
24167741e03eSIan Rogers 
24177741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
24187741e03eSIan Rogers 
24197741e03eSIan Rogers 	free(event);
24207741e03eSIan Rogers 	free(alias);
24217741e03eSIan Rogers 	return ret;
24227741e03eSIan Rogers }
24237741e03eSIan Rogers 
24247741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
24257741e03eSIan Rogers 				   int subtest __maybe_unused)
2426b4a7276cSJohn Garry {
2427b4a7276cSJohn Garry 	static const char events[][30] = {
2428b4a7276cSJohn Garry 			"event-hyphen",
2429b4a7276cSJohn Garry 			"event-two-hyph",
2430b4a7276cSJohn Garry 	};
24317741e03eSIan Rogers 	int ret = TEST_OK;
2432b4a7276cSJohn Garry 
24337741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
24347741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
24357741e03eSIan Rogers 
24367741e03eSIan Rogers 		if (test_ret != TEST_OK) {
24377741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
24387741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2439b4a7276cSJohn Garry 		}
2440b4a7276cSJohn Garry 	}
2441b4a7276cSJohn Garry 
2442b4a7276cSJohn Garry 	return ret;
2443b4a7276cSJohn Garry }
2444b4a7276cSJohn Garry 
24457741e03eSIan Rogers static struct test_case tests__parse_events[] = {
24467741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
24477741e03eSIan Rogers 			 events2,
24487741e03eSIan Rogers 			 "permissions"),
24497741e03eSIan Rogers 	TEST_CASE_REASON("Test parsing of \"hybrid\" CPU events",
24507741e03eSIan Rogers 			 hybrid,
24517741e03eSIan Rogers 			"not hybrid"),
24527741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
24537741e03eSIan Rogers 			 pmu_events,
24547741e03eSIan Rogers 			 "permissions"),
24557741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
24567741e03eSIan Rogers 			 pmu_events2,
24577741e03eSIan Rogers 			 "permissions"),
24587741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
24597741e03eSIan Rogers 			 "no aliases in sysfs"),
24607741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
24617741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
24627741e03eSIan Rogers 	{	.name = NULL, }
24637741e03eSIan Rogers };
2464945aea22SJiri Olsa 
24657741e03eSIan Rogers struct test_suite suite__parse_events = {
24667741e03eSIan Rogers 	.desc = "Parse event definition strings",
24677741e03eSIan Rogers 	.test_cases = tests__parse_events,
24687741e03eSIan Rogers };
2469