xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 943b69ac1884d8e0260ee653e696456810d7c6e3)
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"
976b31a29SArnaldo Carvalho de Melo #include <dirent.h>
10a43783aeSArnaldo Carvalho de Melo #include <errno.h>
117a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h>
127a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h>
137a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h>
14877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h>
15f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h>
1620a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h>
17945aea22SJiri Olsa 
18945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
19945aea22SJiri Olsa 			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
20945aea22SJiri Olsa 
2153fe307dSThomas Richter #if defined(__s390x__)
2253fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this
2353fe307dSThomas Richter  * and retun success when trace point kvm_s390_create_vm
2453fe307dSThomas Richter  * exists. Otherwise this test always fails.
2553fe307dSThomas Richter  */
2653fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void)
2753fe307dSThomas Richter {
2853fe307dSThomas Richter 	char *eventfile;
2953fe307dSThomas Richter 	bool rc = false;
3053fe307dSThomas Richter 
3153fe307dSThomas Richter 	eventfile = get_events_file("kvm-s390");
3253fe307dSThomas Richter 
3353fe307dSThomas Richter 	if (eventfile) {
3453fe307dSThomas Richter 		DIR *mydir = opendir(eventfile);
3553fe307dSThomas Richter 
3653fe307dSThomas Richter 		if (mydir) {
3753fe307dSThomas Richter 			rc = true;
3853fe307dSThomas Richter 			closedir(mydir);
3953fe307dSThomas Richter 		}
4053fe307dSThomas Richter 		put_events_file(eventfile);
4153fe307dSThomas Richter 	}
4253fe307dSThomas Richter 
4353fe307dSThomas Richter 	return rc;
4453fe307dSThomas Richter }
4553fe307dSThomas Richter #endif
4653fe307dSThomas Richter 
4763503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist)
48945aea22SJiri Olsa {
49515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
50945aea22SJiri Olsa 
516484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
528d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups);
531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
54945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
551fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
57945aea22SJiri Olsa 	return 0;
58945aea22SJiri Olsa }
59945aea22SJiri Olsa 
6063503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist)
61945aea22SJiri Olsa {
6232dcd021SJiri Olsa 	struct evsel *evsel;
63945aea22SJiri Olsa 
646484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
658d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups);
66945aea22SJiri Olsa 
67e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
68945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong type",
691fc632ceSJiri Olsa 			PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
70945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_type",
711fc632ceSJiri Olsa 			PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
72945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_period",
731fc632ceSJiri Olsa 			1 == evsel->core.attr.sample_period);
74945aea22SJiri Olsa 	}
75945aea22SJiri Olsa 	return 0;
76945aea22SJiri Olsa }
77945aea22SJiri Olsa 
7863503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist)
79945aea22SJiri Olsa {
80515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
81945aea22SJiri Olsa 
826484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
85945aea22SJiri Olsa 	return 0;
86945aea22SJiri Olsa }
87945aea22SJiri Olsa 
8863503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
89945aea22SJiri Olsa {
90515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
91945aea22SJiri Olsa 
926484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
95945aea22SJiri Olsa 	return 0;
96945aea22SJiri Olsa }
97945aea22SJiri Olsa 
9863503dbaSJiri Olsa static int test__checkevent_symbolic_name(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_HARDWARE == evsel->core.attr.type);
104945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1051fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
106945aea22SJiri Olsa 	return 0;
107945aea22SJiri Olsa }
108945aea22SJiri Olsa 
10963503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
110945aea22SJiri Olsa {
111515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
112945aea22SJiri Olsa 
1136484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
115945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1161fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
117ee4c7588SJiri Olsa 	/*
118ee4c7588SJiri Olsa 	 * The period value gets configured within perf_evlist__config,
119ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
120ee4c7588SJiri Olsa 	 */
121945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong period",
1221fc632ceSJiri Olsa 			0 == evsel->core.attr.sample_period);
123945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1",
1241fc632ceSJiri Olsa 			0 == evsel->core.attr.config1);
125945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2",
1261fc632ceSJiri Olsa 			1 == evsel->core.attr.config2);
127945aea22SJiri Olsa 	return 0;
128945aea22SJiri Olsa }
129945aea22SJiri Olsa 
13063503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
131945aea22SJiri Olsa {
132515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
133945aea22SJiri Olsa 
1346484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
136945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1371fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
138945aea22SJiri Olsa 	return 0;
139945aea22SJiri Olsa }
140945aea22SJiri Olsa 
14163503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
142945aea22SJiri Olsa {
143515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
144945aea22SJiri Olsa 
1456484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
1471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config);
148945aea22SJiri Olsa 	return 0;
149945aea22SJiri Olsa }
150945aea22SJiri Olsa 
15163503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
152945aea22SJiri Olsa {
153515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
154945aea22SJiri Olsa 
1556484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
158945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
1591fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
160945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
1611fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
162945aea22SJiri Olsa 	return 0;
163945aea22SJiri Olsa }
164945aea22SJiri Olsa 
16563503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist)
166945aea22SJiri Olsa {
167515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
168945aea22SJiri Olsa 
1696484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
172945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1731fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
1741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
175945aea22SJiri Olsa 	return 0;
176945aea22SJiri Olsa }
177945aea22SJiri Olsa 
17863503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
179945aea22SJiri Olsa {
180515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
181945aea22SJiri Olsa 
1826484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
183945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
1841fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
186945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1871fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
188945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
1891fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
190945aea22SJiri Olsa 	return 0;
191945aea22SJiri Olsa }
192945aea22SJiri Olsa 
19363503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
194945aea22SJiri Olsa {
195515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
196945aea22SJiri Olsa 
1976484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
198945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
1991fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
201945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2021fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
203945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2041fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
205945aea22SJiri Olsa 	return 0;
206945aea22SJiri Olsa }
207945aea22SJiri Olsa 
20863503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
209945aea22SJiri Olsa {
210515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
211945aea22SJiri Olsa 
2126484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
213945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2141fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
216945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2171fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
218945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2191fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
220945aea22SJiri Olsa 	return 0;
221945aea22SJiri Olsa }
222945aea22SJiri Olsa 
22363503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
224945aea22SJiri Olsa {
225515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
226945aea22SJiri Olsa 
2271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
231945aea22SJiri Olsa 
232945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
233945aea22SJiri Olsa }
234945aea22SJiri Olsa 
235945aea22SJiri Olsa static int
23663503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
237945aea22SJiri Olsa {
23832dcd021SJiri Olsa 	struct evsel *evsel;
239945aea22SJiri Olsa 
2406484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
241945aea22SJiri Olsa 
242e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
243945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user",
2441fc632ceSJiri Olsa 				!evsel->core.attr.exclude_user);
245945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel",
2461fc632ceSJiri Olsa 				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 
251945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
252945aea22SJiri Olsa }
253945aea22SJiri Olsa 
25463503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
255945aea22SJiri Olsa {
256515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
257945aea22SJiri Olsa 
2581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
262945aea22SJiri Olsa 
263945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
264945aea22SJiri Olsa }
265945aea22SJiri Olsa 
26663503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
267945aea22SJiri Olsa {
268515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
269945aea22SJiri Olsa 
2701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
274945aea22SJiri Olsa 
275945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
276945aea22SJiri Olsa }
277945aea22SJiri Olsa 
27863503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
279945aea22SJiri Olsa {
280515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
281945aea22SJiri Olsa 
2821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
286945aea22SJiri Olsa 
287945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
288945aea22SJiri Olsa }
289945aea22SJiri Olsa 
29063503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
291945aea22SJiri Olsa {
292515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
293945aea22SJiri Olsa 
2941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
2951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
296945aea22SJiri Olsa 
297945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
298945aea22SJiri Olsa }
299945aea22SJiri Olsa 
30063503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
301945aea22SJiri Olsa {
302515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
303945aea22SJiri Olsa 
3041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
3051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
306945aea22SJiri Olsa 
307945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
308945aea22SJiri Olsa }
309945aea22SJiri Olsa 
31063503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
311945aea22SJiri Olsa {
312515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
313945aea22SJiri Olsa 
3141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
318945aea22SJiri Olsa 
319945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
320945aea22SJiri Olsa }
321945aea22SJiri Olsa 
32263503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
323945aea22SJiri Olsa {
324515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
325945aea22SJiri Olsa 
3261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
330945aea22SJiri Olsa 
331945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
332945aea22SJiri Olsa }
333945aea22SJiri Olsa 
33463503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
335a1e12da4SJiri Olsa {
336515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
337a1e12da4SJiri Olsa 
3381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
3411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
345a1e12da4SJiri Olsa 
346a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
347a1e12da4SJiri Olsa }
348a1e12da4SJiri Olsa 
34963503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
350a1e12da4SJiri Olsa {
351515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
352a1e12da4SJiri Olsa 
3531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
3561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
360a1e12da4SJiri Olsa 
361a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
362a1e12da4SJiri Olsa }
363a1e12da4SJiri Olsa 
36463503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
365945aea22SJiri Olsa {
366515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
367945aea22SJiri Olsa 
368945aea22SJiri Olsa 
3691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
373945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3748ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:u"));
375945aea22SJiri Olsa 
376945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
377945aea22SJiri Olsa }
378945aea22SJiri Olsa 
37963503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
380945aea22SJiri Olsa {
381515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
382945aea22SJiri Olsa 
3831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
387945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3888ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:x:k"));
389945aea22SJiri Olsa 
390945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
391945aea22SJiri Olsa }
392945aea22SJiri Olsa 
39363503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
394945aea22SJiri Olsa {
395515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
396945aea22SJiri Olsa 
3971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
401945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4028ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:r:hp"));
403945aea22SJiri Olsa 
404945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
405945aea22SJiri Olsa }
406945aea22SJiri Olsa 
40763503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
408945aea22SJiri Olsa {
409515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
410945aea22SJiri Olsa 
4111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
415945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4168ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:w:up"));
417945aea22SJiri Olsa 
418945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
419945aea22SJiri Olsa }
420945aea22SJiri Olsa 
42163503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
422945aea22SJiri Olsa {
423515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
424945aea22SJiri Olsa 
4251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
429945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4308ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:rw:kp"));
431945aea22SJiri Olsa 
432945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
433945aea22SJiri Olsa }
434945aea22SJiri Olsa 
43563503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
436945aea22SJiri Olsa {
437945aea22SJiri Olsa 
438515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
439945aea22SJiri Olsa 
4406484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
4411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",    10 == evsel->core.attr.config);
4431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
4441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
445ee4c7588SJiri Olsa 	/*
446ee4c7588SJiri Olsa 	 * The period value gets configured within perf_evlist__config,
447ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
448ee4c7588SJiri Olsa 	 */
4491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
450945aea22SJiri Olsa 
451945aea22SJiri Olsa 	return 0;
452945aea22SJiri Olsa }
453945aea22SJiri Olsa 
45463503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
455945aea22SJiri Olsa {
456515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
457945aea22SJiri Olsa 
4586484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
459945aea22SJiri Olsa 
460945aea22SJiri Olsa 	/* r1 */
4611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
4641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
4651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
469945aea22SJiri Olsa 
47043f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
471e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
473945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
4741fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
4751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
4761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
480945aea22SJiri Olsa 
481945aea22SJiri Olsa 	/* 1:1:hp */
482e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
4841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
489945aea22SJiri Olsa 
490945aea22SJiri Olsa 	return 0;
491945aea22SJiri Olsa }
492945aea22SJiri Olsa 
49363503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
494945aea22SJiri Olsa {
495515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
496945aea22SJiri Olsa 
497945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
4986484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
4991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
5018ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
502945aea22SJiri Olsa 
503945aea22SJiri Olsa 	/* cpu/config=2/u" */
504e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5056484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
508945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
5098ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
510945aea22SJiri Olsa 
511945aea22SJiri Olsa 	return 0;
512945aea22SJiri Olsa }
513945aea22SJiri Olsa 
51463503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
51571ef150eSKan Liang {
516515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
51771ef150eSKan Liang 
51871ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
5196484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
52271ef150eSKan Liang 	/*
52371ef150eSKan Liang 	 * The period, time and callgraph value gets configured
52471ef150eSKan Liang 	 * within perf_evlist__config,
52571ef150eSKan Liang 	 * while this test executes only parse events method.
52671ef150eSKan Liang 	 */
5271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
52827de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
53071ef150eSKan Liang 
53171ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
532e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
53571ef150eSKan Liang 	/*
53671ef150eSKan Liang 	 * The period, time and callgraph value gets configured
53771ef150eSKan Liang 	 * within perf_evlist__config,
53871ef150eSKan Liang 	 * while this test executes only parse events method.
53971ef150eSKan Liang 	 */
5401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
54127de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
54371ef150eSKan Liang 
54471ef150eSKan Liang 	return 0;
54571ef150eSKan Liang }
54671ef150eSKan Liang 
54763503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
548945aea22SJiri Olsa {
549515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
550945aea22SJiri Olsa 
5516484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
5521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
553945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
5541fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
555945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
5561fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
560945aea22SJiri Olsa 
561945aea22SJiri Olsa 	return 0;
562945aea22SJiri Olsa }
563945aea22SJiri Olsa 
564ffe59788SKan Liang 
56563503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
566ffe59788SKan Liang {
567515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
568ffe59788SKan Liang 
569ffe59788SKan Liang 	/* pmu-event:u */
5706484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
571ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5721fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
573ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5741fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
578ffe59788SKan Liang 
579ffe59788SKan Liang 	/* cpu/pmu-event/u*/
580e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5816484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
583ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5841fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
585ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5861fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
590ffe59788SKan Liang 
591ffe59788SKan Liang 	return 0;
592ffe59788SKan Liang }
593ffe59788SKan Liang 
594945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
595945aea22SJiri Olsa {
5966cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
597945aea22SJiri Olsa 
598945aea22SJiri Olsa 	/* config=10 */
5996cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
600945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
601945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
602945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
603945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
604945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
605945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
606945aea22SJiri Olsa 
607945aea22SJiri Olsa 	/* config1 */
6086cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
609945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
610945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
611945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
612945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
613945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
614945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
615945aea22SJiri Olsa 
616945aea22SJiri Olsa 	/* config2=3 */
6176cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
618945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
619945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
620945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
621945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
622945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
623945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
624945aea22SJiri Olsa 
625945aea22SJiri Olsa 	/* umask=1*/
6266cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
627945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
628945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
629945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
630945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
631945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
632945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
633945aea22SJiri Olsa 
6344929e95aSJiri Olsa 	/*
6354929e95aSJiri Olsa 	 * read
6364929e95aSJiri Olsa 	 *
6374929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
6384929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
6394929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
6404929e95aSJiri Olsa 	 */
6414929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6424929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6434929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
6444929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6454929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6464929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6474929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read"));
6484929e95aSJiri Olsa 
6494929e95aSJiri Olsa 	/*
6504929e95aSJiri Olsa 	 * r0xead
6514929e95aSJiri Olsa 	 *
6524929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
6534929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
6544929e95aSJiri Olsa 	 */
6554929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6564929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6574929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
6584929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6594929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6604929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 0xead);
6614929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
662945aea22SJiri Olsa 	return 0;
663945aea22SJiri Olsa }
664945aea22SJiri Olsa 
66563503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
666945aea22SJiri Olsa {
66732dcd021SJiri Olsa 	struct evsel *evsel, *leader;
668945aea22SJiri Olsa 
6696484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6708d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
671945aea22SJiri Olsa 
672945aea22SJiri Olsa 	/* instructions:k */
673515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
6741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
675945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6761fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
6771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
6781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
6791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
6811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
6821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
683c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
6845643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
6852bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
686a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
687945aea22SJiri Olsa 
688945aea22SJiri Olsa 	/* cycles:upp */
689e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
691945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6921fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
6931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
6941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
6951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
696945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
6971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
6981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
6991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
700945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
7012bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
702a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
703945aea22SJiri Olsa 
704945aea22SJiri Olsa 	return 0;
705945aea22SJiri Olsa }
706945aea22SJiri Olsa 
70763503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
708945aea22SJiri Olsa {
70932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
710945aea22SJiri Olsa 
7116484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
7128d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
713945aea22SJiri Olsa 
714945aea22SJiri Olsa 	/* faults + :ku modifier */
715515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
717945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7181fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
7191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
722*943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
725c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7265643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7272bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
728a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
729945aea22SJiri Olsa 
730945aea22SJiri Olsa 	/* cache-references + :u modifier */
731e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
733945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7341fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config);
7351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
741945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
7422bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
743a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
744945aea22SJiri Olsa 
745945aea22SJiri Olsa 	/* cycles:k */
746e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
748945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7491fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
756c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
757a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
758945aea22SJiri Olsa 
759945aea22SJiri Olsa 	return 0;
760945aea22SJiri Olsa }
761945aea22SJiri Olsa 
76263503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
763945aea22SJiri Olsa {
76432dcd021SJiri Olsa 	struct evsel *evsel, *leader;
765945aea22SJiri Olsa 
7666484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
7678d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups);
768945aea22SJiri Olsa 
76943f322b4SRiku Voipio 	/* group1 syscalls:sys_enter_openat:H */
770515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
772945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
7731fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
7741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
7751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
7781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
781c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
782945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
783945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
7845643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7852bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
786a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
787945aea22SJiri Olsa 
788945aea22SJiri Olsa 	/* group1 cycles:kppp */
789e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
791945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7921fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
796945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
7971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3);
800945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
801945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
8022bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
803a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
804945aea22SJiri Olsa 
805945aea22SJiri Olsa 	/* group2 cycles + G modifier */
806e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
8071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
808945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8091fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
816c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
817945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
818945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
8195643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8202bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
821a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
822945aea22SJiri Olsa 
823945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
824e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
8261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config);
8271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
833945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
8342bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
835a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
836945aea22SJiri Olsa 
837945aea22SJiri Olsa 	/* instructions:u */
838e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
840945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8411fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
845*943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
848c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
849a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
850945aea22SJiri Olsa 
851945aea22SJiri Olsa 	return 0;
852945aea22SJiri Olsa }
853945aea22SJiri Olsa 
85463503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
855945aea22SJiri Olsa {
85632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
857945aea22SJiri Olsa 
8586484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
8598d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
860945aea22SJiri Olsa 
861945aea22SJiri Olsa 	/* cycles:u + p */
862515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
8631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
864945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8651fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
869945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
873945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
874c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
8755643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8762bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
877a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
878945aea22SJiri Olsa 
879945aea22SJiri Olsa 	/* instructions:kp + p */
880e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
882945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8831fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
887945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
891945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
8922bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
893a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
894945aea22SJiri Olsa 
895945aea22SJiri Olsa 	return 0;
896945aea22SJiri Olsa }
897945aea22SJiri Olsa 
89863503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
899945aea22SJiri Olsa {
90032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
901945aea22SJiri Olsa 
9026484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
9038d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups);
904945aea22SJiri Olsa 
905945aea22SJiri Olsa 	/* cycles + G */
906515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
908945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9091fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
916945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
917c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9185643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9192bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
920a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
921945aea22SJiri Olsa 
922945aea22SJiri Olsa 	/* instructions + G */
923e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
925945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9261fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
933945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
9342bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
935a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
936945aea22SJiri Olsa 
937945aea22SJiri Olsa 	/* cycles:G */
938e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
9391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
940945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9411fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
948945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
949c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9505643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9512bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
952a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
953945aea22SJiri Olsa 
954945aea22SJiri Olsa 	/* instructions:G */
955e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
957945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9581fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
965945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
9662bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
967945aea22SJiri Olsa 
968945aea22SJiri Olsa 	/* cycles */
969e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
971945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9721fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
979c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
980945aea22SJiri Olsa 
981945aea22SJiri Olsa 	return 0;
982945aea22SJiri Olsa }
983945aea22SJiri Olsa 
98463503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
9855a30a99fSJiri Olsa {
98632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
9875a30a99fSJiri Olsa 
9886484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
9895a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
9905a30a99fSJiri Olsa 
9915a30a99fSJiri Olsa 	/* cycles + :H group modifier */
992515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9945a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9951fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10025a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1003c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10045643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10052bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10065a30a99fSJiri Olsa 
10075a30a99fSJiri Olsa 	/* cache-misses:G + :H group modifier */
1008e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10105a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10111fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10185a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
10192bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10205a30a99fSJiri Olsa 
10215a30a99fSJiri Olsa 	return 0;
10225a30a99fSJiri Olsa }
10235a30a99fSJiri Olsa 
102463503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
10255a30a99fSJiri Olsa {
102632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10275a30a99fSJiri Olsa 
10286484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10295a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
10305a30a99fSJiri Olsa 
10315a30a99fSJiri Olsa 	/* cycles + :G group modifier */
1032515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10345a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10351fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10425a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1043c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10445643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10452bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10465a30a99fSJiri Olsa 
10475a30a99fSJiri Olsa 	/* cache-misses:H + :G group modifier */
1048e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10505a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10511fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10585a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
10592bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10605a30a99fSJiri Olsa 
10615a30a99fSJiri Olsa 	return 0;
10625a30a99fSJiri Olsa }
10635a30a99fSJiri Olsa 
106463503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
10655a30a99fSJiri Olsa {
106632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10675a30a99fSJiri Olsa 
10686484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10695a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
10705a30a99fSJiri Olsa 
10715a30a99fSJiri Olsa 	/* cycles:G + :u group modifier */
1072515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10745a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10751fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10825a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1083c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10845643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10852bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10865a30a99fSJiri Olsa 
10875a30a99fSJiri Olsa 	/* cache-misses:H + :u group modifier */
1088e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10905a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10911fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10985a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
10992bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11005a30a99fSJiri Olsa 
11015a30a99fSJiri Olsa 	return 0;
11025a30a99fSJiri Olsa }
11035a30a99fSJiri Olsa 
110463503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
11055a30a99fSJiri Olsa {
110632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
11075a30a99fSJiri Olsa 
11086484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
11095a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
11105a30a99fSJiri Olsa 
11115a30a99fSJiri Olsa 	/* cycles:G + :uG group modifier */
1112515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11145a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11151fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11225a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1123c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11245643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11252bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11265a30a99fSJiri Olsa 
11275a30a99fSJiri Olsa 	/* cache-misses:H + :uG group modifier */
1128e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11305a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11311fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11385a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
11392bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11405a30a99fSJiri Olsa 
11415a30a99fSJiri Olsa 	return 0;
11425a30a99fSJiri Olsa }
11435a30a99fSJiri Olsa 
114463503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1145a9f93f97SJiri Olsa {
114632dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1147a9f93f97SJiri Olsa 
11486484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1149a9f93f97SJiri Olsa 
1150a9f93f97SJiri Olsa 	/* cycles - sampling group leader */
1151515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1153a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11541fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1161a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1162a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1163a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1164a9f93f97SJiri Olsa 
1165a9f93f97SJiri Olsa 	/* cache-misses - not sampling */
1166e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1168a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11691fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1176a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1177a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1178a9f93f97SJiri Olsa 
1179a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1180e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1182a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11831fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
11841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1190a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1191a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1192a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1193a9f93f97SJiri Olsa 
1194a9f93f97SJiri Olsa 	return 0;
1195a9f93f97SJiri Olsa }
1196a9f93f97SJiri Olsa 
119763503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1198a9f93f97SJiri Olsa {
119932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1200a9f93f97SJiri Olsa 
12016484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
1202a9f93f97SJiri Olsa 
1203a9f93f97SJiri Olsa 	/* instructions - sampling group leader */
1204515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1206a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12071fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
12081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1214a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1215a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1216a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1217a9f93f97SJiri Olsa 
1218a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1219e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1221a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12221fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1229a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1230a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1231a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1232a9f93f97SJiri Olsa 
1233a9f93f97SJiri Olsa 	return 0;
1234a9f93f97SJiri Olsa }
1235a9f93f97SJiri Olsa 
123663503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1237c9ee780fSMichael Ellerman {
1238515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1239c9ee780fSMichael Ellerman 
12401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1245c9ee780fSMichael Ellerman 
1246c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1247c9ee780fSMichael Ellerman }
1248c9ee780fSMichael Ellerman 
124963503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1250c9ee780fSMichael Ellerman {
125132dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1252c9ee780fSMichael Ellerman 
12536484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1254c9ee780fSMichael Ellerman 
1255c9ee780fSMichael Ellerman 	/* cycles - group leader */
1256515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1258c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12591fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
1260c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1261c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
12621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1263c9ee780fSMichael Ellerman 
1264c9ee780fSMichael Ellerman 	/* cache-misses - can not be pinned, but will go on with the leader */
1265e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1267c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12681fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
12691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1270c9ee780fSMichael Ellerman 
1271c9ee780fSMichael Ellerman 	/* branch-misses - ditto */
1272e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
1273c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12741fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1276c9ee780fSMichael Ellerman 
1277c9ee780fSMichael Ellerman 	return 0;
1278c9ee780fSMichael Ellerman }
1279c9ee780fSMichael Ellerman 
128063503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1281ec32398cSJacob Shin {
1282515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1283ec32398cSJacob Shin 
12846484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
12851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
12861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1287ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
12881fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1289ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
12901fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1291ec32398cSJacob Shin 
1292ec32398cSJacob Shin 	return 0;
1293ec32398cSJacob Shin }
1294ec32398cSJacob Shin 
129563503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1296ec32398cSJacob Shin {
1297515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1298ec32398cSJacob Shin 
12996484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1302ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
13031fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1304ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
13051fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1306ec32398cSJacob Shin 
1307ec32398cSJacob Shin 	return 0;
1308ec32398cSJacob Shin }
1309ec32398cSJacob Shin 
1310ec32398cSJacob Shin static int
131163503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1312ec32398cSJacob Shin {
1313515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1314ec32398cSJacob Shin 
13151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1319ec32398cSJacob Shin 
1320ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1321ec32398cSJacob Shin }
1322ec32398cSJacob Shin 
132363503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1324ddd83c97SJiri Olsa {
1325515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1326ddd83c97SJiri Olsa 
13276484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
13281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1329ddd83c97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
13301fc632ceSJiri Olsa 			PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config);
1331ddd83c97SJiri Olsa 	return 0;
1332ddd83c97SJiri Olsa }
1333ddd83c97SJiri Olsa 
133463503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
133510bf358aSWang Nan {
1336515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
133710bf358aSWang Nan 
133810bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0);
133910bf358aSWang Nan 	return 0;
134010bf358aSWang Nan }
134110bf358aSWang Nan 
134263503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
134310bf358aSWang Nan {
1344515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
134510bf358aSWang Nan 
134610bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0);
134710bf358aSWang Nan 	return 0;
134810bf358aSWang Nan }
134910bf358aSWang Nan 
135063503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
135110bf358aSWang Nan {
1352515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
135310bf358aSWang Nan 
135410bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0);
135510bf358aSWang Nan 	return 0;
135610bf358aSWang Nan }
135710bf358aSWang Nan 
135863503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
135943d0b978SWang Nan {
1360515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
136143d0b978SWang Nan 
136243d0b978SWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0);
136343d0b978SWang Nan 	return 0;
136443d0b978SWang Nan }
136510bf358aSWang Nan 
136616ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
136716ddcfbfSJiri Olsa {
136816ddcfbfSJiri Olsa 	return !!perf_pmu__find("intel_pt");
136916ddcfbfSJiri Olsa }
137016ddcfbfSJiri Olsa 
137163503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1372b3f58c8dSArnaldo Carvalho de Melo {
1373515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1374b3f58c8dSArnaldo Carvalho de Melo 
1375b3f58c8dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0);
1376b3f58c8dSArnaldo Carvalho de Melo 	return 0;
1377b3f58c8dSArnaldo Carvalho de Melo }
1378b3f58c8dSArnaldo Carvalho de Melo 
137963503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
138006dc5bf2SAlexey Budankov {
1381515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
138206dc5bf2SAlexey Budankov 
138306dc5bf2SAlexey Budankov 	TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0);
138406dc5bf2SAlexey Budankov 	return 0;
138506dc5bf2SAlexey Budankov }
138606dc5bf2SAlexey Budankov 
13873a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
13883a6c51e4SJiri Olsa {
13893a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
13903a6c51e4SJiri Olsa 
13913a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13923a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
13933a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
13943a6c51e4SJiri Olsa 	return 0;
13953a6c51e4SJiri Olsa }
13963a6c51e4SJiri Olsa 
139763503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1398714a92d8SJiri Olsa {
1399515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1400714a92d8SJiri Olsa 
14011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
1404714a92d8SJiri Olsa 	return 0;
1405714a92d8SJiri Olsa }
1406714a92d8SJiri Olsa 
140763503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1408714a92d8SJiri Olsa {
1409515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1410714a92d8SJiri Olsa 
14111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
1414714a92d8SJiri Olsa 	return 0;
1415714a92d8SJiri Olsa }
1416714a92d8SJiri Olsa 
141782ce75d9SJiri Olsa static int count_tracepoints(void)
141882ce75d9SJiri Olsa {
141982ce75d9SJiri Olsa 	struct dirent *events_ent;
142082ce75d9SJiri Olsa 	DIR *events_dir;
142182ce75d9SJiri Olsa 	int cnt = 0;
142282ce75d9SJiri Olsa 
14237014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
142482ce75d9SJiri Olsa 
142582ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
142682ce75d9SJiri Olsa 
142782ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
142825a7d914SArnaldo Carvalho de Melo 		char *sys_path;
142982ce75d9SJiri Olsa 		struct dirent *sys_ent;
143082ce75d9SJiri Olsa 		DIR *sys_dir;
143182ce75d9SJiri Olsa 
143282ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
143382ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
143482ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
143582ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
143682ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
143782ce75d9SJiri Olsa 			continue;
143882ce75d9SJiri Olsa 
143925a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
144025a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
144182ce75d9SJiri Olsa 
144282ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
144382ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
144482ce75d9SJiri Olsa 
144582ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
144682ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
144782ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
144882ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
144982ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
145082ce75d9SJiri Olsa 				continue;
145182ce75d9SJiri Olsa 
145282ce75d9SJiri Olsa 			cnt++;
145382ce75d9SJiri Olsa 		}
145482ce75d9SJiri Olsa 
145582ce75d9SJiri Olsa 		closedir(sys_dir);
145625a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
145782ce75d9SJiri Olsa 	}
145882ce75d9SJiri Olsa 
145982ce75d9SJiri Olsa 	closedir(events_dir);
146082ce75d9SJiri Olsa 	return cnt;
146182ce75d9SJiri Olsa }
146282ce75d9SJiri Olsa 
146363503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
146482ce75d9SJiri Olsa {
146582ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
14666484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
146782ce75d9SJiri Olsa 
146882ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
146982ce75d9SJiri Olsa }
147082ce75d9SJiri Olsa 
147123b6339bSArnaldo Carvalho de Melo struct evlist_test {
1472945aea22SJiri Olsa 	const char *name;
1473945aea22SJiri Olsa 	__u32 type;
1474615b8f99SAlexander Yarygin 	const int id;
147516ddcfbfSJiri Olsa 	bool (*valid)(void);
147663503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1477945aea22SJiri Olsa };
1478945aea22SJiri Olsa 
147923b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = {
1480615b8f99SAlexander Yarygin 	{
148143f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1482945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
1483615b8f99SAlexander Yarygin 		.id    = 0,
1484945aea22SJiri Olsa 	},
1485615b8f99SAlexander Yarygin 	{
1486945aea22SJiri Olsa 		.name  = "syscalls:*",
1487945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
1488615b8f99SAlexander Yarygin 		.id    = 1,
1489945aea22SJiri Olsa 	},
1490615b8f99SAlexander Yarygin 	{
1491945aea22SJiri Olsa 		.name  = "r1a",
1492945aea22SJiri Olsa 		.check = test__checkevent_raw,
1493615b8f99SAlexander Yarygin 		.id    = 2,
1494945aea22SJiri Olsa 	},
1495615b8f99SAlexander Yarygin 	{
1496945aea22SJiri Olsa 		.name  = "1:1",
1497945aea22SJiri Olsa 		.check = test__checkevent_numeric,
1498615b8f99SAlexander Yarygin 		.id    = 3,
1499945aea22SJiri Olsa 	},
1500615b8f99SAlexander Yarygin 	{
1501945aea22SJiri Olsa 		.name  = "instructions",
1502945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
1503615b8f99SAlexander Yarygin 		.id    = 4,
1504945aea22SJiri Olsa 	},
1505615b8f99SAlexander Yarygin 	{
1506945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1507945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
1508615b8f99SAlexander Yarygin 		.id    = 5,
1509945aea22SJiri Olsa 	},
1510615b8f99SAlexander Yarygin 	{
1511945aea22SJiri Olsa 		.name  = "faults",
1512945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
1513615b8f99SAlexander Yarygin 		.id    = 6,
1514945aea22SJiri Olsa 	},
1515615b8f99SAlexander Yarygin 	{
1516945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1517945aea22SJiri Olsa 		.check = test__checkevent_genhw,
1518615b8f99SAlexander Yarygin 		.id    = 7,
1519945aea22SJiri Olsa 	},
1520615b8f99SAlexander Yarygin 	{
1521945aea22SJiri Olsa 		.name  = "mem:0",
1522945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
1523615b8f99SAlexander Yarygin 		.id    = 8,
1524945aea22SJiri Olsa 	},
1525615b8f99SAlexander Yarygin 	{
1526945aea22SJiri Olsa 		.name  = "mem:0:x",
1527945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
1528615b8f99SAlexander Yarygin 		.id    = 9,
1529945aea22SJiri Olsa 	},
1530615b8f99SAlexander Yarygin 	{
1531945aea22SJiri Olsa 		.name  = "mem:0:r",
1532945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
1533615b8f99SAlexander Yarygin 		.id    = 10,
1534945aea22SJiri Olsa 	},
1535615b8f99SAlexander Yarygin 	{
1536945aea22SJiri Olsa 		.name  = "mem:0:w",
1537945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
1538615b8f99SAlexander Yarygin 		.id    = 11,
1539945aea22SJiri Olsa 	},
1540615b8f99SAlexander Yarygin 	{
154143f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1542945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
1543615b8f99SAlexander Yarygin 		.id    = 12,
1544945aea22SJiri Olsa 	},
1545615b8f99SAlexander Yarygin 	{
1546945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1547945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
1548615b8f99SAlexander Yarygin 		.id    = 13,
1549945aea22SJiri Olsa 	},
1550615b8f99SAlexander Yarygin 	{
1551945aea22SJiri Olsa 		.name  = "r1a:kp",
1552945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
1553615b8f99SAlexander Yarygin 		.id    = 14,
1554945aea22SJiri Olsa 	},
1555615b8f99SAlexander Yarygin 	{
1556945aea22SJiri Olsa 		.name  = "1:1:hp",
1557945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
1558615b8f99SAlexander Yarygin 		.id    = 15,
1559945aea22SJiri Olsa 	},
1560615b8f99SAlexander Yarygin 	{
1561945aea22SJiri Olsa 		.name  = "instructions:h",
1562945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
1563615b8f99SAlexander Yarygin 		.id    = 16,
1564945aea22SJiri Olsa 	},
1565615b8f99SAlexander Yarygin 	{
1566945aea22SJiri Olsa 		.name  = "faults:u",
1567945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
1568615b8f99SAlexander Yarygin 		.id    = 17,
1569945aea22SJiri Olsa 	},
1570615b8f99SAlexander Yarygin 	{
1571945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1572945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
1573615b8f99SAlexander Yarygin 		.id    = 18,
1574945aea22SJiri Olsa 	},
1575615b8f99SAlexander Yarygin 	{
1576945aea22SJiri Olsa 		.name  = "mem:0:u",
1577945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
1578615b8f99SAlexander Yarygin 		.id    = 19,
1579945aea22SJiri Olsa 	},
1580615b8f99SAlexander Yarygin 	{
1581945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1582945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
1583615b8f99SAlexander Yarygin 		.id    = 20,
1584945aea22SJiri Olsa 	},
1585615b8f99SAlexander Yarygin 	{
1586945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1587945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
1588615b8f99SAlexander Yarygin 		.id    = 21,
1589945aea22SJiri Olsa 	},
1590615b8f99SAlexander Yarygin 	{
1591945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1592945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
1593615b8f99SAlexander Yarygin 		.id    = 22,
1594945aea22SJiri Olsa 	},
1595615b8f99SAlexander Yarygin 	{
159643f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1597945aea22SJiri Olsa 		.check = test__checkevent_list,
1598615b8f99SAlexander Yarygin 		.id    = 23,
1599945aea22SJiri Olsa 	},
1600615b8f99SAlexander Yarygin 	{
1601945aea22SJiri Olsa 		.name  = "instructions:G",
1602945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
1603615b8f99SAlexander Yarygin 		.id    = 24,
1604945aea22SJiri Olsa 	},
1605615b8f99SAlexander Yarygin 	{
1606945aea22SJiri Olsa 		.name  = "instructions:H",
1607945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
1608615b8f99SAlexander Yarygin 		.id    = 25,
1609945aea22SJiri Olsa 	},
1610615b8f99SAlexander Yarygin 	{
1611945aea22SJiri Olsa 		.name  = "mem:0:rw",
1612945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
1613615b8f99SAlexander Yarygin 		.id    = 26,
1614945aea22SJiri Olsa 	},
1615615b8f99SAlexander Yarygin 	{
1616945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1617945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
1618615b8f99SAlexander Yarygin 		.id    = 27,
1619945aea22SJiri Olsa 	},
1620615b8f99SAlexander Yarygin 	{
1621945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1622945aea22SJiri Olsa 		.check = test__group1,
1623615b8f99SAlexander Yarygin 		.id    = 28,
1624945aea22SJiri Olsa 	},
1625615b8f99SAlexander Yarygin 	{
1626945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1627945aea22SJiri Olsa 		.check = test__group2,
1628615b8f99SAlexander Yarygin 		.id    = 29,
1629945aea22SJiri Olsa 	},
1630615b8f99SAlexander Yarygin 	{
163143f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1632945aea22SJiri Olsa 		.check = test__group3,
1633615b8f99SAlexander Yarygin 		.id    = 30,
1634945aea22SJiri Olsa 	},
1635615b8f99SAlexander Yarygin 	{
1636945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1637945aea22SJiri Olsa 		.check = test__group4,
1638615b8f99SAlexander Yarygin 		.id    = 31,
1639945aea22SJiri Olsa 	},
1640615b8f99SAlexander Yarygin 	{
1641945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1642945aea22SJiri Olsa 		.check = test__group5,
1643615b8f99SAlexander Yarygin 		.id    = 32,
1644945aea22SJiri Olsa 	},
1645615b8f99SAlexander Yarygin 	{
164682ce75d9SJiri Olsa 		.name  = "*:*",
164782ce75d9SJiri Olsa 		.check = test__all_tracepoints,
1648615b8f99SAlexander Yarygin 		.id    = 33,
164982ce75d9SJiri Olsa 	},
1650615b8f99SAlexander Yarygin 	{
16515a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
16525a30a99fSJiri Olsa 		.check = test__group_gh1,
1653615b8f99SAlexander Yarygin 		.id    = 34,
16545a30a99fSJiri Olsa 	},
1655615b8f99SAlexander Yarygin 	{
16565a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
16575a30a99fSJiri Olsa 		.check = test__group_gh2,
1658615b8f99SAlexander Yarygin 		.id    = 35,
16595a30a99fSJiri Olsa 	},
1660615b8f99SAlexander Yarygin 	{
16615a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
16625a30a99fSJiri Olsa 		.check = test__group_gh3,
1663615b8f99SAlexander Yarygin 		.id    = 36,
16645a30a99fSJiri Olsa 	},
1665615b8f99SAlexander Yarygin 	{
16665a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
16675a30a99fSJiri Olsa 		.check = test__group_gh4,
1668615b8f99SAlexander Yarygin 		.id    = 37,
16695a30a99fSJiri Olsa 	},
1670615b8f99SAlexander Yarygin 	{
1671a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1672a9f93f97SJiri Olsa 		.check = test__leader_sample1,
1673615b8f99SAlexander Yarygin 		.id    = 38,
1674a9f93f97SJiri Olsa 	},
1675615b8f99SAlexander Yarygin 	{
1676a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1677a9f93f97SJiri Olsa 		.check = test__leader_sample2,
1678615b8f99SAlexander Yarygin 		.id    = 39,
1679a9f93f97SJiri Olsa 	},
1680615b8f99SAlexander Yarygin 	{
1681c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1682c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
1683615b8f99SAlexander Yarygin 		.id    = 40,
1684c9ee780fSMichael Ellerman 	},
1685615b8f99SAlexander Yarygin 	{
1686c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1687c9ee780fSMichael Ellerman 		.check = test__pinned_group,
1688615b8f99SAlexander Yarygin 		.id    = 41,
1689c9ee780fSMichael Ellerman 	},
1690ec32398cSJacob Shin 	{
1691ec32398cSJacob Shin 		.name  = "mem:0/1",
1692ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
1693ec32398cSJacob Shin 		.id    = 42,
1694ec32398cSJacob Shin 	},
1695ec32398cSJacob Shin 	{
1696ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1697ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
1698ec32398cSJacob Shin 		.id    = 43,
1699ec32398cSJacob Shin 	},
1700ec32398cSJacob Shin 	{
1701ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1702ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
1703ec32398cSJacob Shin 		.id    = 44
1704ec32398cSJacob Shin 	},
1705c0bc8c6dSAlexander Yarygin #if defined(__s390x__)
1706c0bc8c6dSAlexander Yarygin 	{
1707c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1708c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
170953fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
1710c0bc8c6dSAlexander Yarygin 		.id    = 100,
1711c0bc8c6dSAlexander Yarygin 	},
1712c0bc8c6dSAlexander Yarygin #endif
1713a1e12da4SJiri Olsa 	{
1714a1e12da4SJiri Olsa 		.name  = "instructions:I",
1715a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
1716a1e12da4SJiri Olsa 		.id    = 45,
1717a1e12da4SJiri Olsa 	},
1718a1e12da4SJiri Olsa 	{
1719a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1720a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
1721a1e12da4SJiri Olsa 		.id    = 46,
1722a1e12da4SJiri Olsa 	},
1723ddd83c97SJiri Olsa 	{
1724ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1725ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
1726ddd83c97SJiri Olsa 		.id    = 47,
1727ddd83c97SJiri Olsa 	},
172810bf358aSWang Nan 	{
172910bf358aSWang Nan 		.name  = "instructions/name=insn/",
173010bf358aSWang Nan 		.check = test__checkevent_config_symbol,
173110bf358aSWang Nan 		.id    = 48,
173210bf358aSWang Nan 	},
173310bf358aSWang Nan 	{
173410bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
173510bf358aSWang Nan 		.check = test__checkevent_config_raw,
173610bf358aSWang Nan 		.id    = 49,
173710bf358aSWang Nan 	},
173810bf358aSWang Nan 	{
173910bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
174010bf358aSWang Nan 		.check = test__checkevent_config_num,
174110bf358aSWang Nan 		.id    = 50,
174210bf358aSWang Nan 	},
174343d0b978SWang Nan 	{
174443d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
174543d0b978SWang Nan 		.check = test__checkevent_config_cache,
174643d0b978SWang Nan 		.id    = 51,
174743d0b978SWang Nan 	},
1748b3f58c8dSArnaldo Carvalho de Melo 	{
1749b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
175016ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1751b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
1752b3f58c8dSArnaldo Carvalho de Melo 		.id    = 52,
1753b3f58c8dSArnaldo Carvalho de Melo 	},
175406dc5bf2SAlexey Budankov 	{
175506dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
175606dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
175706dc5bf2SAlexey Budankov 		.id    = 53
1758714a92d8SJiri Olsa 	},
1759714a92d8SJiri Olsa 	{
1760714a92d8SJiri Olsa 		.name  = "cycles//u",
1761714a92d8SJiri Olsa 		.check = test__sym_event_slash,
1762714a92d8SJiri Olsa 		.id    = 54,
1763714a92d8SJiri Olsa 	},
1764714a92d8SJiri Olsa 	{
1765714a92d8SJiri Olsa 		.name  = "cycles:k",
1766714a92d8SJiri Olsa 		.check = test__sym_event_dc,
1767714a92d8SJiri Olsa 		.id    = 55,
176806dc5bf2SAlexey Budankov 	}
1769945aea22SJiri Olsa };
1770945aea22SJiri Olsa 
177123b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = {
1772615b8f99SAlexander Yarygin 	{
1773945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
1774945aea22SJiri Olsa 		.check = test__checkevent_pmu,
1775615b8f99SAlexander Yarygin 		.id    = 0,
1776945aea22SJiri Olsa 	},
1777615b8f99SAlexander Yarygin 	{
1778945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
1779945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
1780615b8f99SAlexander Yarygin 		.id    = 1,
1781945aea22SJiri Olsa 	},
178271ef150eSKan Liang 	{
178371ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
178471ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
178571ef150eSKan Liang 		.id    = 2,
178671ef150eSKan Liang 	},
178706dc5bf2SAlexey Budankov 	{
1788a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
178906dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
179006dc5bf2SAlexey Budankov 		.id    = 3,
17913a6c51e4SJiri Olsa 	},
17923a6c51e4SJiri Olsa 	{
17933a6c51e4SJiri Olsa 		.name  = "software/r1a/",
17943a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
17953a6c51e4SJiri Olsa 		.id    = 4,
17963a6c51e4SJiri Olsa 	},
1797c33cdf54SJiri Olsa 	{
1798c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
1799c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
1800c33cdf54SJiri Olsa 		.id    = 4,
1801c33cdf54SJiri Olsa 	},
1802945aea22SJiri Olsa };
1803945aea22SJiri Olsa 
180423b6339bSArnaldo Carvalho de Melo struct terms_test {
1805945aea22SJiri Olsa 	const char *str;
1806945aea22SJiri Olsa 	__u32 type;
1807945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
1808945aea22SJiri Olsa };
1809945aea22SJiri Olsa 
181023b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = {
1811945aea22SJiri Olsa 	[0] = {
18124929e95aSJiri Olsa 		.str   = "config=10,config1,config2=3,umask=1,read,r0xead",
1813945aea22SJiri Olsa 		.check = test__checkterms_simple,
1814945aea22SJiri Olsa 	},
1815945aea22SJiri Olsa };
1816945aea22SJiri Olsa 
181723b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e)
1818945aea22SJiri Olsa {
1819a910e466SIan Rogers 	struct parse_events_error err;
182063503dbaSJiri Olsa 	struct evlist *evlist;
1821945aea22SJiri Olsa 	int ret;
1822945aea22SJiri Olsa 
1823a910e466SIan Rogers 	bzero(&err, sizeof(err));
182416ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
182516ddcfbfSJiri Olsa 		pr_debug("... SKIP");
182616ddcfbfSJiri Olsa 		return 0;
182716ddcfbfSJiri Olsa 	}
182816ddcfbfSJiri Olsa 
18290f98b11cSJiri Olsa 	evlist = evlist__new();
1830945aea22SJiri Olsa 	if (evlist == NULL)
1831945aea22SJiri Olsa 		return -ENOMEM;
1832945aea22SJiri Olsa 
1833933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
1834945aea22SJiri Olsa 	if (ret) {
1835933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
1836933ccf20SJiri Olsa 			 e->name, ret, err.str);
1837933ccf20SJiri Olsa 		parse_events_print_error(&err, e->name);
18382d4352c0SArnaldo Carvalho de Melo 	} else {
18392d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
1840945aea22SJiri Olsa 	}
1841945aea22SJiri Olsa 
1842c12995a5SJiri Olsa 	evlist__delete(evlist);
1843945aea22SJiri Olsa 
1844945aea22SJiri Olsa 	return ret;
1845945aea22SJiri Olsa }
1846945aea22SJiri Olsa 
184723b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt)
1848945aea22SJiri Olsa {
1849945aea22SJiri Olsa 	int ret1, ret2 = 0;
1850945aea22SJiri Olsa 	unsigned i;
1851945aea22SJiri Olsa 
1852945aea22SJiri Olsa 	for (i = 0; i < cnt; i++) {
185323b6339bSArnaldo Carvalho de Melo 		struct evlist_test *e = &events[i];
1854945aea22SJiri Olsa 
185516ddcfbfSJiri Olsa 		pr_debug("running test %d '%s'", e->id, e->name);
1856945aea22SJiri Olsa 		ret1 = test_event(e);
1857945aea22SJiri Olsa 		if (ret1)
1858945aea22SJiri Olsa 			ret2 = ret1;
185916ddcfbfSJiri Olsa 		pr_debug("\n");
1860945aea22SJiri Olsa 	}
1861945aea22SJiri Olsa 
1862945aea22SJiri Olsa 	return ret2;
1863945aea22SJiri Olsa }
1864945aea22SJiri Olsa 
186523b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t)
1866945aea22SJiri Olsa {
1867c549aca5SDavid Ahern 	struct list_head terms;
1868945aea22SJiri Olsa 	int ret;
1869945aea22SJiri Olsa 
1870c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
1871945aea22SJiri Olsa 
18724929e95aSJiri Olsa 	/*
18734929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init prepares perf_pmu_events_list
18744929e95aSJiri Olsa 	 * which gets freed in parse_events_terms.
18754929e95aSJiri Olsa 	 */
18764929e95aSJiri Olsa 	if (perf_pmu__test_parse_init())
18774929e95aSJiri Olsa 		return -1;
18784929e95aSJiri Olsa 
1879c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
1880945aea22SJiri Olsa 	if (ret) {
1881945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
1882945aea22SJiri Olsa 			 t->str , ret);
1883945aea22SJiri Olsa 		return ret;
1884945aea22SJiri Olsa 	}
1885945aea22SJiri Olsa 
1886c549aca5SDavid Ahern 	ret = t->check(&terms);
1887682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
1888945aea22SJiri Olsa 
1889945aea22SJiri Olsa 	return ret;
1890945aea22SJiri Olsa }
1891945aea22SJiri Olsa 
189223b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt)
1893945aea22SJiri Olsa {
1894945aea22SJiri Olsa 	int ret = 0;
1895945aea22SJiri Olsa 	unsigned i;
1896945aea22SJiri Olsa 
1897945aea22SJiri Olsa 	for (i = 0; i < cnt; i++) {
189823b6339bSArnaldo Carvalho de Melo 		struct terms_test *t = &terms[i];
1899945aea22SJiri Olsa 
1900945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
1901945aea22SJiri Olsa 		ret = test_term(t);
1902945aea22SJiri Olsa 		if (ret)
1903945aea22SJiri Olsa 			break;
1904945aea22SJiri Olsa 	}
1905945aea22SJiri Olsa 
1906945aea22SJiri Olsa 	return ret;
1907945aea22SJiri Olsa }
1908945aea22SJiri Olsa 
1909945aea22SJiri Olsa static int test_pmu(void)
1910945aea22SJiri Olsa {
1911945aea22SJiri Olsa 	struct stat st;
1912945aea22SJiri Olsa 	char path[PATH_MAX];
1913945aea22SJiri Olsa 	int ret;
1914945aea22SJiri Olsa 
1915945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
1916cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
1917945aea22SJiri Olsa 
1918945aea22SJiri Olsa 	ret = stat(path, &st);
1919945aea22SJiri Olsa 	if (ret)
1920945aea22SJiri Olsa 		pr_debug("omitting PMU cpu tests\n");
1921945aea22SJiri Olsa 	return !ret;
1922945aea22SJiri Olsa }
1923945aea22SJiri Olsa 
1924945aea22SJiri Olsa static int test_pmu_events(void)
1925945aea22SJiri Olsa {
1926945aea22SJiri Olsa 	struct stat st;
1927945aea22SJiri Olsa 	char path[PATH_MAX];
1928945aea22SJiri Olsa 	struct dirent *ent;
1929945aea22SJiri Olsa 	DIR *dir;
1930945aea22SJiri Olsa 	int ret;
1931945aea22SJiri Olsa 
1932945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/",
1933cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
1934945aea22SJiri Olsa 
1935945aea22SJiri Olsa 	ret = stat(path, &st);
1936945aea22SJiri Olsa 	if (ret) {
1937a895d57dSMasanari Iida 		pr_debug("omitting PMU cpu events tests\n");
1938945aea22SJiri Olsa 		return 0;
1939945aea22SJiri Olsa 	}
1940945aea22SJiri Olsa 
1941945aea22SJiri Olsa 	dir = opendir(path);
1942945aea22SJiri Olsa 	if (!dir) {
1943945aea22SJiri Olsa 		pr_debug("can't open pmu event dir");
1944945aea22SJiri Olsa 		return -1;
1945945aea22SJiri Olsa 	}
1946945aea22SJiri Olsa 
1947945aea22SJiri Olsa 	while (!ret && (ent = readdir(dir))) {
194816ddcfbfSJiri Olsa 		struct evlist_test e = { .id = 0, };
19492e2bbc03SArnaldo Carvalho de Melo 		char name[2 * NAME_MAX + 1 + 12 + 3];
1950945aea22SJiri Olsa 
195117a2634bSAndi Kleen 		/* Names containing . are special and cannot be used directly */
195217a2634bSAndi Kleen 		if (strchr(ent->d_name, '.'))
1953945aea22SJiri Olsa 			continue;
1954945aea22SJiri Olsa 
19552e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name);
1956945aea22SJiri Olsa 
1957945aea22SJiri Olsa 		e.name  = name;
1958945aea22SJiri Olsa 		e.check = test__checkevent_pmu_events;
1959945aea22SJiri Olsa 
1960945aea22SJiri Olsa 		ret = test_event(&e);
1961ffe59788SKan Liang 		if (ret)
1962ffe59788SKan Liang 			break;
19632e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);
1964ffe59788SKan Liang 		e.name  = name;
1965ffe59788SKan Liang 		e.check = test__checkevent_pmu_events_mix;
1966ffe59788SKan Liang 		ret = test_event(&e);
1967945aea22SJiri Olsa 	}
1968945aea22SJiri Olsa 
1969945aea22SJiri Olsa 	closedir(dir);
1970945aea22SJiri Olsa 	return ret;
1971945aea22SJiri Olsa }
1972945aea22SJiri Olsa 
197381f17c90SArnaldo Carvalho de Melo int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused)
1974945aea22SJiri Olsa {
1975945aea22SJiri Olsa 	int ret1, ret2 = 0;
1976945aea22SJiri Olsa 
1977945aea22SJiri Olsa #define TEST_EVENTS(tests)				\
1978945aea22SJiri Olsa do {							\
1979945aea22SJiri Olsa 	ret1 = test_events(tests, ARRAY_SIZE(tests));	\
1980945aea22SJiri Olsa 	if (!ret2)					\
1981945aea22SJiri Olsa 		ret2 = ret1;				\
1982945aea22SJiri Olsa } while (0)
1983945aea22SJiri Olsa 
1984945aea22SJiri Olsa 	TEST_EVENTS(test__events);
1985945aea22SJiri Olsa 
1986945aea22SJiri Olsa 	if (test_pmu())
1987945aea22SJiri Olsa 		TEST_EVENTS(test__events_pmu);
1988945aea22SJiri Olsa 
1989945aea22SJiri Olsa 	if (test_pmu()) {
1990945aea22SJiri Olsa 		int ret = test_pmu_events();
1991945aea22SJiri Olsa 		if (ret)
1992945aea22SJiri Olsa 			return ret;
1993945aea22SJiri Olsa 	}
1994945aea22SJiri Olsa 
1995945aea22SJiri Olsa 	ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms));
1996945aea22SJiri Olsa 	if (!ret2)
1997945aea22SJiri Olsa 		ret2 = ret1;
1998945aea22SJiri Olsa 
1999945aea22SJiri Olsa 	return ret2;
2000945aea22SJiri Olsa }
2001