xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 411ad22ecf0281d666a82aa7f4de90c70365da7d)
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"
95a52817eSIan Rogers #include "pmus.h"
1076b31a29SArnaldo Carvalho de Melo #include <dirent.h>
11a43783aeSArnaldo Carvalho de Melo #include <errno.h>
12c7a3828dSJin Yao #include "fncache.h"
137a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h>
147a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h>
157a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h>
16877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h>
17f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h>
1820a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h>
19945aea22SJiri Olsa 
20945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
21945aea22SJiri Olsa 			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
22945aea22SJiri Olsa 
239854934bSIan Rogers static bool test_config(const struct evsel *evsel, __u64 expected_config)
249854934bSIan Rogers {
259854934bSIan Rogers 	__u32 type = evsel->core.attr.type;
269854934bSIan Rogers 	__u64 config = evsel->core.attr.config;
279854934bSIan Rogers 
289854934bSIan Rogers 	if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) {
299854934bSIan Rogers 		/*
309854934bSIan Rogers 		 * HARDWARE and HW_CACHE events encode the PMU's extended type
319854934bSIan Rogers 		 * in the top 32-bits. Mask in order to ignore.
329854934bSIan Rogers 		 */
339854934bSIan Rogers 		config &= PERF_HW_EVENT_MASK;
349854934bSIan Rogers 	}
359854934bSIan Rogers 	return config == expected_config;
369854934bSIan Rogers }
379854934bSIan Rogers 
38378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
39378ef0f5SIan Rogers 
4053fe307dSThomas Richter #if defined(__s390x__)
4153fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this
424d39c89fSIngo Molnar  * and return success when trace point kvm_s390_create_vm
4353fe307dSThomas Richter  * exists. Otherwise this test always fails.
4453fe307dSThomas Richter  */
4553fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void)
4653fe307dSThomas Richter {
4753fe307dSThomas Richter 	char *eventfile;
4853fe307dSThomas Richter 	bool rc = false;
4953fe307dSThomas Richter 
5053fe307dSThomas Richter 	eventfile = get_events_file("kvm-s390");
5153fe307dSThomas Richter 
5253fe307dSThomas Richter 	if (eventfile) {
5353fe307dSThomas Richter 		DIR *mydir = opendir(eventfile);
5453fe307dSThomas Richter 
5553fe307dSThomas Richter 		if (mydir) {
5653fe307dSThomas Richter 			rc = true;
5753fe307dSThomas Richter 			closedir(mydir);
5853fe307dSThomas Richter 		}
5953fe307dSThomas Richter 		put_events_file(eventfile);
6053fe307dSThomas Richter 	}
6153fe307dSThomas Richter 
6253fe307dSThomas Richter 	return rc;
6353fe307dSThomas Richter }
6453fe307dSThomas Richter #endif
6553fe307dSThomas Richter 
6663503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist)
67945aea22SJiri Olsa {
68515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
69945aea22SJiri Olsa 
706484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
719d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist));
721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
73945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
741fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
767741e03eSIan Rogers 	return TEST_OK;
77945aea22SJiri Olsa }
78945aea22SJiri Olsa 
7963503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist)
80945aea22SJiri Olsa {
8132dcd021SJiri Olsa 	struct evsel *evsel;
82945aea22SJiri Olsa 
836484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
849d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist));
85945aea22SJiri Olsa 
86e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
87945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong type",
881fc632ceSJiri Olsa 			PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
89945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_type",
901fc632ceSJiri Olsa 			PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
91945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_period",
921fc632ceSJiri Olsa 			1 == evsel->core.attr.sample_period);
93945aea22SJiri Olsa 	}
947741e03eSIan Rogers 	return TEST_OK;
95945aea22SJiri Olsa }
96378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
97945aea22SJiri Olsa 
9863503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist)
99945aea22SJiri Olsa {
100515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
101945aea22SJiri Olsa 
1026484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
1049854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a));
1057741e03eSIan Rogers 	return TEST_OK;
106945aea22SJiri Olsa }
107945aea22SJiri Olsa 
10863503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
109945aea22SJiri Olsa {
110515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
111945aea22SJiri Olsa 
1126484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
1149854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
1157741e03eSIan Rogers 	return TEST_OK;
116945aea22SJiri Olsa }
117945aea22SJiri Olsa 
11863503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist)
119945aea22SJiri Olsa {
120515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
121945aea22SJiri Olsa 
1226484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1249854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
1257741e03eSIan Rogers 	return TEST_OK;
126945aea22SJiri Olsa }
127945aea22SJiri Olsa 
12863503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
129945aea22SJiri Olsa {
130515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
131945aea22SJiri Olsa 
1326484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1349854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
135ee4c7588SJiri Olsa 	/*
13678e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
137ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
138ee4c7588SJiri Olsa 	 */
139945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong period",
1401fc632ceSJiri Olsa 			0 == evsel->core.attr.sample_period);
141945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1",
1421fc632ceSJiri Olsa 			0 == evsel->core.attr.config1);
143945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2",
1441fc632ceSJiri Olsa 			1 == evsel->core.attr.config2);
1457741e03eSIan Rogers 	return TEST_OK;
146945aea22SJiri Olsa }
147945aea22SJiri Olsa 
14863503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
149945aea22SJiri Olsa {
150515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
151945aea22SJiri Olsa 
1526484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1549854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS));
1557741e03eSIan Rogers 	return TEST_OK;
156945aea22SJiri Olsa }
157945aea22SJiri Olsa 
15863503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
159945aea22SJiri Olsa {
160515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
161945aea22SJiri Olsa 
1626484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
1649854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1 << 16));
1657741e03eSIan Rogers 	return TEST_OK;
166945aea22SJiri Olsa }
167945aea22SJiri Olsa 
16863503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
169945aea22SJiri Olsa {
170515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
171945aea22SJiri Olsa 
1726484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1749854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
175945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
1761fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
177945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
1781fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1797741e03eSIan Rogers 	return TEST_OK;
180945aea22SJiri Olsa }
181945aea22SJiri Olsa 
18263503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist)
183945aea22SJiri Olsa {
184515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
185945aea22SJiri Olsa 
1866484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1889854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
189945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1901fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
1911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
1927741e03eSIan Rogers 	return TEST_OK;
193945aea22SJiri Olsa }
194945aea22SJiri Olsa 
19563503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
196945aea22SJiri Olsa {
197515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
198945aea22SJiri Olsa 
1996484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
200945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2011fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2029854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
203945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2041fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
205945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2061fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2077741e03eSIan Rogers 	return TEST_OK;
208945aea22SJiri Olsa }
209945aea22SJiri Olsa 
21063503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
211945aea22SJiri Olsa {
212515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
213945aea22SJiri Olsa 
2146484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
215945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2161fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2179854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
218945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2191fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
220945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2211fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2227741e03eSIan Rogers 	return TEST_OK;
223945aea22SJiri Olsa }
224945aea22SJiri Olsa 
22563503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
226945aea22SJiri Olsa {
227515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
228945aea22SJiri Olsa 
2296484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
230945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2311fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2329854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
233945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2341fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
235945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2361fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2377741e03eSIan Rogers 	return TEST_OK;
238945aea22SJiri Olsa }
239945aea22SJiri Olsa 
240378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
24163503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
242945aea22SJiri Olsa {
243515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
244945aea22SJiri Olsa 
2451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
249945aea22SJiri Olsa 
250945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
251945aea22SJiri Olsa }
252945aea22SJiri Olsa 
253945aea22SJiri Olsa static int
25463503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
255945aea22SJiri Olsa {
25632dcd021SJiri Olsa 	struct evsel *evsel;
257945aea22SJiri Olsa 
2586484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
259945aea22SJiri Olsa 
260e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
261945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user",
2621fc632ceSJiri Olsa 				!evsel->core.attr.exclude_user);
263945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel",
2641fc632ceSJiri Olsa 				evsel->core.attr.exclude_kernel);
2651fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2661fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
267945aea22SJiri Olsa 	}
268945aea22SJiri Olsa 
269945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
270945aea22SJiri Olsa }
271378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
272945aea22SJiri Olsa 
27363503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
274945aea22SJiri Olsa {
275515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
276945aea22SJiri Olsa 
2771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
281945aea22SJiri Olsa 
282945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
283945aea22SJiri Olsa }
284945aea22SJiri Olsa 
28563503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
286945aea22SJiri Olsa {
287515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
288945aea22SJiri Olsa 
2891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
293945aea22SJiri Olsa 
294945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
295945aea22SJiri Olsa }
296945aea22SJiri Olsa 
29763503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
298945aea22SJiri Olsa {
299515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
300945aea22SJiri Olsa 
3011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
305945aea22SJiri Olsa 
306945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
307945aea22SJiri Olsa }
308945aea22SJiri Olsa 
30963503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
310945aea22SJiri Olsa {
311515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
312945aea22SJiri Olsa 
3131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
315945aea22SJiri Olsa 
316945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
317945aea22SJiri Olsa }
318945aea22SJiri Olsa 
31963503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
320945aea22SJiri Olsa {
321515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
322945aea22SJiri Olsa 
3231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
3241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
325945aea22SJiri Olsa 
326945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
327945aea22SJiri Olsa }
328945aea22SJiri Olsa 
32963503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
330945aea22SJiri Olsa {
331515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
332945aea22SJiri Olsa 
3331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
337945aea22SJiri Olsa 
338945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
339945aea22SJiri Olsa }
340945aea22SJiri Olsa 
34163503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
342945aea22SJiri Olsa {
343515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
344945aea22SJiri Olsa 
3451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
349945aea22SJiri Olsa 
350945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
351945aea22SJiri Olsa }
352945aea22SJiri Olsa 
35363503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
354a1e12da4SJiri Olsa {
355515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
356a1e12da4SJiri Olsa 
3571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
3601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
364a1e12da4SJiri Olsa 
365a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
366a1e12da4SJiri Olsa }
367a1e12da4SJiri Olsa 
36863503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
369a1e12da4SJiri Olsa {
370515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
371a1e12da4SJiri Olsa 
3721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
3751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
379a1e12da4SJiri Olsa 
380a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
381a1e12da4SJiri Olsa }
382a1e12da4SJiri Olsa 
38363503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
384945aea22SJiri Olsa {
385515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
386945aea22SJiri Olsa 
387945aea22SJiri Olsa 
3881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
392945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3938ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:u"));
394945aea22SJiri Olsa 
395945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
396945aea22SJiri Olsa }
397945aea22SJiri Olsa 
39863503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
399945aea22SJiri Olsa {
400515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
401945aea22SJiri Olsa 
4021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
406945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4078ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:x:k"));
408945aea22SJiri Olsa 
409945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
410945aea22SJiri Olsa }
411945aea22SJiri Olsa 
41263503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
413945aea22SJiri Olsa {
414515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
415945aea22SJiri Olsa 
4161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
420945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4218ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:r:hp"));
422945aea22SJiri Olsa 
423945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
424945aea22SJiri Olsa }
425945aea22SJiri Olsa 
42663503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
427945aea22SJiri Olsa {
428515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
429945aea22SJiri Olsa 
4301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
434945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4358ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:w:up"));
436945aea22SJiri Olsa 
437945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
438945aea22SJiri Olsa }
439945aea22SJiri Olsa 
44063503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
441945aea22SJiri Olsa {
442515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
443945aea22SJiri Olsa 
4441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
448945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4498ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:rw:kp"));
450945aea22SJiri Olsa 
451945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
452945aea22SJiri Olsa }
453945aea22SJiri Olsa 
45463503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
455945aea22SJiri Olsa {
456945aea22SJiri Olsa 
457515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
458945aea22SJiri Olsa 
4596484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
4601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4619854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config",    test_config(evsel, 10));
4621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
4631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
464204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3",    0 == evsel->core.attr.config3);
465ee4c7588SJiri Olsa 	/*
46678e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
467ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
468ee4c7588SJiri Olsa 	 */
4691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
470945aea22SJiri Olsa 
4717741e03eSIan Rogers 	return TEST_OK;
472945aea22SJiri Olsa }
473945aea22SJiri Olsa 
474378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
47563503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
476945aea22SJiri Olsa {
477515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
478945aea22SJiri Olsa 
4796484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
480945aea22SJiri Olsa 
481945aea22SJiri Olsa 	/* r1 */
4821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4839854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
4841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
4851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
486204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3);
4871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
491945aea22SJiri Olsa 
49243f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
493e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
495945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
4961fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
4971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
4981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
5001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
502945aea22SJiri Olsa 
503945aea22SJiri Olsa 	/* 1:1:hp */
504e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
5069854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
5071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
5081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
5091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
5101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
511945aea22SJiri Olsa 
5127741e03eSIan Rogers 	return TEST_OK;
513945aea22SJiri Olsa }
514378ef0f5SIan Rogers #endif
515945aea22SJiri Olsa 
51663503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
517945aea22SJiri Olsa {
518515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
519945aea22SJiri Olsa 
520945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
5216484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5239854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
5248ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
525945aea22SJiri Olsa 
526945aea22SJiri Olsa 	/* cpu/config=2/u" */
527e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5286484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5309854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 2));
531945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
5328ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
533945aea22SJiri Olsa 
5347741e03eSIan Rogers 	return TEST_OK;
535945aea22SJiri Olsa }
536945aea22SJiri Olsa 
53763503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
53871ef150eSKan Liang {
539515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
54071ef150eSKan Liang 
54171ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
5426484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5449854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
54571ef150eSKan Liang 	/*
54678e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
54771ef150eSKan Liang 	 * while this test executes only parse events method.
54871ef150eSKan Liang 	 */
5491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
55027de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
55271ef150eSKan Liang 
55371ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
554e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5569854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 2));
55771ef150eSKan Liang 	/*
55878e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
55971ef150eSKan Liang 	 * while this test executes only parse events method.
56071ef150eSKan Liang 	 */
5611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
56227de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
56471ef150eSKan Liang 
5657741e03eSIan Rogers 	return TEST_OK;
56671ef150eSKan Liang }
56771ef150eSKan Liang 
56863503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
569945aea22SJiri Olsa {
570515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
571945aea22SJiri Olsa 
5726484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
5735a52817eSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type ||
5745a52817eSIan Rogers 				      strcmp(evsel->pmu_name, "cpu"));
575945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
5761fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
577945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
5781fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5820997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
583945aea22SJiri Olsa 
5847741e03eSIan Rogers 	return TEST_OK;
585945aea22SJiri Olsa }
586945aea22SJiri Olsa 
587ffe59788SKan Liang 
58863503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
589ffe59788SKan Liang {
590515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
591ffe59788SKan Liang 
592ffe59788SKan Liang 	/* pmu-event:u */
5936484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
594ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5951fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
596ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5971fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
6001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
6010997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
602ffe59788SKan Liang 
603ffe59788SKan Liang 	/* cpu/pmu-event/u*/
604e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6056484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6065a52817eSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type ||
6075a52817eSIan Rogers 				      strcmp(evsel->pmu_name, "cpu"));
608ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
6091fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
610ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
6111fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
6121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
6141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
6150997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned);
616ffe59788SKan Liang 
6177741e03eSIan Rogers 	return TEST_OK;
618ffe59788SKan Liang }
619ffe59788SKan Liang 
620945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
621945aea22SJiri Olsa {
6226cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
623945aea22SJiri Olsa 
624945aea22SJiri Olsa 	/* config=10 */
6256cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
626945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
627945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
628945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
629945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
630945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
6314f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
632945aea22SJiri Olsa 
633945aea22SJiri Olsa 	/* config1 */
6346cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
635945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
636945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
637945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
638945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
639945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6404f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1"));
641945aea22SJiri Olsa 
642945aea22SJiri Olsa 	/* config2=3 */
6436cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
644945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
645945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
646945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
647945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
648945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
6494f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2"));
650945aea22SJiri Olsa 
651204e7c49SRob Herring 	/* config3=4 */
652204e7c49SRob Herring 	term = list_entry(term->list.next, struct parse_events_term, list);
653204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type term",
654204e7c49SRob Herring 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3);
655204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type val",
656204e7c49SRob Herring 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
657204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong val", term->val.num == 4);
658204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3"));
659204e7c49SRob Herring 
660945aea22SJiri Olsa 	/* umask=1*/
6616cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
662945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
663945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
664945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
665945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
666945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
667945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
668945aea22SJiri Olsa 
6694929e95aSJiri Olsa 	/*
6704929e95aSJiri Olsa 	 * read
6714929e95aSJiri Olsa 	 *
6724929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
6734929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
6744929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
6754929e95aSJiri Olsa 	 */
6764929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6774929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
67870c90e4aSIan Rogers 			term->type_term == PARSE_EVENTS__TERM_TYPE_RAW);
6794929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
68070c90e4aSIan Rogers 			term->type_val == PARSE_EVENTS__TERM_TYPE_STR);
68170c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "read"));
68270c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw"));
6834929e95aSJiri Olsa 
6844929e95aSJiri Olsa 	/*
6854929e95aSJiri Olsa 	 * r0xead
6864929e95aSJiri Olsa 	 *
6874929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
6884929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
6894929e95aSJiri Olsa 	 */
6904929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6914929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
69270c90e4aSIan Rogers 			term->type_term == PARSE_EVENTS__TERM_TYPE_RAW);
6934929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
69470c90e4aSIan Rogers 			term->type_val == PARSE_EVENTS__TERM_TYPE_STR);
69570c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead"));
69670c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw"));
6977741e03eSIan Rogers 	return TEST_OK;
698945aea22SJiri Olsa }
699945aea22SJiri Olsa 
70063503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
701945aea22SJiri Olsa {
70232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
703945aea22SJiri Olsa 
7046484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
7059d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
706945aea22SJiri Olsa 
707945aea22SJiri Olsa 	/* instructions:k */
708515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
7109854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
7111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
717c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7185643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7192bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
720a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
721945aea22SJiri Olsa 
722945aea22SJiri Olsa 	/* cycles:upp */
723e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
7259854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
7261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
729945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
7301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
733fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7342bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
735a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
736945aea22SJiri Olsa 
7377741e03eSIan Rogers 	return TEST_OK;
738945aea22SJiri Olsa }
739945aea22SJiri Olsa 
74063503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
741945aea22SJiri Olsa {
74232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
743945aea22SJiri Olsa 
7446484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
7459d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
746945aea22SJiri Olsa 
747945aea22SJiri Olsa 	/* faults + :ku modifier */
748515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
7509854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS));
7511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
754943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
757c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7585643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7592bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
760a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
761945aea22SJiri Olsa 
762945aea22SJiri Olsa 	/* cache-references + :u modifier */
763e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
7659854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES));
7661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
772fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7732bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
774a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
775945aea22SJiri Olsa 
776945aea22SJiri Olsa 	/* cycles:k */
777e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
7799854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
7801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
786c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
787a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
788945aea22SJiri Olsa 
7897741e03eSIan Rogers 	return TEST_OK;
790945aea22SJiri Olsa }
791945aea22SJiri Olsa 
792378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
79363503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
794945aea22SJiri Olsa {
79532dcd021SJiri Olsa 	struct evsel *evsel, *leader;
796945aea22SJiri Olsa 
7976484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
7989d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
799945aea22SJiri Olsa 
80043f322b4SRiku Voipio 	/* group1 syscalls:sys_enter_openat:H */
801515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
8021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
803945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
8041fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
8051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
8061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
812c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
813945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
814945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
8155643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8162bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
817a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
818945aea22SJiri Olsa 
819945aea22SJiri Olsa 	/* group1 cycles:kppp */
820e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8229854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
8231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
826945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3);
830fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
831945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
8322bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
833a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
834945aea22SJiri Olsa 
835945aea22SJiri Olsa 	/* group2 cycles + G modifier */
836e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
8371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8389854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
8391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
845c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
846945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
847945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
8485643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8492bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
850a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
851945aea22SJiri Olsa 
852945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
853e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
8559854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 3));
8561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
862fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8632bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
864a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
865945aea22SJiri Olsa 
866945aea22SJiri Olsa 	/* instructions:u */
867e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8699854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
8701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
873943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
876c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
877a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
878945aea22SJiri Olsa 
8797741e03eSIan Rogers 	return TEST_OK;
880945aea22SJiri Olsa }
881378ef0f5SIan Rogers #endif
882945aea22SJiri Olsa 
88363503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
884945aea22SJiri Olsa {
88532dcd021SJiri Olsa 	struct evsel *evsel, *leader;
886945aea22SJiri Olsa 
8876484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
8889d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
889945aea22SJiri Olsa 
890945aea22SJiri Olsa 	/* cycles:u + p */
891515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
8921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8939854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
8941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
897945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
901945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
902c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9035643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9042bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
905a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
906945aea22SJiri Olsa 
907945aea22SJiri Olsa 	/* instructions:kp + p */
908e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9109854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
9111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
9121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
914945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
9151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
918fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9192bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
920a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
921945aea22SJiri Olsa 
9227741e03eSIan Rogers 	return TEST_OK;
923945aea22SJiri Olsa }
924945aea22SJiri Olsa 
92563503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
926945aea22SJiri Olsa {
92732dcd021SJiri Olsa 	struct evsel *evsel, *leader;
928945aea22SJiri Olsa 
9296484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
9309d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
931945aea22SJiri Olsa 
932945aea22SJiri Olsa 	/* cycles + G */
933515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9359854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
9361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
942945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
943c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9445643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9452bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
946a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
947945aea22SJiri Olsa 
948945aea22SJiri Olsa 	/* instructions + G */
949e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9519854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
9521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
958fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9592bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
960a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
961945aea22SJiri Olsa 
962945aea22SJiri Olsa 	/* cycles:G */
963e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
9641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9659854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
9661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
972945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
973c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9745643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9752bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
976a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
977945aea22SJiri Olsa 
978945aea22SJiri Olsa 	/* instructions:G */
979e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9819854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
9821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
988fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9892bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
990945aea22SJiri Olsa 
991945aea22SJiri Olsa 	/* cycles */
992e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9949854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
9951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1001c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
1002945aea22SJiri Olsa 
10037741e03eSIan Rogers 	return TEST_OK;
1004945aea22SJiri Olsa }
1005945aea22SJiri Olsa 
100663503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
10075a30a99fSJiri Olsa {
100832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10095a30a99fSJiri Olsa 
10106484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10119d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10125a30a99fSJiri Olsa 
10135a30a99fSJiri Olsa 	/* cycles + :H group modifier */
1014515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10169854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10235a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1024c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10255643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10262bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10275a30a99fSJiri Olsa 
10285a30a99fSJiri Olsa 	/* cache-misses:G + :H group modifier */
1029e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10319854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
10321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1038fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10392bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10405a30a99fSJiri Olsa 
10417741e03eSIan Rogers 	return TEST_OK;
10425a30a99fSJiri Olsa }
10435a30a99fSJiri Olsa 
104463503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
10455a30a99fSJiri Olsa {
104632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10475a30a99fSJiri Olsa 
10486484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10499d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10505a30a99fSJiri Olsa 
10515a30a99fSJiri Olsa 	/* cycles + :G group modifier */
1052515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10549854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10615a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1062c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10635643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10642bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10655a30a99fSJiri Olsa 
10665a30a99fSJiri Olsa 	/* cache-misses:H + :G group modifier */
1067e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10699854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
10701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1076fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10772bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10785a30a99fSJiri Olsa 
10797741e03eSIan Rogers 	return TEST_OK;
10805a30a99fSJiri Olsa }
10815a30a99fSJiri Olsa 
108263503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
10835a30a99fSJiri Olsa {
108432dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10855a30a99fSJiri Olsa 
10866484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10879d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10885a30a99fSJiri Olsa 
10895a30a99fSJiri Olsa 	/* cycles:G + :u group modifier */
1090515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10929854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10995a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1100c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11015643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11022bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11035a30a99fSJiri Olsa 
11045a30a99fSJiri Olsa 	/* cache-misses:H + :u group modifier */
1105e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11079854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
11081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1114fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11152bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11165a30a99fSJiri Olsa 
11177741e03eSIan Rogers 	return TEST_OK;
11185a30a99fSJiri Olsa }
11195a30a99fSJiri Olsa 
112063503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
11215a30a99fSJiri Olsa {
112232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
11235a30a99fSJiri Olsa 
11246484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
11259d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
11265a30a99fSJiri Olsa 
11275a30a99fSJiri Olsa 	/* cycles:G + :uG group modifier */
1128515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11309854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11375a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1138c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11395643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11402bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11415a30a99fSJiri Olsa 
11425a30a99fSJiri Olsa 	/* cache-misses:H + :uG group modifier */
1143e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11459854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
11461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1152fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11532bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11545a30a99fSJiri Olsa 
11557741e03eSIan Rogers 	return TEST_OK;
11565a30a99fSJiri Olsa }
11575a30a99fSJiri Olsa 
115863503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1159a9f93f97SJiri Olsa {
116032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1161a9f93f97SJiri Olsa 
11626484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1163a9f93f97SJiri Olsa 
1164a9f93f97SJiri Olsa 	/* cycles - sampling group leader */
1165515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11679854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1174a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1175fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1176a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1177a9f93f97SJiri Olsa 
1178a9f93f97SJiri Olsa 	/* cache-misses - not sampling */
1179e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11819854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
11821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1188fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1189a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1190a9f93f97SJiri Olsa 
1191a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1192e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11949854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
11951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1201a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1202fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1203a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1204a9f93f97SJiri Olsa 
12057741e03eSIan Rogers 	return TEST_OK;
1206a9f93f97SJiri Olsa }
1207a9f93f97SJiri Olsa 
120863503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1209a9f93f97SJiri Olsa {
121032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1211a9f93f97SJiri Olsa 
12126484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
1213a9f93f97SJiri Olsa 
1214a9f93f97SJiri Olsa 	/* instructions - sampling group leader */
1215515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12179854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
12181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1224a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1225fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1226a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1227a9f93f97SJiri Olsa 
1228a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1229e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12319854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
12321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1238a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1239fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1240a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1241a9f93f97SJiri Olsa 
12427741e03eSIan Rogers 	return TEST_OK;
1243a9f93f97SJiri Olsa }
1244a9f93f97SJiri Olsa 
124563503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1246c9ee780fSMichael Ellerman {
1247515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1248c9ee780fSMichael Ellerman 
12491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1254c9ee780fSMichael Ellerman 
1255c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1256c9ee780fSMichael Ellerman }
1257c9ee780fSMichael Ellerman 
125863503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1259c9ee780fSMichael Ellerman {
126032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1261c9ee780fSMichael Ellerman 
12626484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1263c9ee780fSMichael Ellerman 
1264c9ee780fSMichael Ellerman 	/* cycles - group leader */
1265515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12679854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
1268c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1269fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1271c9ee780fSMichael Ellerman 
1272c9ee780fSMichael Ellerman 	/* cache-misses - can not be pinned, but will go on with the leader */
1273e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12759854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
12761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1277c9ee780fSMichael Ellerman 
1278c9ee780fSMichael Ellerman 	/* branch-misses - ditto */
1279e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12809854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
12811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1282c9ee780fSMichael Ellerman 
12837741e03eSIan Rogers 	return TEST_OK;
1284c9ee780fSMichael Ellerman }
1285c9ee780fSMichael Ellerman 
12860997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist)
12870997a266SAndi Kleen {
12880997a266SAndi Kleen 	struct evsel *evsel = evlist__first(evlist);
12890997a266SAndi Kleen 
12900997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12910997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12920997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12930997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12940997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
12950997a266SAndi Kleen 
12960997a266SAndi Kleen 	return test__checkevent_symbolic_name(evlist);
12970997a266SAndi Kleen }
12980997a266SAndi Kleen 
12990997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist)
13000997a266SAndi Kleen {
13010997a266SAndi Kleen 	struct evsel *evsel, *leader;
13020997a266SAndi Kleen 
13030997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
13040997a266SAndi Kleen 
13050997a266SAndi Kleen 	/* cycles - group leader */
13060997a266SAndi Kleen 	evsel = leader = evlist__first(evlist);
13070997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13089854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
13090997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1310fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13110997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13120997a266SAndi Kleen 
13130997a266SAndi Kleen 	/* cache-misses - can not be pinned, but will go on with the leader */
13140997a266SAndi Kleen 	evsel = evsel__next(evsel);
13150997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13169854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
13170997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13180997a266SAndi Kleen 
13190997a266SAndi Kleen 	/* branch-misses - ditto */
13200997a266SAndi Kleen 	evsel = evsel__next(evsel);
13219854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
13220997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13230997a266SAndi Kleen 
13247741e03eSIan Rogers 	return TEST_OK;
13250997a266SAndi Kleen }
132663503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1327ec32398cSJacob Shin {
1328515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1329ec32398cSJacob Shin 
13306484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13329854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
1333ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
13341fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1335ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
13361fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1337ec32398cSJacob Shin 
13387741e03eSIan Rogers 	return TEST_OK;
1339ec32398cSJacob Shin }
1340ec32398cSJacob Shin 
134163503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1342ec32398cSJacob Shin {
1343515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1344ec32398cSJacob Shin 
13456484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13479854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
1348ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
13491fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1350ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
13511fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1352ec32398cSJacob Shin 
13537741e03eSIan Rogers 	return TEST_OK;
1354ec32398cSJacob Shin }
1355ec32398cSJacob Shin 
1356ec32398cSJacob Shin static int
135763503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1358ec32398cSJacob Shin {
1359515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1360ec32398cSJacob Shin 
13611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1365ec32398cSJacob Shin 
1366ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1367ec32398cSJacob Shin }
1368ec32398cSJacob Shin 
136963503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1370ddd83c97SJiri Olsa {
1371515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1372ddd83c97SJiri Olsa 
13736484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
13741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
13759854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK));
13767741e03eSIan Rogers 	return TEST_OK;
1377ddd83c97SJiri Olsa }
1378ddd83c97SJiri Olsa 
137963503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
138010bf358aSWang Nan {
1381515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
138210bf358aSWang Nan 
1383ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn"));
13847741e03eSIan Rogers 	return TEST_OK;
138510bf358aSWang Nan }
138610bf358aSWang Nan 
138763503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
138810bf358aSWang Nan {
1389515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
139010bf358aSWang Nan 
1391ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu"));
13927741e03eSIan Rogers 	return TEST_OK;
139310bf358aSWang Nan }
139410bf358aSWang Nan 
139563503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
139610bf358aSWang Nan {
1397515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
139810bf358aSWang Nan 
1399ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu"));
14007741e03eSIan Rogers 	return TEST_OK;
140110bf358aSWang Nan }
140210bf358aSWang Nan 
140363503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
140443d0b978SWang Nan {
1405515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
140643d0b978SWang Nan 
1407ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu"));
14084a7c4eafSIan Rogers 	return test__checkevent_genhw(evlist);
140943d0b978SWang Nan }
141010bf358aSWang Nan 
14118f8c1068SIan Rogers static bool test__pmu_cpu_valid(void)
14128f8c1068SIan Rogers {
14138f8c1068SIan Rogers 	return !!perf_pmu__find("cpu");
14148f8c1068SIan Rogers }
14158f8c1068SIan Rogers 
141616ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
141716ddcfbfSJiri Olsa {
141816ddcfbfSJiri Olsa 	return !!perf_pmu__find("intel_pt");
141916ddcfbfSJiri Olsa }
142016ddcfbfSJiri Olsa 
142163503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1422b3f58c8dSArnaldo Carvalho de Melo {
1423515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1424b3f58c8dSArnaldo Carvalho de Melo 
1425ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u"));
14267741e03eSIan Rogers 	return TEST_OK;
1427b3f58c8dSArnaldo Carvalho de Melo }
1428b3f58c8dSArnaldo Carvalho de Melo 
142963503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
143006dc5bf2SAlexey Budankov {
1431515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
143206dc5bf2SAlexey Budankov 
14339854934bSIan Rogers 	TEST_ASSERT_VAL("wrong complex name parsing",
14349854934bSIan Rogers 			evsel__name_is(evsel,
14359854934bSIan Rogers 				       "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks"));
14367741e03eSIan Rogers 	return TEST_OK;
143706dc5bf2SAlexey Budankov }
143806dc5bf2SAlexey Budankov 
14393a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
14403a6c51e4SJiri Olsa {
14413a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
14423a6c51e4SJiri Olsa 
14433a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
14443a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
14459854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a));
14467741e03eSIan Rogers 	return TEST_OK;
14473a6c51e4SJiri Olsa }
14483a6c51e4SJiri Olsa 
144963503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1450714a92d8SJiri Olsa {
1451515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1452714a92d8SJiri Olsa 
14531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14549854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
14551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14567741e03eSIan Rogers 	return TEST_OK;
1457714a92d8SJiri Olsa }
1458714a92d8SJiri Olsa 
145963503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1460714a92d8SJiri Olsa {
1461515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1462714a92d8SJiri Olsa 
14631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14649854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
14651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
14667741e03eSIan Rogers 	return TEST_OK;
1467714a92d8SJiri Olsa }
1468714a92d8SJiri Olsa 
1469378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
147082ce75d9SJiri Olsa static int count_tracepoints(void)
147182ce75d9SJiri Olsa {
147282ce75d9SJiri Olsa 	struct dirent *events_ent;
147382ce75d9SJiri Olsa 	DIR *events_dir;
147482ce75d9SJiri Olsa 	int cnt = 0;
147582ce75d9SJiri Olsa 
14767014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
147782ce75d9SJiri Olsa 
147882ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
147982ce75d9SJiri Olsa 
148082ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
148125a7d914SArnaldo Carvalho de Melo 		char *sys_path;
148282ce75d9SJiri Olsa 		struct dirent *sys_ent;
148382ce75d9SJiri Olsa 		DIR *sys_dir;
148482ce75d9SJiri Olsa 
148582ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
148682ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
148782ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
148882ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
148982ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
149082ce75d9SJiri Olsa 			continue;
149182ce75d9SJiri Olsa 
149225a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
149325a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
149482ce75d9SJiri Olsa 
149582ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
149682ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
149782ce75d9SJiri Olsa 
149882ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
149982ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
150082ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
150182ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
150282ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
150382ce75d9SJiri Olsa 				continue;
150482ce75d9SJiri Olsa 
150582ce75d9SJiri Olsa 			cnt++;
150682ce75d9SJiri Olsa 		}
150782ce75d9SJiri Olsa 
150882ce75d9SJiri Olsa 		closedir(sys_dir);
150925a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
151082ce75d9SJiri Olsa 	}
151182ce75d9SJiri Olsa 
151282ce75d9SJiri Olsa 	closedir(events_dir);
151382ce75d9SJiri Olsa 	return cnt;
151482ce75d9SJiri Olsa }
151582ce75d9SJiri Olsa 
151663503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
151782ce75d9SJiri Olsa {
151882ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
15196484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
152082ce75d9SJiri Olsa 
152182ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
152282ce75d9SJiri Olsa }
1523378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */
152482ce75d9SJiri Olsa 
152523b6339bSArnaldo Carvalho de Melo struct evlist_test {
1526945aea22SJiri Olsa 	const char *name;
152716ddcfbfSJiri Olsa 	bool (*valid)(void);
152863503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1529945aea22SJiri Olsa };
1530945aea22SJiri Olsa 
15318252e791SIan Rogers static const struct evlist_test test__events[] = {
1532378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1533615b8f99SAlexander Yarygin 	{
153443f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1535945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
15368252e791SIan Rogers 		/* 0 */
1537945aea22SJiri Olsa 	},
1538615b8f99SAlexander Yarygin 	{
1539945aea22SJiri Olsa 		.name  = "syscalls:*",
1540945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
15418252e791SIan Rogers 		/* 1 */
1542945aea22SJiri Olsa 	},
1543378ef0f5SIan Rogers #endif
1544615b8f99SAlexander Yarygin 	{
1545945aea22SJiri Olsa 		.name  = "r1a",
1546945aea22SJiri Olsa 		.check = test__checkevent_raw,
15478252e791SIan Rogers 		/* 2 */
1548945aea22SJiri Olsa 	},
1549615b8f99SAlexander Yarygin 	{
1550945aea22SJiri Olsa 		.name  = "1:1",
1551945aea22SJiri Olsa 		.check = test__checkevent_numeric,
15528252e791SIan Rogers 		/* 3 */
1553945aea22SJiri Olsa 	},
1554615b8f99SAlexander Yarygin 	{
1555945aea22SJiri Olsa 		.name  = "instructions",
1556945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
15578252e791SIan Rogers 		/* 4 */
1558945aea22SJiri Olsa 	},
1559615b8f99SAlexander Yarygin 	{
1560945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1561945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
15628252e791SIan Rogers 		/* 5 */
1563945aea22SJiri Olsa 	},
1564615b8f99SAlexander Yarygin 	{
1565945aea22SJiri Olsa 		.name  = "faults",
1566945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
15678252e791SIan Rogers 		/* 6 */
1568945aea22SJiri Olsa 	},
1569615b8f99SAlexander Yarygin 	{
1570945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1571945aea22SJiri Olsa 		.check = test__checkevent_genhw,
15728252e791SIan Rogers 		/* 7 */
1573945aea22SJiri Olsa 	},
1574615b8f99SAlexander Yarygin 	{
1575945aea22SJiri Olsa 		.name  = "mem:0",
1576945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
15778252e791SIan Rogers 		/* 8 */
1578945aea22SJiri Olsa 	},
1579615b8f99SAlexander Yarygin 	{
1580945aea22SJiri Olsa 		.name  = "mem:0:x",
1581945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
15828252e791SIan Rogers 		/* 9 */
1583945aea22SJiri Olsa 	},
1584615b8f99SAlexander Yarygin 	{
1585945aea22SJiri Olsa 		.name  = "mem:0:r",
1586945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
15878252e791SIan Rogers 		/* 0 */
1588945aea22SJiri Olsa 	},
1589615b8f99SAlexander Yarygin 	{
1590945aea22SJiri Olsa 		.name  = "mem:0:w",
1591945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
15928252e791SIan Rogers 		/* 1 */
1593945aea22SJiri Olsa 	},
1594378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1595615b8f99SAlexander Yarygin 	{
159643f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1597945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
15988252e791SIan Rogers 		/* 2 */
1599945aea22SJiri Olsa 	},
1600615b8f99SAlexander Yarygin 	{
1601945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1602945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
16038252e791SIan Rogers 		/* 3 */
1604945aea22SJiri Olsa 	},
1605378ef0f5SIan Rogers #endif
1606615b8f99SAlexander Yarygin 	{
1607945aea22SJiri Olsa 		.name  = "r1a:kp",
1608945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
16098252e791SIan Rogers 		/* 4 */
1610945aea22SJiri Olsa 	},
1611615b8f99SAlexander Yarygin 	{
1612945aea22SJiri Olsa 		.name  = "1:1:hp",
1613945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
16148252e791SIan Rogers 		/* 5 */
1615945aea22SJiri Olsa 	},
1616615b8f99SAlexander Yarygin 	{
1617945aea22SJiri Olsa 		.name  = "instructions:h",
1618945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
16198252e791SIan Rogers 		/* 6 */
1620945aea22SJiri Olsa 	},
1621615b8f99SAlexander Yarygin 	{
1622945aea22SJiri Olsa 		.name  = "faults:u",
1623945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
16248252e791SIan Rogers 		/* 7 */
1625945aea22SJiri Olsa 	},
1626615b8f99SAlexander Yarygin 	{
1627945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1628945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
16298252e791SIan Rogers 		/* 8 */
1630945aea22SJiri Olsa 	},
1631615b8f99SAlexander Yarygin 	{
1632945aea22SJiri Olsa 		.name  = "mem:0:u",
1633945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
16348252e791SIan Rogers 		/* 9 */
1635945aea22SJiri Olsa 	},
1636615b8f99SAlexander Yarygin 	{
1637945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1638945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
16398252e791SIan Rogers 		/* 0 */
1640945aea22SJiri Olsa 	},
1641615b8f99SAlexander Yarygin 	{
1642945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1643945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
16448252e791SIan Rogers 		/* 1 */
1645945aea22SJiri Olsa 	},
1646615b8f99SAlexander Yarygin 	{
1647945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1648945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
16498252e791SIan Rogers 		/* 2 */
1650945aea22SJiri Olsa 	},
1651378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1652615b8f99SAlexander Yarygin 	{
165343f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1654945aea22SJiri Olsa 		.check = test__checkevent_list,
16558252e791SIan Rogers 		/* 3 */
1656945aea22SJiri Olsa 	},
1657378ef0f5SIan Rogers #endif
1658615b8f99SAlexander Yarygin 	{
1659945aea22SJiri Olsa 		.name  = "instructions:G",
1660945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
16618252e791SIan Rogers 		/* 4 */
1662945aea22SJiri Olsa 	},
1663615b8f99SAlexander Yarygin 	{
1664945aea22SJiri Olsa 		.name  = "instructions:H",
1665945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
16668252e791SIan Rogers 		/* 5 */
1667945aea22SJiri Olsa 	},
1668615b8f99SAlexander Yarygin 	{
1669945aea22SJiri Olsa 		.name  = "mem:0:rw",
1670945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
16718252e791SIan Rogers 		/* 6 */
1672945aea22SJiri Olsa 	},
1673615b8f99SAlexander Yarygin 	{
1674945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1675945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
16768252e791SIan Rogers 		/* 7 */
1677945aea22SJiri Olsa 	},
1678615b8f99SAlexander Yarygin 	{
1679945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1680945aea22SJiri Olsa 		.check = test__group1,
16818252e791SIan Rogers 		/* 8 */
1682945aea22SJiri Olsa 	},
1683615b8f99SAlexander Yarygin 	{
1684945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1685945aea22SJiri Olsa 		.check = test__group2,
16868252e791SIan Rogers 		/* 9 */
1687945aea22SJiri Olsa 	},
1688378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1689615b8f99SAlexander Yarygin 	{
169043f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1691945aea22SJiri Olsa 		.check = test__group3,
16928252e791SIan Rogers 		/* 0 */
1693945aea22SJiri Olsa 	},
1694378ef0f5SIan Rogers #endif
1695615b8f99SAlexander Yarygin 	{
1696945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1697945aea22SJiri Olsa 		.check = test__group4,
16988252e791SIan Rogers 		/* 1 */
1699945aea22SJiri Olsa 	},
1700615b8f99SAlexander Yarygin 	{
1701945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1702945aea22SJiri Olsa 		.check = test__group5,
17038252e791SIan Rogers 		/* 2 */
1704945aea22SJiri Olsa 	},
1705378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1706615b8f99SAlexander Yarygin 	{
170782ce75d9SJiri Olsa 		.name  = "*:*",
170882ce75d9SJiri Olsa 		.check = test__all_tracepoints,
17098252e791SIan Rogers 		/* 3 */
171082ce75d9SJiri Olsa 	},
1711378ef0f5SIan Rogers #endif
1712615b8f99SAlexander Yarygin 	{
17135a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
17145a30a99fSJiri Olsa 		.check = test__group_gh1,
17158252e791SIan Rogers 		/* 4 */
17165a30a99fSJiri Olsa 	},
1717615b8f99SAlexander Yarygin 	{
17185a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
17195a30a99fSJiri Olsa 		.check = test__group_gh2,
17208252e791SIan Rogers 		/* 5 */
17215a30a99fSJiri Olsa 	},
1722615b8f99SAlexander Yarygin 	{
17235a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
17245a30a99fSJiri Olsa 		.check = test__group_gh3,
17258252e791SIan Rogers 		/* 6 */
17265a30a99fSJiri Olsa 	},
1727615b8f99SAlexander Yarygin 	{
17285a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
17295a30a99fSJiri Olsa 		.check = test__group_gh4,
17308252e791SIan Rogers 		/* 7 */
17315a30a99fSJiri Olsa 	},
1732615b8f99SAlexander Yarygin 	{
1733a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1734a9f93f97SJiri Olsa 		.check = test__leader_sample1,
17358252e791SIan Rogers 		/* 8 */
1736a9f93f97SJiri Olsa 	},
1737615b8f99SAlexander Yarygin 	{
1738a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1739a9f93f97SJiri Olsa 		.check = test__leader_sample2,
17408252e791SIan Rogers 		/* 9 */
1741a9f93f97SJiri Olsa 	},
1742615b8f99SAlexander Yarygin 	{
1743c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1744c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
17458252e791SIan Rogers 		/* 0 */
1746c9ee780fSMichael Ellerman 	},
1747615b8f99SAlexander Yarygin 	{
1748c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1749c9ee780fSMichael Ellerman 		.check = test__pinned_group,
17508252e791SIan Rogers 		/* 1 */
1751c9ee780fSMichael Ellerman 	},
1752ec32398cSJacob Shin 	{
1753ec32398cSJacob Shin 		.name  = "mem:0/1",
1754ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
17558252e791SIan Rogers 		/* 2 */
1756ec32398cSJacob Shin 	},
1757ec32398cSJacob Shin 	{
1758ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1759ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
17608252e791SIan Rogers 		/* 3 */
1761ec32398cSJacob Shin 	},
1762ec32398cSJacob Shin 	{
1763ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1764ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
17658252e791SIan Rogers 		/* 4 */
1766ec32398cSJacob Shin 	},
1767378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT)
1768c0bc8c6dSAlexander Yarygin 	{
1769c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1770c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
177153fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
17728252e791SIan Rogers 		/* 0 */
1773c0bc8c6dSAlexander Yarygin 	},
1774c0bc8c6dSAlexander Yarygin #endif
1775a1e12da4SJiri Olsa 	{
1776a1e12da4SJiri Olsa 		.name  = "instructions:I",
1777a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
17788252e791SIan Rogers 		/* 5 */
1779a1e12da4SJiri Olsa 	},
1780a1e12da4SJiri Olsa 	{
1781a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1782a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
17838252e791SIan Rogers 		/* 6 */
1784a1e12da4SJiri Olsa 	},
1785ddd83c97SJiri Olsa 	{
1786ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1787ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
17888252e791SIan Rogers 		/* 7 */
1789ddd83c97SJiri Olsa 	},
179010bf358aSWang Nan 	{
179110bf358aSWang Nan 		.name  = "instructions/name=insn/",
179210bf358aSWang Nan 		.check = test__checkevent_config_symbol,
17938252e791SIan Rogers 		/* 8 */
179410bf358aSWang Nan 	},
179510bf358aSWang Nan 	{
179610bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
179710bf358aSWang Nan 		.check = test__checkevent_config_raw,
17988252e791SIan Rogers 		/* 9 */
179910bf358aSWang Nan 	},
180010bf358aSWang Nan 	{
180110bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
180210bf358aSWang Nan 		.check = test__checkevent_config_num,
18038252e791SIan Rogers 		/* 0 */
180410bf358aSWang Nan 	},
180543d0b978SWang Nan 	{
180643d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
180743d0b978SWang Nan 		.check = test__checkevent_config_cache,
18088252e791SIan Rogers 		/* 1 */
180943d0b978SWang Nan 	},
1810b3f58c8dSArnaldo Carvalho de Melo 	{
1811b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
181216ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1813b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
18148252e791SIan Rogers 		/* 2 */
1815b3f58c8dSArnaldo Carvalho de Melo 	},
181606dc5bf2SAlexey Budankov 	{
181706dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
181806dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
18198252e791SIan Rogers 		/* 3 */
1820714a92d8SJiri Olsa 	},
1821714a92d8SJiri Olsa 	{
1822714a92d8SJiri Olsa 		.name  = "cycles//u",
1823714a92d8SJiri Olsa 		.check = test__sym_event_slash,
18248252e791SIan Rogers 		/* 4 */
1825714a92d8SJiri Olsa 	},
1826714a92d8SJiri Olsa 	{
1827714a92d8SJiri Olsa 		.name  = "cycles:k",
1828714a92d8SJiri Olsa 		.check = test__sym_event_dc,
18298252e791SIan Rogers 		/* 5 */
18300997a266SAndi Kleen 	},
18310997a266SAndi Kleen 	{
18320997a266SAndi Kleen 		.name  = "instructions:uep",
18330997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
18348252e791SIan Rogers 		/* 6 */
18350997a266SAndi Kleen 	},
18360997a266SAndi Kleen 	{
18370997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
18380997a266SAndi Kleen 		.check = test__exclusive_group,
18398252e791SIan Rogers 		/* 7 */
18400997a266SAndi Kleen 	},
1841945aea22SJiri Olsa };
1842945aea22SJiri Olsa 
18438252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
1844615b8f99SAlexander Yarygin 	{
1845945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
18468f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
1847945aea22SJiri Olsa 		.check = test__checkevent_pmu,
18488252e791SIan Rogers 		/* 0 */
1849945aea22SJiri Olsa 	},
1850615b8f99SAlexander Yarygin 	{
1851945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
18528f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
1853945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
18548252e791SIan Rogers 		/* 1 */
1855945aea22SJiri Olsa 	},
185671ef150eSKan Liang 	{
185771ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
18588f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
185971ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
18608252e791SIan Rogers 		/* 2 */
186171ef150eSKan Liang 	},
186206dc5bf2SAlexey Budankov 	{
1863a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
18648f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
186506dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
18668252e791SIan Rogers 		/* 3 */
18673a6c51e4SJiri Olsa 	},
18683a6c51e4SJiri Olsa 	{
18693a6c51e4SJiri Olsa 		.name  = "software/r1a/",
18703a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
18718252e791SIan Rogers 		/* 4 */
18723a6c51e4SJiri Olsa 	},
1873c33cdf54SJiri Olsa 	{
1874c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
1875c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
18768252e791SIan Rogers 		/* 5 */
1877c33cdf54SJiri Olsa 	},
18786fd1e519SIan Rogers 	{
18796fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/",
18806fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
18816fd1e519SIan Rogers 		.check = test__checkevent_genhw,
18826fd1e519SIan Rogers 		/* 6 */
18836fd1e519SIan Rogers 	},
18846fd1e519SIan Rogers 	{
18856fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/kp",
18866fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
18876fd1e519SIan Rogers 		.check = test__checkevent_genhw_modifier,
18886fd1e519SIan Rogers 		/* 7 */
18896fd1e519SIan Rogers 	},
18906fd1e519SIan Rogers 	{
18916fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-misses,name=cachepmu/",
18926fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
18936fd1e519SIan Rogers 		.check = test__checkevent_config_cache,
18946fd1e519SIan Rogers 		/* 8 */
18956fd1e519SIan Rogers 	},
1896945aea22SJiri Olsa };
1897945aea22SJiri Olsa 
189823b6339bSArnaldo Carvalho de Melo struct terms_test {
1899945aea22SJiri Olsa 	const char *str;
1900945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
1901945aea22SJiri Olsa };
1902945aea22SJiri Olsa 
1903b58eca40SIan Rogers static const struct terms_test test__terms[] = {
1904945aea22SJiri Olsa 	[0] = {
1905204e7c49SRob Herring 		.str   = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead",
1906945aea22SJiri Olsa 		.check = test__checkterms_simple,
1907945aea22SJiri Olsa 	},
1908945aea22SJiri Olsa };
1909945aea22SJiri Olsa 
19108252e791SIan Rogers static int test_event(const struct evlist_test *e)
1911945aea22SJiri Olsa {
1912a910e466SIan Rogers 	struct parse_events_error err;
191363503dbaSJiri Olsa 	struct evlist *evlist;
1914945aea22SJiri Olsa 	int ret;
1915945aea22SJiri Olsa 
191616ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
19177741e03eSIan Rogers 		pr_debug("... SKIP\n");
19187741e03eSIan Rogers 		return TEST_OK;
191916ddcfbfSJiri Olsa 	}
192016ddcfbfSJiri Olsa 
19210f98b11cSJiri Olsa 	evlist = evlist__new();
19227741e03eSIan Rogers 	if (evlist == NULL) {
19237741e03eSIan Rogers 		pr_err("Failed allocation");
19247741e03eSIan Rogers 		return TEST_FAIL;
19257741e03eSIan Rogers 	}
192607eafd4eSIan Rogers 	parse_events_error__init(&err);
1927933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
1928945aea22SJiri Olsa 	if (ret) {
1929933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
1930933ccf20SJiri Olsa 			 e->name, ret, err.str);
19316c191289SIan Rogers 		parse_events_error__print(&err, e->name);
19327741e03eSIan Rogers 		ret = TEST_FAIL;
19337741e03eSIan Rogers 		if (strstr(err.str, "can't access trace events"))
19347741e03eSIan Rogers 			ret = TEST_SKIP;
19352d4352c0SArnaldo Carvalho de Melo 	} else {
19362d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
1937945aea22SJiri Olsa 	}
193807eafd4eSIan Rogers 	parse_events_error__exit(&err);
1939c12995a5SJiri Olsa 	evlist__delete(evlist);
1940945aea22SJiri Olsa 
1941945aea22SJiri Olsa 	return ret;
1942945aea22SJiri Olsa }
1943945aea22SJiri Olsa 
1944b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
1945b4a7276cSJohn Garry {
1946b4a7276cSJohn Garry 	struct parse_events_error err;
1947b4a7276cSJohn Garry 	struct evlist *evlist;
1948b4a7276cSJohn Garry 	int ret;
1949b4a7276cSJohn Garry 
1950b4a7276cSJohn Garry 	evlist = evlist__new();
1951b4a7276cSJohn Garry 	if (!evlist)
1952b4a7276cSJohn Garry 		return -ENOMEM;
1953b4a7276cSJohn Garry 
1954b4a7276cSJohn Garry 	parse_events_error__init(&err);
1955*411ad22eSIan Rogers 	ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err,
1956*411ad22eSIan Rogers 			     &perf_pmu__fake, /*warn_if_reordered=*/true);
1957b4a7276cSJohn Garry 	if (ret) {
1958b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
1959b4a7276cSJohn Garry 			 str, ret, err.str);
1960b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
1961b4a7276cSJohn Garry 	}
1962b4a7276cSJohn Garry 
1963b4a7276cSJohn Garry 	parse_events_error__exit(&err);
1964b4a7276cSJohn Garry 	evlist__delete(evlist);
1965b4a7276cSJohn Garry 
1966b4a7276cSJohn Garry 	return ret;
1967b4a7276cSJohn Garry }
1968b4a7276cSJohn Garry 
19697741e03eSIan Rogers static int combine_test_results(int existing, int latest)
19707741e03eSIan Rogers {
19717741e03eSIan Rogers 	if (existing == TEST_FAIL)
19727741e03eSIan Rogers 		return TEST_FAIL;
19737741e03eSIan Rogers 	if (existing == TEST_SKIP)
19747741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
19757741e03eSIan Rogers 	return latest;
19767741e03eSIan Rogers }
19777741e03eSIan Rogers 
19788252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
1979945aea22SJiri Olsa {
19807741e03eSIan Rogers 	int ret = TEST_OK;
1981945aea22SJiri Olsa 
19828252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
19838252e791SIan Rogers 		const struct evlist_test *e = &events[i];
19847741e03eSIan Rogers 		int test_ret;
1985945aea22SJiri Olsa 
19867741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
19877741e03eSIan Rogers 		test_ret = test_event(e);
19887741e03eSIan Rogers 		if (test_ret != TEST_OK) {
19897741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
19907741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
19917741e03eSIan Rogers 		}
1992945aea22SJiri Olsa 	}
1993945aea22SJiri Olsa 
19947741e03eSIan Rogers 	return ret;
19957741e03eSIan Rogers }
19967741e03eSIan Rogers 
19977741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
19987741e03eSIan Rogers {
19997741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2000945aea22SJiri Olsa }
2001945aea22SJiri Olsa 
2002b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2003945aea22SJiri Olsa {
2004c549aca5SDavid Ahern 	struct list_head terms;
2005945aea22SJiri Olsa 	int ret;
2006945aea22SJiri Olsa 
2007c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2008945aea22SJiri Olsa 
2009c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2010945aea22SJiri Olsa 	if (ret) {
2011945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2012945aea22SJiri Olsa 			 t->str , ret);
2013945aea22SJiri Olsa 		return ret;
2014945aea22SJiri Olsa 	}
2015945aea22SJiri Olsa 
2016c549aca5SDavid Ahern 	ret = t->check(&terms);
2017682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2018945aea22SJiri Olsa 
2019945aea22SJiri Olsa 	return ret;
2020945aea22SJiri Olsa }
2021945aea22SJiri Olsa 
2022b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2023945aea22SJiri Olsa {
2024945aea22SJiri Olsa 	int ret = 0;
2025945aea22SJiri Olsa 
2026b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2027b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2028945aea22SJiri Olsa 
2029945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2030945aea22SJiri Olsa 		ret = test_term(t);
2031945aea22SJiri Olsa 		if (ret)
2032945aea22SJiri Olsa 			break;
2033945aea22SJiri Olsa 	}
2034945aea22SJiri Olsa 
2035945aea22SJiri Olsa 	return ret;
2036945aea22SJiri Olsa }
2037945aea22SJiri Olsa 
20387741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
20397741e03eSIan Rogers {
20407741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
20417741e03eSIan Rogers }
20427741e03eSIan Rogers 
20437741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2044945aea22SJiri Olsa {
20455a52817eSIan Rogers 	struct perf_pmu *pmu;
20465a52817eSIan Rogers 	int ret = TEST_OK;
20475a52817eSIan Rogers 
20485a52817eSIan Rogers 	if (list_empty(&pmus))
20495a52817eSIan Rogers 		perf_pmu__scan(NULL);
20505a52817eSIan Rogers 
20515a52817eSIan Rogers 	perf_pmus__for_each_pmu(pmu) {
2052945aea22SJiri Olsa 		struct stat st;
2053945aea22SJiri Olsa 		char path[PATH_MAX];
2054945aea22SJiri Olsa 		struct dirent *ent;
2055945aea22SJiri Olsa 		DIR *dir;
20565a52817eSIan Rogers 		int err;
2057945aea22SJiri Olsa 
20585a52817eSIan Rogers 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/",
20595a52817eSIan Rogers 			sysfs__mountpoint(), pmu->name);
20607741e03eSIan Rogers 
20615a52817eSIan Rogers 		err = stat(path, &st);
20625a52817eSIan Rogers 		if (err) {
20635a52817eSIan Rogers 			pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path);
20645a52817eSIan Rogers 			continue;
2065945aea22SJiri Olsa 		}
2066945aea22SJiri Olsa 
2067945aea22SJiri Olsa 		dir = opendir(path);
2068945aea22SJiri Olsa 		if (!dir) {
20697741e03eSIan Rogers 			pr_debug("can't open pmu event dir: %s\n", path);
20705a52817eSIan Rogers 			ret = combine_test_results(ret, TEST_SKIP);
20715a52817eSIan Rogers 			continue;
2072945aea22SJiri Olsa 		}
2073945aea22SJiri Olsa 
20747741e03eSIan Rogers 		while ((ent = readdir(dir))) {
20758252e791SIan Rogers 			struct evlist_test e = { .name = NULL, };
20762e2bbc03SArnaldo Carvalho de Melo 			char name[2 * NAME_MAX + 1 + 12 + 3];
20777741e03eSIan Rogers 			int test_ret;
2078945aea22SJiri Olsa 
207917a2634bSAndi Kleen 			/* Names containing . are special and cannot be used directly */
208017a2634bSAndi Kleen 			if (strchr(ent->d_name, '.'))
2081945aea22SJiri Olsa 				continue;
2082945aea22SJiri Olsa 
20835a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name);
2084945aea22SJiri Olsa 
2085945aea22SJiri Olsa 			e.name  = name;
2086945aea22SJiri Olsa 			e.check = test__checkevent_pmu_events;
2087945aea22SJiri Olsa 
20887741e03eSIan Rogers 			test_ret = test_event(&e);
20897741e03eSIan Rogers 			if (test_ret != TEST_OK) {
20907741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
20917741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
20927741e03eSIan Rogers 			}
20935a52817eSIan Rogers 
20945a52817eSIan Rogers 			if (!is_pmu_core(pmu->name))
20955a52817eSIan Rogers 				continue;
20965a52817eSIan Rogers 
2097146edff3SIan Rogers 			/*
2098146edff3SIan Rogers 			 * Names containing '-' are recognized as prefixes and suffixes
2099146edff3SIan Rogers 			 * due to '-' being a legacy PMU separator. This fails when the
2100146edff3SIan Rogers 			 * prefix or suffix collides with an existing legacy token. For
2101146edff3SIan Rogers 			 * example, branch-brs has a prefix (branch) that collides with
2102146edff3SIan Rogers 			 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2103146edff3SIan Rogers 			 * isn't expected after this. As event names in the config
2104146edff3SIan Rogers 			 * slashes are allowed a '-' in the name we check this works
2105146edff3SIan Rogers 			 * above.
2106146edff3SIan Rogers 			 */
2107146edff3SIan Rogers 			if (strchr(ent->d_name, '-'))
2108146edff3SIan Rogers 				continue;
2109146edff3SIan Rogers 
21105a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s:u,%s/event=%s/u",
21115a52817eSIan Rogers 				 ent->d_name, pmu->name, ent->d_name);
2112ffe59788SKan Liang 			e.name  = name;
2113ffe59788SKan Liang 			e.check = test__checkevent_pmu_events_mix;
21147741e03eSIan Rogers 			test_ret = test_event(&e);
21157741e03eSIan Rogers 			if (test_ret != TEST_OK) {
21167741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
21177741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
21187741e03eSIan Rogers 			}
2119945aea22SJiri Olsa 		}
2120945aea22SJiri Olsa 
2121945aea22SJiri Olsa 		closedir(dir);
21225a52817eSIan Rogers 	}
2123945aea22SJiri Olsa 	return ret;
2124945aea22SJiri Olsa }
2125945aea22SJiri Olsa 
21267741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21277741e03eSIan Rogers {
21287741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
21297741e03eSIan Rogers }
21307741e03eSIan Rogers 
2131c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2132c7a3828dSJin Yao {
2133c7a3828dSJin Yao 	char path[PATH_MAX];
2134c7a3828dSJin Yao 	DIR *dir;
2135c7a3828dSJin Yao 	struct dirent *dent;
2136c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2137c7a3828dSJin Yao 	char buf[128];
2138c7a3828dSJin Yao 	FILE *file;
2139c7a3828dSJin Yao 
2140c7a3828dSJin Yao 	if (!sysfs)
2141c7a3828dSJin Yao 		return false;
2142c7a3828dSJin Yao 
2143c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2144c7a3828dSJin Yao 	dir = opendir(path);
2145c7a3828dSJin Yao 	if (!dir)
2146c7a3828dSJin Yao 		return false;
2147c7a3828dSJin Yao 
2148c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2149c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2150c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2151c7a3828dSJin Yao 			continue;
2152c7a3828dSJin Yao 
2153c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2154c7a3828dSJin Yao 			 sysfs, dent->d_name);
2155c7a3828dSJin Yao 
2156c7a3828dSJin Yao 		if (!file_available(path))
2157c7a3828dSJin Yao 			continue;
2158c7a3828dSJin Yao 
2159c7a3828dSJin Yao 		file = fopen(path, "r");
2160c7a3828dSJin Yao 		if (!file)
2161c7a3828dSJin Yao 			continue;
2162c7a3828dSJin Yao 
2163c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2164c7a3828dSJin Yao 			fclose(file);
2165c7a3828dSJin Yao 			continue;
2166c7a3828dSJin Yao 		}
2167c7a3828dSJin Yao 
2168c7a3828dSJin Yao 		/* Remove the last '\n' */
2169c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2170c7a3828dSJin Yao 
2171c7a3828dSJin Yao 		fclose(file);
2172c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2173c7a3828dSJin Yao 		*alias = strdup(buf);
2174c7a3828dSJin Yao 		closedir(dir);
2175c7a3828dSJin Yao 
2176c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2177c7a3828dSJin Yao 			free(*event);
2178c7a3828dSJin Yao 			free(*alias);
2179c7a3828dSJin Yao 			return false;
2180c7a3828dSJin Yao 		}
2181c7a3828dSJin Yao 
2182c7a3828dSJin Yao 		return true;
2183c7a3828dSJin Yao 	}
2184c7a3828dSJin Yao 
2185c7a3828dSJin Yao 	closedir(dir);
2186c7a3828dSJin Yao 	return false;
2187c7a3828dSJin Yao }
2188c7a3828dSJin Yao 
2189c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2190c7a3828dSJin Yao {
2191c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2192c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2193c7a3828dSJin Yao 
2194c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2195c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
21967741e03eSIan Rogers 	return TEST_OK;
2197c7a3828dSJin Yao }
2198c7a3828dSJin Yao 
21997741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2200c7a3828dSJin Yao {
22018252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2202c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2203c7a3828dSJin Yao 
2204c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2205c7a3828dSJin Yao 		 event, alias);
2206c7a3828dSJin Yao 
2207c7a3828dSJin Yao 	e.name  = name;
2208c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2209c7a3828dSJin Yao 	return test_event(&e);
2210c7a3828dSJin Yao }
2211c7a3828dSJin Yao 
22127741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
22137741e03eSIan Rogers {
22147741e03eSIan Rogers 	char *event, *alias;
22157741e03eSIan Rogers 	int ret;
22167741e03eSIan Rogers 
22177741e03eSIan Rogers 	if (!test_alias(&event, &alias))
22187741e03eSIan Rogers 		return TEST_SKIP;
22197741e03eSIan Rogers 
22207741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
22217741e03eSIan Rogers 
22227741e03eSIan Rogers 	free(event);
22237741e03eSIan Rogers 	free(alias);
22247741e03eSIan Rogers 	return ret;
22257741e03eSIan Rogers }
22267741e03eSIan Rogers 
22277741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
22287741e03eSIan Rogers 				   int subtest __maybe_unused)
2229b4a7276cSJohn Garry {
2230b4a7276cSJohn Garry 	static const char events[][30] = {
2231b4a7276cSJohn Garry 			"event-hyphen",
2232b4a7276cSJohn Garry 			"event-two-hyph",
2233b4a7276cSJohn Garry 	};
22347741e03eSIan Rogers 	int ret = TEST_OK;
2235b4a7276cSJohn Garry 
22367741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
22377741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
22387741e03eSIan Rogers 
22397741e03eSIan Rogers 		if (test_ret != TEST_OK) {
22407741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
22417741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2242b4a7276cSJohn Garry 		}
2243b4a7276cSJohn Garry 	}
2244b4a7276cSJohn Garry 
2245b4a7276cSJohn Garry 	return ret;
2246b4a7276cSJohn Garry }
2247b4a7276cSJohn Garry 
22487741e03eSIan Rogers static struct test_case tests__parse_events[] = {
22497741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
22507741e03eSIan Rogers 			 events2,
22517741e03eSIan Rogers 			 "permissions"),
22527741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
22537741e03eSIan Rogers 			 pmu_events,
22547741e03eSIan Rogers 			 "permissions"),
22557741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
22567741e03eSIan Rogers 			 pmu_events2,
22577741e03eSIan Rogers 			 "permissions"),
22587741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
22597741e03eSIan Rogers 			 "no aliases in sysfs"),
22607741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
22617741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
22627741e03eSIan Rogers 	{	.name = NULL, }
22637741e03eSIan Rogers };
2264945aea22SJiri Olsa 
22657741e03eSIan Rogers struct test_suite suite__parse_events = {
22667741e03eSIan Rogers 	.desc = "Parse event definition strings",
22677741e03eSIan Rogers 	.test_cases = tests__parse_events,
22687741e03eSIan Rogers };
2269