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