xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision f2a39fe84901df2b3d1bec3459b65cee3e8db57c)
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"
8*f2a39fe8SArnaldo Carvalho de Melo #include "pmu.h"
92690c730SNamhyung Kim #include "util.h"
1076b31a29SArnaldo Carvalho de Melo #include <dirent.h>
11a43783aeSArnaldo Carvalho de Melo #include <errno.h>
127a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h>
137a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h>
147a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h>
15877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h>
16f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h>
1720a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h>
18945aea22SJiri Olsa 
19945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
20945aea22SJiri Olsa 			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
21945aea22SJiri Olsa 
2253fe307dSThomas Richter #if defined(__s390x__)
2353fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this
2453fe307dSThomas Richter  * and retun success when trace point kvm_s390_create_vm
2553fe307dSThomas Richter  * exists. Otherwise this test always fails.
2653fe307dSThomas Richter  */
2753fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void)
2853fe307dSThomas Richter {
2953fe307dSThomas Richter 	char *eventfile;
3053fe307dSThomas Richter 	bool rc = false;
3153fe307dSThomas Richter 
3253fe307dSThomas Richter 	eventfile = get_events_file("kvm-s390");
3353fe307dSThomas Richter 
3453fe307dSThomas Richter 	if (eventfile) {
3553fe307dSThomas Richter 		DIR *mydir = opendir(eventfile);
3653fe307dSThomas Richter 
3753fe307dSThomas Richter 		if (mydir) {
3853fe307dSThomas Richter 			rc = true;
3953fe307dSThomas Richter 			closedir(mydir);
4053fe307dSThomas Richter 		}
4153fe307dSThomas Richter 		put_events_file(eventfile);
4253fe307dSThomas Richter 	}
4353fe307dSThomas Richter 
4453fe307dSThomas Richter 	return rc;
4553fe307dSThomas Richter }
4653fe307dSThomas Richter #endif
4753fe307dSThomas Richter 
4863503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist)
49945aea22SJiri Olsa {
5032dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
51945aea22SJiri Olsa 
526484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
538d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups);
541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
55945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
561fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
58945aea22SJiri Olsa 	return 0;
59945aea22SJiri Olsa }
60945aea22SJiri Olsa 
6163503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist)
62945aea22SJiri Olsa {
6332dcd021SJiri Olsa 	struct evsel *evsel;
64945aea22SJiri Olsa 
656484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
668d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups);
67945aea22SJiri Olsa 
68e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
69945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong type",
701fc632ceSJiri Olsa 			PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
71945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_type",
721fc632ceSJiri Olsa 			PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
73945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_period",
741fc632ceSJiri Olsa 			1 == evsel->core.attr.sample_period);
75945aea22SJiri Olsa 	}
76945aea22SJiri Olsa 	return 0;
77945aea22SJiri Olsa }
78945aea22SJiri Olsa 
7963503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist)
80945aea22SJiri Olsa {
8132dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
82945aea22SJiri Olsa 
836484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
86945aea22SJiri Olsa 	return 0;
87945aea22SJiri Olsa }
88945aea22SJiri Olsa 
8963503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
90945aea22SJiri Olsa {
9132dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
92945aea22SJiri Olsa 
936484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
96945aea22SJiri Olsa 	return 0;
97945aea22SJiri Olsa }
98945aea22SJiri Olsa 
9963503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist)
100945aea22SJiri Olsa {
10132dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
102945aea22SJiri Olsa 
1036484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
105945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1061fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
107945aea22SJiri Olsa 	return 0;
108945aea22SJiri Olsa }
109945aea22SJiri Olsa 
11063503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
111945aea22SJiri Olsa {
11232dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
113945aea22SJiri Olsa 
1146484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
116945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1171fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
118ee4c7588SJiri Olsa 	/*
119ee4c7588SJiri Olsa 	 * The period value gets configured within perf_evlist__config,
120ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
121ee4c7588SJiri Olsa 	 */
122945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong period",
1231fc632ceSJiri Olsa 			0 == evsel->core.attr.sample_period);
124945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1",
1251fc632ceSJiri Olsa 			0 == evsel->core.attr.config1);
126945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2",
1271fc632ceSJiri Olsa 			1 == evsel->core.attr.config2);
128945aea22SJiri Olsa 	return 0;
129945aea22SJiri Olsa }
130945aea22SJiri Olsa 
13163503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
132945aea22SJiri Olsa {
13332dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
134945aea22SJiri Olsa 
1356484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
137945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1381fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
139945aea22SJiri Olsa 	return 0;
140945aea22SJiri Olsa }
141945aea22SJiri Olsa 
14263503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
143945aea22SJiri Olsa {
14432dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
145945aea22SJiri Olsa 
1466484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
1481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config);
149945aea22SJiri Olsa 	return 0;
150945aea22SJiri Olsa }
151945aea22SJiri Olsa 
15263503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
153945aea22SJiri Olsa {
15432dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
155945aea22SJiri Olsa 
1566484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
159945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
1601fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
161945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
1621fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
163945aea22SJiri Olsa 	return 0;
164945aea22SJiri Olsa }
165945aea22SJiri Olsa 
16663503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist)
167945aea22SJiri Olsa {
16832dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
169945aea22SJiri Olsa 
1706484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
173945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1741fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
1751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
176945aea22SJiri Olsa 	return 0;
177945aea22SJiri Olsa }
178945aea22SJiri Olsa 
17963503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
180945aea22SJiri Olsa {
18132dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
182945aea22SJiri Olsa 
1836484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
184945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
1851fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
187945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1881fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
189945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
1901fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
191945aea22SJiri Olsa 	return 0;
192945aea22SJiri Olsa }
193945aea22SJiri Olsa 
19463503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
195945aea22SJiri Olsa {
19632dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
197945aea22SJiri Olsa 
1986484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
199945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2001fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
202945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2031fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
204945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2051fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
206945aea22SJiri Olsa 	return 0;
207945aea22SJiri Olsa }
208945aea22SJiri Olsa 
20963503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
210945aea22SJiri Olsa {
21132dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
212945aea22SJiri Olsa 
2136484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
214945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2151fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
217945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2181fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
219945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2201fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
221945aea22SJiri Olsa 	return 0;
222945aea22SJiri Olsa }
223945aea22SJiri Olsa 
22463503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
225945aea22SJiri Olsa {
22632dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
227945aea22SJiri Olsa 
2281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
232945aea22SJiri Olsa 
233945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
234945aea22SJiri Olsa }
235945aea22SJiri Olsa 
236945aea22SJiri Olsa static int
23763503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
238945aea22SJiri Olsa {
23932dcd021SJiri Olsa 	struct evsel *evsel;
240945aea22SJiri Olsa 
2416484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
242945aea22SJiri Olsa 
243e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
244945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user",
2451fc632ceSJiri Olsa 				!evsel->core.attr.exclude_user);
246945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel",
2471fc632ceSJiri Olsa 				evsel->core.attr.exclude_kernel);
2481fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2491fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
250945aea22SJiri Olsa 	}
251945aea22SJiri Olsa 
252945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
253945aea22SJiri Olsa }
254945aea22SJiri Olsa 
25563503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
256945aea22SJiri Olsa {
25732dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
258945aea22SJiri Olsa 
2591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
263945aea22SJiri Olsa 
264945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
265945aea22SJiri Olsa }
266945aea22SJiri Olsa 
26763503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
268945aea22SJiri Olsa {
26932dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
270945aea22SJiri Olsa 
2711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
275945aea22SJiri Olsa 
276945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
277945aea22SJiri Olsa }
278945aea22SJiri Olsa 
27963503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
280945aea22SJiri Olsa {
28132dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
282945aea22SJiri Olsa 
2831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
287945aea22SJiri Olsa 
288945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
289945aea22SJiri Olsa }
290945aea22SJiri Olsa 
29163503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
292945aea22SJiri Olsa {
29332dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
294945aea22SJiri Olsa 
2951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
2961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
297945aea22SJiri Olsa 
298945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
299945aea22SJiri Olsa }
300945aea22SJiri Olsa 
30163503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
302945aea22SJiri Olsa {
30332dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
304945aea22SJiri Olsa 
3051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
3061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
307945aea22SJiri Olsa 
308945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
309945aea22SJiri Olsa }
310945aea22SJiri Olsa 
31163503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
312945aea22SJiri Olsa {
31332dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
314945aea22SJiri Olsa 
3151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
319945aea22SJiri Olsa 
320945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
321945aea22SJiri Olsa }
322945aea22SJiri Olsa 
32363503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
324945aea22SJiri Olsa {
32532dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
326945aea22SJiri Olsa 
3271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
331945aea22SJiri Olsa 
332945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
333945aea22SJiri Olsa }
334945aea22SJiri Olsa 
33563503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
336a1e12da4SJiri Olsa {
33732dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
338a1e12da4SJiri Olsa 
3391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
3421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
346a1e12da4SJiri Olsa 
347a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
348a1e12da4SJiri Olsa }
349a1e12da4SJiri Olsa 
35063503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
351a1e12da4SJiri Olsa {
35232dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
353a1e12da4SJiri Olsa 
3541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
3571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
361a1e12da4SJiri Olsa 
362a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
363a1e12da4SJiri Olsa }
364a1e12da4SJiri Olsa 
36563503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
366945aea22SJiri Olsa {
36732dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
368945aea22SJiri Olsa 
369945aea22SJiri Olsa 
3701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
374945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
375945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:u"));
376945aea22SJiri Olsa 
377945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
378945aea22SJiri Olsa }
379945aea22SJiri Olsa 
38063503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
381945aea22SJiri Olsa {
38232dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
383945aea22SJiri Olsa 
3841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
388945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
389945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:x:k"));
390945aea22SJiri Olsa 
391945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
392945aea22SJiri Olsa }
393945aea22SJiri Olsa 
39463503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
395945aea22SJiri Olsa {
39632dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
397945aea22SJiri Olsa 
3981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
402945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
403945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:r:hp"));
404945aea22SJiri Olsa 
405945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
406945aea22SJiri Olsa }
407945aea22SJiri Olsa 
40863503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
409945aea22SJiri Olsa {
41032dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
411945aea22SJiri Olsa 
4121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
416945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
417945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:w:up"));
418945aea22SJiri Olsa 
419945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
420945aea22SJiri Olsa }
421945aea22SJiri Olsa 
42263503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
423945aea22SJiri Olsa {
42432dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
425945aea22SJiri Olsa 
4261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
430945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
431945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:rw:kp"));
432945aea22SJiri Olsa 
433945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
434945aea22SJiri Olsa }
435945aea22SJiri Olsa 
43663503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
437945aea22SJiri Olsa {
438945aea22SJiri Olsa 
43932dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
440945aea22SJiri Olsa 
4416484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
4421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",    10 == evsel->core.attr.config);
4441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
4451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
446ee4c7588SJiri Olsa 	/*
447ee4c7588SJiri Olsa 	 * The period value gets configured within perf_evlist__config,
448ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
449ee4c7588SJiri Olsa 	 */
4501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
451945aea22SJiri Olsa 
452945aea22SJiri Olsa 	return 0;
453945aea22SJiri Olsa }
454945aea22SJiri Olsa 
45563503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
456945aea22SJiri Olsa {
45732dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
458945aea22SJiri Olsa 
4596484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
460945aea22SJiri Olsa 
461945aea22SJiri Olsa 	/* r1 */
4621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
4651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
4661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
470945aea22SJiri Olsa 
47143f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
472945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
4731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
474945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
4751fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
4761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
4771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
481945aea22SJiri Olsa 
482945aea22SJiri Olsa 	/* 1:1:hp */
483945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
4841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
4851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
490945aea22SJiri Olsa 
491945aea22SJiri Olsa 	return 0;
492945aea22SJiri Olsa }
493945aea22SJiri Olsa 
49463503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
495945aea22SJiri Olsa {
49632dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
497945aea22SJiri Olsa 
498945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
4996484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
502945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava"));
503945aea22SJiri Olsa 
504945aea22SJiri Olsa 	/* cpu/config=2/u" */
505945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
5066484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
509945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
510945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "cpu/config=2/u"));
511945aea22SJiri Olsa 
512945aea22SJiri Olsa 	return 0;
513945aea22SJiri Olsa }
514945aea22SJiri Olsa 
51563503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
51671ef150eSKan Liang {
51732dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
51871ef150eSKan Liang 
51971ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
5206484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
52371ef150eSKan Liang 	/*
52471ef150eSKan Liang 	 * The period, time and callgraph value gets configured
52571ef150eSKan Liang 	 * within perf_evlist__config,
52671ef150eSKan Liang 	 * while this test executes only parse events method.
52771ef150eSKan Liang 	 */
5281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
52927de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
53171ef150eSKan Liang 
53271ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
53371ef150eSKan Liang 	evsel = perf_evsel__next(evsel);
5341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
53671ef150eSKan Liang 	/*
53771ef150eSKan Liang 	 * The period, time and callgraph value gets configured
53871ef150eSKan Liang 	 * within perf_evlist__config,
53971ef150eSKan Liang 	 * while this test executes only parse events method.
54071ef150eSKan Liang 	 */
5411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
54227de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
54471ef150eSKan Liang 
54571ef150eSKan Liang 	return 0;
54671ef150eSKan Liang }
54771ef150eSKan Liang 
54863503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
549945aea22SJiri Olsa {
55032dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
551945aea22SJiri Olsa 
5526484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
5531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
554945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
5551fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
556945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
5571fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
561945aea22SJiri Olsa 
562945aea22SJiri Olsa 	return 0;
563945aea22SJiri Olsa }
564945aea22SJiri Olsa 
565ffe59788SKan Liang 
56663503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
567ffe59788SKan Liang {
56832dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
569ffe59788SKan Liang 
570ffe59788SKan Liang 	/* pmu-event:u */
5716484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
572ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5731fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
574ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5751fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
579ffe59788SKan Liang 
580ffe59788SKan Liang 	/* cpu/pmu-event/u*/
581ffe59788SKan Liang 	evsel = perf_evsel__next(evsel);
5826484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
584ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5851fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
586ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5871fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
591ffe59788SKan Liang 
592ffe59788SKan Liang 	return 0;
593ffe59788SKan Liang }
594ffe59788SKan Liang 
595945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
596945aea22SJiri Olsa {
5976cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
598945aea22SJiri Olsa 
599945aea22SJiri Olsa 	/* config=10 */
6006cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
601945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
602945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
603945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
604945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
605945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
606945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
607945aea22SJiri Olsa 
608945aea22SJiri Olsa 	/* config1 */
6096cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
610945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
611945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
612945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
613945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
614945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
615945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
616945aea22SJiri Olsa 
617945aea22SJiri Olsa 	/* config2=3 */
6186cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
619945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
620945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
621945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
622945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
623945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
624945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
625945aea22SJiri Olsa 
626945aea22SJiri Olsa 	/* umask=1*/
6276cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
628945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
629945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
630945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
631945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
632945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
633945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
634945aea22SJiri Olsa 
635945aea22SJiri Olsa 	return 0;
636945aea22SJiri Olsa }
637945aea22SJiri Olsa 
63863503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
639945aea22SJiri Olsa {
64032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
641945aea22SJiri Olsa 
6426484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6438d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
644945aea22SJiri Olsa 
645945aea22SJiri Olsa 	/* instructions:k */
646945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
6471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
648945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6491fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
6501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
6511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
6521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
6541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
6551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
656823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
6575643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
6588d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
659a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
660945aea22SJiri Olsa 
661945aea22SJiri Olsa 	/* cycles:upp */
662945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
6631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
664945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6651fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
6661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
6671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
6681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
669945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
6701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
6711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
6721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
673945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
6748d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
675a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
676945aea22SJiri Olsa 
677945aea22SJiri Olsa 	return 0;
678945aea22SJiri Olsa }
679945aea22SJiri Olsa 
68063503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
681945aea22SJiri Olsa {
68232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
683945aea22SJiri Olsa 
6846484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
6858d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
686945aea22SJiri Olsa 
687945aea22SJiri Olsa 	/* faults + :ku modifier */
688945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
6891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
690945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6911fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
6921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
6931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
6941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
6961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
6971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
698823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
6995643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7008d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
701a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
702945aea22SJiri Olsa 
703945aea22SJiri Olsa 	/* cache-references + :u modifier */
704945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
7051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
706945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7071fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config);
7081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
714945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
7158d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
716a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
717945aea22SJiri Olsa 
718945aea22SJiri Olsa 	/* cycles:k */
719945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
7201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
721945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7221fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
729823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
730a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
731945aea22SJiri Olsa 
732945aea22SJiri Olsa 	return 0;
733945aea22SJiri Olsa }
734945aea22SJiri Olsa 
73563503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
736945aea22SJiri Olsa {
73732dcd021SJiri Olsa 	struct evsel *evsel, *leader;
738945aea22SJiri Olsa 
7396484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
7408d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups);
741945aea22SJiri Olsa 
74243f322b4SRiku Voipio 	/* group1 syscalls:sys_enter_openat:H */
743945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
7441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
745945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
7461fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
7471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
7481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
7511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
754823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
755945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
756945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
7575643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7588d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
759a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
760945aea22SJiri Olsa 
761945aea22SJiri Olsa 	/* group1 cycles:kppp */
762945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
7631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
764945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7651fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
769945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
7701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3);
773945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
774945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
7758d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
776a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
777945aea22SJiri Olsa 
778945aea22SJiri Olsa 	/* group2 cycles + G modifier */
779945aea22SJiri Olsa 	evsel = leader = perf_evsel__next(evsel);
7801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
781945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7821fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
7861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
7881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
789823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
790945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
791945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
7925643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7938d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
794a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
795945aea22SJiri Olsa 
796945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
797945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
7981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
7991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config);
8001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
806945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
8078d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
808a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
809945aea22SJiri Olsa 
810945aea22SJiri Olsa 	/* instructions:u */
811945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
8121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
813945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8141fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
8181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
821823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
822a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
823945aea22SJiri Olsa 
824945aea22SJiri Olsa 	return 0;
825945aea22SJiri Olsa }
826945aea22SJiri Olsa 
82763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
828945aea22SJiri Olsa {
82932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
830945aea22SJiri Olsa 
8316484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
8328d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
833945aea22SJiri Olsa 
834945aea22SJiri Olsa 	/* cycles:u + p */
835945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
8361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
837945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8381fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
842945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
846945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
847823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
8485643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8498d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
850a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
851945aea22SJiri Olsa 
852945aea22SJiri Olsa 	/* instructions:kp + p */
853945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
8541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
855945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8561fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
860945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
864945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
8658d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
866a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
867945aea22SJiri Olsa 
868945aea22SJiri Olsa 	return 0;
869945aea22SJiri Olsa }
870945aea22SJiri Olsa 
87163503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
872945aea22SJiri Olsa {
87332dcd021SJiri Olsa 	struct evsel *evsel, *leader;
874945aea22SJiri Olsa 
8756484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
8768d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups);
877945aea22SJiri Olsa 
878945aea22SJiri Olsa 	/* cycles + G */
879945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
8801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
881945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8821fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
889945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
890823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
8915643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8928d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
893a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
894945aea22SJiri Olsa 
895945aea22SJiri Olsa 	/* instructions + G */
896945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
8971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
898945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8991fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
906945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
9078d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
908a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
909945aea22SJiri Olsa 
910945aea22SJiri Olsa 	/* cycles:G */
911945aea22SJiri Olsa 	evsel = leader = perf_evsel__next(evsel);
9121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
913945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9141fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
921945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
922823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
9235643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9248d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
925a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
926945aea22SJiri Olsa 
927945aea22SJiri Olsa 	/* instructions:G */
928945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
9291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
930945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9311fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
938945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
9398d7d8474SNamhyung Kim 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
940945aea22SJiri Olsa 
941945aea22SJiri Olsa 	/* cycles */
942945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
9431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
944945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9451fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
952823254edSNamhyung Kim 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
953945aea22SJiri Olsa 
954945aea22SJiri Olsa 	return 0;
955945aea22SJiri Olsa }
956945aea22SJiri Olsa 
95763503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
9585a30a99fSJiri Olsa {
95932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
9605a30a99fSJiri Olsa 
9616484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
9625a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
9635a30a99fSJiri Olsa 
9645a30a99fSJiri Olsa 	/* cycles + :H group modifier */
9655a30a99fSJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
9661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9675a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9681fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
9755a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
9765a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
9775643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9785a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
9795a30a99fSJiri Olsa 
9805a30a99fSJiri Olsa 	/* cache-misses:G + :H group modifier */
9815a30a99fSJiri Olsa 	evsel = perf_evsel__next(evsel);
9821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9835a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9841fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
9851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
9915a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
9925a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
9935a30a99fSJiri Olsa 
9945a30a99fSJiri Olsa 	return 0;
9955a30a99fSJiri Olsa }
9965a30a99fSJiri Olsa 
99763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
9985a30a99fSJiri Olsa {
99932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10005a30a99fSJiri Olsa 
10016484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10025a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
10035a30a99fSJiri Olsa 
10045a30a99fSJiri Olsa 	/* cycles + :G group modifier */
10055a30a99fSJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
10061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10075a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10081fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10155a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
10165a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
10175643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10185a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
10195a30a99fSJiri Olsa 
10205a30a99fSJiri Olsa 	/* cache-misses:H + :G group modifier */
10215a30a99fSJiri Olsa 	evsel = perf_evsel__next(evsel);
10221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10235a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10241fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10315a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
10325a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
10335a30a99fSJiri Olsa 
10345a30a99fSJiri Olsa 	return 0;
10355a30a99fSJiri Olsa }
10365a30a99fSJiri Olsa 
103763503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
10385a30a99fSJiri Olsa {
103932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10405a30a99fSJiri Olsa 
10416484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10425a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
10435a30a99fSJiri Olsa 
10445a30a99fSJiri Olsa 	/* cycles:G + :u group modifier */
10455a30a99fSJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
10461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10475a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10481fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10555a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
10565a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
10575643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10585a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
10595a30a99fSJiri Olsa 
10605a30a99fSJiri Olsa 	/* cache-misses:H + :u group modifier */
10615a30a99fSJiri Olsa 	evsel = perf_evsel__next(evsel);
10621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10635a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10641fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10715a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
10725a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
10735a30a99fSJiri Olsa 
10745a30a99fSJiri Olsa 	return 0;
10755a30a99fSJiri Olsa }
10765a30a99fSJiri Olsa 
107763503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
10785a30a99fSJiri Olsa {
107932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10805a30a99fSJiri Olsa 
10816484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10825a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
10835a30a99fSJiri Olsa 
10845a30a99fSJiri Olsa 	/* cycles:G + :uG group modifier */
10855a30a99fSJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
10861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10875a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10881fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10955a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
10965a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
10975643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10985a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
10995a30a99fSJiri Olsa 
11005a30a99fSJiri Olsa 	/* cache-misses:H + :uG group modifier */
11015a30a99fSJiri Olsa 	evsel = perf_evsel__next(evsel);
11021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11035a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11041fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11115a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
11125a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
11135a30a99fSJiri Olsa 
11145a30a99fSJiri Olsa 	return 0;
11155a30a99fSJiri Olsa }
11165a30a99fSJiri Olsa 
111763503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1118a9f93f97SJiri Olsa {
111932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1120a9f93f97SJiri Olsa 
11216484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1122a9f93f97SJiri Olsa 
1123a9f93f97SJiri Olsa 	/* cycles - sampling group leader */
1124a9f93f97SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
11251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1126a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11271fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1134a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1135a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1136a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1137a9f93f97SJiri Olsa 
1138a9f93f97SJiri Olsa 	/* cache-misses - not sampling */
1139a9f93f97SJiri Olsa 	evsel = perf_evsel__next(evsel);
11401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1141a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11421fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1149a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1150a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1151a9f93f97SJiri Olsa 
1152a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1153a9f93f97SJiri Olsa 	evsel = perf_evsel__next(evsel);
11541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1155a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11561fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
11571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1163a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1164a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1165a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1166a9f93f97SJiri Olsa 
1167a9f93f97SJiri Olsa 	return 0;
1168a9f93f97SJiri Olsa }
1169a9f93f97SJiri Olsa 
117063503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1171a9f93f97SJiri Olsa {
117232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1173a9f93f97SJiri Olsa 
11746484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
1175a9f93f97SJiri Olsa 
1176a9f93f97SJiri Olsa 	/* instructions - sampling group leader */
1177a9f93f97SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
11781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1179a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11801fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
11811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1187a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1188a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1189a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1190a9f93f97SJiri Olsa 
1191a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1192a9f93f97SJiri Olsa 	evsel = perf_evsel__next(evsel);
11931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1194a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11951fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
11961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1202a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1203a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1204a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1205a9f93f97SJiri Olsa 
1206a9f93f97SJiri Olsa 	return 0;
1207a9f93f97SJiri Olsa }
1208a9f93f97SJiri Olsa 
120963503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1210c9ee780fSMichael Ellerman {
121132dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
1212c9ee780fSMichael Ellerman 
12131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1218c9ee780fSMichael Ellerman 
1219c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1220c9ee780fSMichael Ellerman }
1221c9ee780fSMichael Ellerman 
122263503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1223c9ee780fSMichael Ellerman {
122432dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1225c9ee780fSMichael Ellerman 
12266484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1227c9ee780fSMichael Ellerman 
1228c9ee780fSMichael Ellerman 	/* cycles - group leader */
1229c9ee780fSMichael Ellerman 	evsel = leader = perf_evlist__first(evlist);
12301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1231c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12321fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
1233c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1234c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
12351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1236c9ee780fSMichael Ellerman 
1237c9ee780fSMichael Ellerman 	/* cache-misses - can not be pinned, but will go on with the leader */
1238c9ee780fSMichael Ellerman 	evsel = perf_evsel__next(evsel);
12391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1240c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12411fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
12421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1243c9ee780fSMichael Ellerman 
1244c9ee780fSMichael Ellerman 	/* branch-misses - ditto */
1245c9ee780fSMichael Ellerman 	evsel = perf_evsel__next(evsel);
1246c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12471fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1249c9ee780fSMichael Ellerman 
1250c9ee780fSMichael Ellerman 	return 0;
1251c9ee780fSMichael Ellerman }
1252c9ee780fSMichael Ellerman 
125363503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1254ec32398cSJacob Shin {
125532dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
1256ec32398cSJacob Shin 
12576484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
12581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
12591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1260ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
12611fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1262ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
12631fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1264ec32398cSJacob Shin 
1265ec32398cSJacob Shin 	return 0;
1266ec32398cSJacob Shin }
1267ec32398cSJacob Shin 
126863503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1269ec32398cSJacob Shin {
127032dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
1271ec32398cSJacob Shin 
12726484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
12731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
12741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1275ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
12761fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1277ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
12781fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1279ec32398cSJacob Shin 
1280ec32398cSJacob Shin 	return 0;
1281ec32398cSJacob Shin }
1282ec32398cSJacob Shin 
1283ec32398cSJacob Shin static int
128463503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1285ec32398cSJacob Shin {
128632dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
1287ec32398cSJacob Shin 
12881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1292ec32398cSJacob Shin 
1293ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1294ec32398cSJacob Shin }
1295ec32398cSJacob Shin 
129663503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1297ddd83c97SJiri Olsa {
129832dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
1299ddd83c97SJiri Olsa 
13006484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
13011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1302ddd83c97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
13031fc632ceSJiri Olsa 			PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config);
1304ddd83c97SJiri Olsa 	return 0;
1305ddd83c97SJiri Olsa }
1306ddd83c97SJiri Olsa 
130763503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
130810bf358aSWang Nan {
130932dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
131010bf358aSWang Nan 
131110bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0);
131210bf358aSWang Nan 	return 0;
131310bf358aSWang Nan }
131410bf358aSWang Nan 
131563503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
131610bf358aSWang Nan {
131732dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
131810bf358aSWang Nan 
131910bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0);
132010bf358aSWang Nan 	return 0;
132110bf358aSWang Nan }
132210bf358aSWang Nan 
132363503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
132410bf358aSWang Nan {
132532dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
132610bf358aSWang Nan 
132710bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0);
132810bf358aSWang Nan 	return 0;
132910bf358aSWang Nan }
133010bf358aSWang Nan 
133163503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
133243d0b978SWang Nan {
133332dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
133443d0b978SWang Nan 
133543d0b978SWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0);
133643d0b978SWang Nan 	return 0;
133743d0b978SWang Nan }
133810bf358aSWang Nan 
133916ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
134016ddcfbfSJiri Olsa {
134116ddcfbfSJiri Olsa 	return !!perf_pmu__find("intel_pt");
134216ddcfbfSJiri Olsa }
134316ddcfbfSJiri Olsa 
134463503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1345b3f58c8dSArnaldo Carvalho de Melo {
134632dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
1347b3f58c8dSArnaldo Carvalho de Melo 
1348b3f58c8dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0);
1349b3f58c8dSArnaldo Carvalho de Melo 	return 0;
1350b3f58c8dSArnaldo Carvalho de Melo }
1351b3f58c8dSArnaldo Carvalho de Melo 
135263503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
135306dc5bf2SAlexey Budankov {
135432dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
135506dc5bf2SAlexey Budankov 
135606dc5bf2SAlexey Budankov 	TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0);
135706dc5bf2SAlexey Budankov 	return 0;
135806dc5bf2SAlexey Budankov }
135906dc5bf2SAlexey Budankov 
136063503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1361714a92d8SJiri Olsa {
136232dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
1363714a92d8SJiri Olsa 
13641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
13651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
13661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
1367714a92d8SJiri Olsa 	return 0;
1368714a92d8SJiri Olsa }
1369714a92d8SJiri Olsa 
137063503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1371714a92d8SJiri Olsa {
137232dcd021SJiri Olsa 	struct evsel *evsel = perf_evlist__first(evlist);
1373714a92d8SJiri Olsa 
13741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
13751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
13761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
1377714a92d8SJiri Olsa 	return 0;
1378714a92d8SJiri Olsa }
1379714a92d8SJiri Olsa 
138082ce75d9SJiri Olsa static int count_tracepoints(void)
138182ce75d9SJiri Olsa {
138282ce75d9SJiri Olsa 	struct dirent *events_ent;
138382ce75d9SJiri Olsa 	DIR *events_dir;
138482ce75d9SJiri Olsa 	int cnt = 0;
138582ce75d9SJiri Olsa 
13867014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
138782ce75d9SJiri Olsa 
138882ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
138982ce75d9SJiri Olsa 
139082ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
139125a7d914SArnaldo Carvalho de Melo 		char *sys_path;
139282ce75d9SJiri Olsa 		struct dirent *sys_ent;
139382ce75d9SJiri Olsa 		DIR *sys_dir;
139482ce75d9SJiri Olsa 
139582ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
139682ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
139782ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
139882ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
139982ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
140082ce75d9SJiri Olsa 			continue;
140182ce75d9SJiri Olsa 
140225a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
140325a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
140482ce75d9SJiri Olsa 
140582ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
140682ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
140782ce75d9SJiri Olsa 
140882ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
140982ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
141082ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
141182ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
141282ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
141382ce75d9SJiri Olsa 				continue;
141482ce75d9SJiri Olsa 
141582ce75d9SJiri Olsa 			cnt++;
141682ce75d9SJiri Olsa 		}
141782ce75d9SJiri Olsa 
141882ce75d9SJiri Olsa 		closedir(sys_dir);
141925a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
142082ce75d9SJiri Olsa 	}
142182ce75d9SJiri Olsa 
142282ce75d9SJiri Olsa 	closedir(events_dir);
142382ce75d9SJiri Olsa 	return cnt;
142482ce75d9SJiri Olsa }
142582ce75d9SJiri Olsa 
142663503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
142782ce75d9SJiri Olsa {
142882ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
14296484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
143082ce75d9SJiri Olsa 
143182ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
143282ce75d9SJiri Olsa }
143382ce75d9SJiri Olsa 
143423b6339bSArnaldo Carvalho de Melo struct evlist_test {
1435945aea22SJiri Olsa 	const char *name;
1436945aea22SJiri Olsa 	__u32 type;
1437615b8f99SAlexander Yarygin 	const int id;
143816ddcfbfSJiri Olsa 	bool (*valid)(void);
143963503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1440945aea22SJiri Olsa };
1441945aea22SJiri Olsa 
144223b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events[] = {
1443615b8f99SAlexander Yarygin 	{
144443f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1445945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
1446615b8f99SAlexander Yarygin 		.id    = 0,
1447945aea22SJiri Olsa 	},
1448615b8f99SAlexander Yarygin 	{
1449945aea22SJiri Olsa 		.name  = "syscalls:*",
1450945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
1451615b8f99SAlexander Yarygin 		.id    = 1,
1452945aea22SJiri Olsa 	},
1453615b8f99SAlexander Yarygin 	{
1454945aea22SJiri Olsa 		.name  = "r1a",
1455945aea22SJiri Olsa 		.check = test__checkevent_raw,
1456615b8f99SAlexander Yarygin 		.id    = 2,
1457945aea22SJiri Olsa 	},
1458615b8f99SAlexander Yarygin 	{
1459945aea22SJiri Olsa 		.name  = "1:1",
1460945aea22SJiri Olsa 		.check = test__checkevent_numeric,
1461615b8f99SAlexander Yarygin 		.id    = 3,
1462945aea22SJiri Olsa 	},
1463615b8f99SAlexander Yarygin 	{
1464945aea22SJiri Olsa 		.name  = "instructions",
1465945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
1466615b8f99SAlexander Yarygin 		.id    = 4,
1467945aea22SJiri Olsa 	},
1468615b8f99SAlexander Yarygin 	{
1469945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1470945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
1471615b8f99SAlexander Yarygin 		.id    = 5,
1472945aea22SJiri Olsa 	},
1473615b8f99SAlexander Yarygin 	{
1474945aea22SJiri Olsa 		.name  = "faults",
1475945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
1476615b8f99SAlexander Yarygin 		.id    = 6,
1477945aea22SJiri Olsa 	},
1478615b8f99SAlexander Yarygin 	{
1479945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1480945aea22SJiri Olsa 		.check = test__checkevent_genhw,
1481615b8f99SAlexander Yarygin 		.id    = 7,
1482945aea22SJiri Olsa 	},
1483615b8f99SAlexander Yarygin 	{
1484945aea22SJiri Olsa 		.name  = "mem:0",
1485945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
1486615b8f99SAlexander Yarygin 		.id    = 8,
1487945aea22SJiri Olsa 	},
1488615b8f99SAlexander Yarygin 	{
1489945aea22SJiri Olsa 		.name  = "mem:0:x",
1490945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
1491615b8f99SAlexander Yarygin 		.id    = 9,
1492945aea22SJiri Olsa 	},
1493615b8f99SAlexander Yarygin 	{
1494945aea22SJiri Olsa 		.name  = "mem:0:r",
1495945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
1496615b8f99SAlexander Yarygin 		.id    = 10,
1497945aea22SJiri Olsa 	},
1498615b8f99SAlexander Yarygin 	{
1499945aea22SJiri Olsa 		.name  = "mem:0:w",
1500945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
1501615b8f99SAlexander Yarygin 		.id    = 11,
1502945aea22SJiri Olsa 	},
1503615b8f99SAlexander Yarygin 	{
150443f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1505945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
1506615b8f99SAlexander Yarygin 		.id    = 12,
1507945aea22SJiri Olsa 	},
1508615b8f99SAlexander Yarygin 	{
1509945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1510945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
1511615b8f99SAlexander Yarygin 		.id    = 13,
1512945aea22SJiri Olsa 	},
1513615b8f99SAlexander Yarygin 	{
1514945aea22SJiri Olsa 		.name  = "r1a:kp",
1515945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
1516615b8f99SAlexander Yarygin 		.id    = 14,
1517945aea22SJiri Olsa 	},
1518615b8f99SAlexander Yarygin 	{
1519945aea22SJiri Olsa 		.name  = "1:1:hp",
1520945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
1521615b8f99SAlexander Yarygin 		.id    = 15,
1522945aea22SJiri Olsa 	},
1523615b8f99SAlexander Yarygin 	{
1524945aea22SJiri Olsa 		.name  = "instructions:h",
1525945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
1526615b8f99SAlexander Yarygin 		.id    = 16,
1527945aea22SJiri Olsa 	},
1528615b8f99SAlexander Yarygin 	{
1529945aea22SJiri Olsa 		.name  = "faults:u",
1530945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
1531615b8f99SAlexander Yarygin 		.id    = 17,
1532945aea22SJiri Olsa 	},
1533615b8f99SAlexander Yarygin 	{
1534945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1535945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
1536615b8f99SAlexander Yarygin 		.id    = 18,
1537945aea22SJiri Olsa 	},
1538615b8f99SAlexander Yarygin 	{
1539945aea22SJiri Olsa 		.name  = "mem:0:u",
1540945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
1541615b8f99SAlexander Yarygin 		.id    = 19,
1542945aea22SJiri Olsa 	},
1543615b8f99SAlexander Yarygin 	{
1544945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1545945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
1546615b8f99SAlexander Yarygin 		.id    = 20,
1547945aea22SJiri Olsa 	},
1548615b8f99SAlexander Yarygin 	{
1549945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1550945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
1551615b8f99SAlexander Yarygin 		.id    = 21,
1552945aea22SJiri Olsa 	},
1553615b8f99SAlexander Yarygin 	{
1554945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1555945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
1556615b8f99SAlexander Yarygin 		.id    = 22,
1557945aea22SJiri Olsa 	},
1558615b8f99SAlexander Yarygin 	{
155943f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1560945aea22SJiri Olsa 		.check = test__checkevent_list,
1561615b8f99SAlexander Yarygin 		.id    = 23,
1562945aea22SJiri Olsa 	},
1563615b8f99SAlexander Yarygin 	{
1564945aea22SJiri Olsa 		.name  = "instructions:G",
1565945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
1566615b8f99SAlexander Yarygin 		.id    = 24,
1567945aea22SJiri Olsa 	},
1568615b8f99SAlexander Yarygin 	{
1569945aea22SJiri Olsa 		.name  = "instructions:H",
1570945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
1571615b8f99SAlexander Yarygin 		.id    = 25,
1572945aea22SJiri Olsa 	},
1573615b8f99SAlexander Yarygin 	{
1574945aea22SJiri Olsa 		.name  = "mem:0:rw",
1575945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
1576615b8f99SAlexander Yarygin 		.id    = 26,
1577945aea22SJiri Olsa 	},
1578615b8f99SAlexander Yarygin 	{
1579945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1580945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
1581615b8f99SAlexander Yarygin 		.id    = 27,
1582945aea22SJiri Olsa 	},
1583615b8f99SAlexander Yarygin 	{
1584945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1585945aea22SJiri Olsa 		.check = test__group1,
1586615b8f99SAlexander Yarygin 		.id    = 28,
1587945aea22SJiri Olsa 	},
1588615b8f99SAlexander Yarygin 	{
1589945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1590945aea22SJiri Olsa 		.check = test__group2,
1591615b8f99SAlexander Yarygin 		.id    = 29,
1592945aea22SJiri Olsa 	},
1593615b8f99SAlexander Yarygin 	{
159443f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1595945aea22SJiri Olsa 		.check = test__group3,
1596615b8f99SAlexander Yarygin 		.id    = 30,
1597945aea22SJiri Olsa 	},
1598615b8f99SAlexander Yarygin 	{
1599945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1600945aea22SJiri Olsa 		.check = test__group4,
1601615b8f99SAlexander Yarygin 		.id    = 31,
1602945aea22SJiri Olsa 	},
1603615b8f99SAlexander Yarygin 	{
1604945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1605945aea22SJiri Olsa 		.check = test__group5,
1606615b8f99SAlexander Yarygin 		.id    = 32,
1607945aea22SJiri Olsa 	},
1608615b8f99SAlexander Yarygin 	{
160982ce75d9SJiri Olsa 		.name  = "*:*",
161082ce75d9SJiri Olsa 		.check = test__all_tracepoints,
1611615b8f99SAlexander Yarygin 		.id    = 33,
161282ce75d9SJiri Olsa 	},
1613615b8f99SAlexander Yarygin 	{
16145a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
16155a30a99fSJiri Olsa 		.check = test__group_gh1,
1616615b8f99SAlexander Yarygin 		.id    = 34,
16175a30a99fSJiri Olsa 	},
1618615b8f99SAlexander Yarygin 	{
16195a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
16205a30a99fSJiri Olsa 		.check = test__group_gh2,
1621615b8f99SAlexander Yarygin 		.id    = 35,
16225a30a99fSJiri Olsa 	},
1623615b8f99SAlexander Yarygin 	{
16245a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
16255a30a99fSJiri Olsa 		.check = test__group_gh3,
1626615b8f99SAlexander Yarygin 		.id    = 36,
16275a30a99fSJiri Olsa 	},
1628615b8f99SAlexander Yarygin 	{
16295a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
16305a30a99fSJiri Olsa 		.check = test__group_gh4,
1631615b8f99SAlexander Yarygin 		.id    = 37,
16325a30a99fSJiri Olsa 	},
1633615b8f99SAlexander Yarygin 	{
1634a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1635a9f93f97SJiri Olsa 		.check = test__leader_sample1,
1636615b8f99SAlexander Yarygin 		.id    = 38,
1637a9f93f97SJiri Olsa 	},
1638615b8f99SAlexander Yarygin 	{
1639a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1640a9f93f97SJiri Olsa 		.check = test__leader_sample2,
1641615b8f99SAlexander Yarygin 		.id    = 39,
1642a9f93f97SJiri Olsa 	},
1643615b8f99SAlexander Yarygin 	{
1644c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1645c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
1646615b8f99SAlexander Yarygin 		.id    = 40,
1647c9ee780fSMichael Ellerman 	},
1648615b8f99SAlexander Yarygin 	{
1649c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1650c9ee780fSMichael Ellerman 		.check = test__pinned_group,
1651615b8f99SAlexander Yarygin 		.id    = 41,
1652c9ee780fSMichael Ellerman 	},
1653ec32398cSJacob Shin 	{
1654ec32398cSJacob Shin 		.name  = "mem:0/1",
1655ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
1656ec32398cSJacob Shin 		.id    = 42,
1657ec32398cSJacob Shin 	},
1658ec32398cSJacob Shin 	{
1659ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1660ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
1661ec32398cSJacob Shin 		.id    = 43,
1662ec32398cSJacob Shin 	},
1663ec32398cSJacob Shin 	{
1664ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1665ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
1666ec32398cSJacob Shin 		.id    = 44
1667ec32398cSJacob Shin 	},
1668c0bc8c6dSAlexander Yarygin #if defined(__s390x__)
1669c0bc8c6dSAlexander Yarygin 	{
1670c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1671c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
167253fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
1673c0bc8c6dSAlexander Yarygin 		.id    = 100,
1674c0bc8c6dSAlexander Yarygin 	},
1675c0bc8c6dSAlexander Yarygin #endif
1676a1e12da4SJiri Olsa 	{
1677a1e12da4SJiri Olsa 		.name  = "instructions:I",
1678a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
1679a1e12da4SJiri Olsa 		.id    = 45,
1680a1e12da4SJiri Olsa 	},
1681a1e12da4SJiri Olsa 	{
1682a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1683a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
1684a1e12da4SJiri Olsa 		.id    = 46,
1685a1e12da4SJiri Olsa 	},
1686ddd83c97SJiri Olsa 	{
1687ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1688ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
1689ddd83c97SJiri Olsa 		.id    = 47,
1690ddd83c97SJiri Olsa 	},
169110bf358aSWang Nan 	{
169210bf358aSWang Nan 		.name  = "instructions/name=insn/",
169310bf358aSWang Nan 		.check = test__checkevent_config_symbol,
169410bf358aSWang Nan 		.id    = 48,
169510bf358aSWang Nan 	},
169610bf358aSWang Nan 	{
169710bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
169810bf358aSWang Nan 		.check = test__checkevent_config_raw,
169910bf358aSWang Nan 		.id    = 49,
170010bf358aSWang Nan 	},
170110bf358aSWang Nan 	{
170210bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
170310bf358aSWang Nan 		.check = test__checkevent_config_num,
170410bf358aSWang Nan 		.id    = 50,
170510bf358aSWang Nan 	},
170643d0b978SWang Nan 	{
170743d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
170843d0b978SWang Nan 		.check = test__checkevent_config_cache,
170943d0b978SWang Nan 		.id    = 51,
171043d0b978SWang Nan 	},
1711b3f58c8dSArnaldo Carvalho de Melo 	{
1712b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
171316ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1714b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
1715b3f58c8dSArnaldo Carvalho de Melo 		.id    = 52,
1716b3f58c8dSArnaldo Carvalho de Melo 	},
171706dc5bf2SAlexey Budankov 	{
171806dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
171906dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
172006dc5bf2SAlexey Budankov 		.id    = 53
1721714a92d8SJiri Olsa 	},
1722714a92d8SJiri Olsa 	{
1723714a92d8SJiri Olsa 		.name  = "cycles//u",
1724714a92d8SJiri Olsa 		.check = test__sym_event_slash,
1725714a92d8SJiri Olsa 		.id    = 54,
1726714a92d8SJiri Olsa 	},
1727714a92d8SJiri Olsa 	{
1728714a92d8SJiri Olsa 		.name  = "cycles:k",
1729714a92d8SJiri Olsa 		.check = test__sym_event_dc,
1730714a92d8SJiri Olsa 		.id    = 55,
173106dc5bf2SAlexey Budankov 	}
1732945aea22SJiri Olsa };
1733945aea22SJiri Olsa 
173423b6339bSArnaldo Carvalho de Melo static struct evlist_test test__events_pmu[] = {
1735615b8f99SAlexander Yarygin 	{
1736945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
1737945aea22SJiri Olsa 		.check = test__checkevent_pmu,
1738615b8f99SAlexander Yarygin 		.id    = 0,
1739945aea22SJiri Olsa 	},
1740615b8f99SAlexander Yarygin 	{
1741945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
1742945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
1743615b8f99SAlexander Yarygin 		.id    = 1,
1744945aea22SJiri Olsa 	},
174571ef150eSKan Liang 	{
174671ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
174771ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
174871ef150eSKan Liang 		.id    = 2,
174971ef150eSKan Liang 	},
175006dc5bf2SAlexey Budankov 	{
1751a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
175206dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
175306dc5bf2SAlexey Budankov 		.id    = 3,
175406dc5bf2SAlexey Budankov 	}
1755945aea22SJiri Olsa };
1756945aea22SJiri Olsa 
175723b6339bSArnaldo Carvalho de Melo struct terms_test {
1758945aea22SJiri Olsa 	const char *str;
1759945aea22SJiri Olsa 	__u32 type;
1760945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
1761945aea22SJiri Olsa };
1762945aea22SJiri Olsa 
176323b6339bSArnaldo Carvalho de Melo static struct terms_test test__terms[] = {
1764945aea22SJiri Olsa 	[0] = {
1765945aea22SJiri Olsa 		.str   = "config=10,config1,config2=3,umask=1",
1766945aea22SJiri Olsa 		.check = test__checkterms_simple,
1767945aea22SJiri Olsa 	},
1768945aea22SJiri Olsa };
1769945aea22SJiri Olsa 
177023b6339bSArnaldo Carvalho de Melo static int test_event(struct evlist_test *e)
1771945aea22SJiri Olsa {
1772933ccf20SJiri Olsa 	struct parse_events_error err = { .idx = 0, };
177363503dbaSJiri Olsa 	struct evlist *evlist;
1774945aea22SJiri Olsa 	int ret;
1775945aea22SJiri Olsa 
177616ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
177716ddcfbfSJiri Olsa 		pr_debug("... SKIP");
177816ddcfbfSJiri Olsa 		return 0;
177916ddcfbfSJiri Olsa 	}
178016ddcfbfSJiri Olsa 
17810f98b11cSJiri Olsa 	evlist = evlist__new();
1782945aea22SJiri Olsa 	if (evlist == NULL)
1783945aea22SJiri Olsa 		return -ENOMEM;
1784945aea22SJiri Olsa 
1785933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
1786945aea22SJiri Olsa 	if (ret) {
1787933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
1788933ccf20SJiri Olsa 			 e->name, ret, err.str);
1789933ccf20SJiri Olsa 		parse_events_print_error(&err, e->name);
17902d4352c0SArnaldo Carvalho de Melo 	} else {
17912d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
1792945aea22SJiri Olsa 	}
1793945aea22SJiri Olsa 
1794c12995a5SJiri Olsa 	evlist__delete(evlist);
1795945aea22SJiri Olsa 
1796945aea22SJiri Olsa 	return ret;
1797945aea22SJiri Olsa }
1798945aea22SJiri Olsa 
179923b6339bSArnaldo Carvalho de Melo static int test_events(struct evlist_test *events, unsigned cnt)
1800945aea22SJiri Olsa {
1801945aea22SJiri Olsa 	int ret1, ret2 = 0;
1802945aea22SJiri Olsa 	unsigned i;
1803945aea22SJiri Olsa 
1804945aea22SJiri Olsa 	for (i = 0; i < cnt; i++) {
180523b6339bSArnaldo Carvalho de Melo 		struct evlist_test *e = &events[i];
1806945aea22SJiri Olsa 
180716ddcfbfSJiri Olsa 		pr_debug("running test %d '%s'", e->id, e->name);
1808945aea22SJiri Olsa 		ret1 = test_event(e);
1809945aea22SJiri Olsa 		if (ret1)
1810945aea22SJiri Olsa 			ret2 = ret1;
181116ddcfbfSJiri Olsa 		pr_debug("\n");
1812945aea22SJiri Olsa 	}
1813945aea22SJiri Olsa 
1814945aea22SJiri Olsa 	return ret2;
1815945aea22SJiri Olsa }
1816945aea22SJiri Olsa 
181723b6339bSArnaldo Carvalho de Melo static int test_term(struct terms_test *t)
1818945aea22SJiri Olsa {
1819c549aca5SDavid Ahern 	struct list_head terms;
1820945aea22SJiri Olsa 	int ret;
1821945aea22SJiri Olsa 
1822c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
1823945aea22SJiri Olsa 
1824c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
1825945aea22SJiri Olsa 	if (ret) {
1826945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
1827945aea22SJiri Olsa 			 t->str , ret);
1828945aea22SJiri Olsa 		return ret;
1829945aea22SJiri Olsa 	}
1830945aea22SJiri Olsa 
1831c549aca5SDavid Ahern 	ret = t->check(&terms);
1832682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
1833945aea22SJiri Olsa 
1834945aea22SJiri Olsa 	return ret;
1835945aea22SJiri Olsa }
1836945aea22SJiri Olsa 
183723b6339bSArnaldo Carvalho de Melo static int test_terms(struct terms_test *terms, unsigned cnt)
1838945aea22SJiri Olsa {
1839945aea22SJiri Olsa 	int ret = 0;
1840945aea22SJiri Olsa 	unsigned i;
1841945aea22SJiri Olsa 
1842945aea22SJiri Olsa 	for (i = 0; i < cnt; i++) {
184323b6339bSArnaldo Carvalho de Melo 		struct terms_test *t = &terms[i];
1844945aea22SJiri Olsa 
1845945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
1846945aea22SJiri Olsa 		ret = test_term(t);
1847945aea22SJiri Olsa 		if (ret)
1848945aea22SJiri Olsa 			break;
1849945aea22SJiri Olsa 	}
1850945aea22SJiri Olsa 
1851945aea22SJiri Olsa 	return ret;
1852945aea22SJiri Olsa }
1853945aea22SJiri Olsa 
1854945aea22SJiri Olsa static int test_pmu(void)
1855945aea22SJiri Olsa {
1856945aea22SJiri Olsa 	struct stat st;
1857945aea22SJiri Olsa 	char path[PATH_MAX];
1858945aea22SJiri Olsa 	int ret;
1859945aea22SJiri Olsa 
1860945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
1861cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
1862945aea22SJiri Olsa 
1863945aea22SJiri Olsa 	ret = stat(path, &st);
1864945aea22SJiri Olsa 	if (ret)
1865945aea22SJiri Olsa 		pr_debug("omitting PMU cpu tests\n");
1866945aea22SJiri Olsa 	return !ret;
1867945aea22SJiri Olsa }
1868945aea22SJiri Olsa 
1869945aea22SJiri Olsa static int test_pmu_events(void)
1870945aea22SJiri Olsa {
1871945aea22SJiri Olsa 	struct stat st;
1872945aea22SJiri Olsa 	char path[PATH_MAX];
1873945aea22SJiri Olsa 	struct dirent *ent;
1874945aea22SJiri Olsa 	DIR *dir;
1875945aea22SJiri Olsa 	int ret;
1876945aea22SJiri Olsa 
1877945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/",
1878cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
1879945aea22SJiri Olsa 
1880945aea22SJiri Olsa 	ret = stat(path, &st);
1881945aea22SJiri Olsa 	if (ret) {
1882a895d57dSMasanari Iida 		pr_debug("omitting PMU cpu events tests\n");
1883945aea22SJiri Olsa 		return 0;
1884945aea22SJiri Olsa 	}
1885945aea22SJiri Olsa 
1886945aea22SJiri Olsa 	dir = opendir(path);
1887945aea22SJiri Olsa 	if (!dir) {
1888945aea22SJiri Olsa 		pr_debug("can't open pmu event dir");
1889945aea22SJiri Olsa 		return -1;
1890945aea22SJiri Olsa 	}
1891945aea22SJiri Olsa 
1892945aea22SJiri Olsa 	while (!ret && (ent = readdir(dir))) {
189316ddcfbfSJiri Olsa 		struct evlist_test e = { .id = 0, };
18942e2bbc03SArnaldo Carvalho de Melo 		char name[2 * NAME_MAX + 1 + 12 + 3];
1895945aea22SJiri Olsa 
189617a2634bSAndi Kleen 		/* Names containing . are special and cannot be used directly */
189717a2634bSAndi Kleen 		if (strchr(ent->d_name, '.'))
1898945aea22SJiri Olsa 			continue;
1899945aea22SJiri Olsa 
19002e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name);
1901945aea22SJiri Olsa 
1902945aea22SJiri Olsa 		e.name  = name;
1903945aea22SJiri Olsa 		e.check = test__checkevent_pmu_events;
1904945aea22SJiri Olsa 
1905945aea22SJiri Olsa 		ret = test_event(&e);
1906ffe59788SKan Liang 		if (ret)
1907ffe59788SKan Liang 			break;
19082e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);
1909ffe59788SKan Liang 		e.name  = name;
1910ffe59788SKan Liang 		e.check = test__checkevent_pmu_events_mix;
1911ffe59788SKan Liang 		ret = test_event(&e);
1912945aea22SJiri Olsa 	}
1913945aea22SJiri Olsa 
1914945aea22SJiri Olsa 	closedir(dir);
1915945aea22SJiri Olsa 	return ret;
1916945aea22SJiri Olsa }
1917945aea22SJiri Olsa 
191881f17c90SArnaldo Carvalho de Melo int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused)
1919945aea22SJiri Olsa {
1920945aea22SJiri Olsa 	int ret1, ret2 = 0;
1921945aea22SJiri Olsa 
1922945aea22SJiri Olsa #define TEST_EVENTS(tests)				\
1923945aea22SJiri Olsa do {							\
1924945aea22SJiri Olsa 	ret1 = test_events(tests, ARRAY_SIZE(tests));	\
1925945aea22SJiri Olsa 	if (!ret2)					\
1926945aea22SJiri Olsa 		ret2 = ret1;				\
1927945aea22SJiri Olsa } while (0)
1928945aea22SJiri Olsa 
1929945aea22SJiri Olsa 	TEST_EVENTS(test__events);
1930945aea22SJiri Olsa 
1931945aea22SJiri Olsa 	if (test_pmu())
1932945aea22SJiri Olsa 		TEST_EVENTS(test__events_pmu);
1933945aea22SJiri Olsa 
1934945aea22SJiri Olsa 	if (test_pmu()) {
1935945aea22SJiri Olsa 		int ret = test_pmu_events();
1936945aea22SJiri Olsa 		if (ret)
1937945aea22SJiri Olsa 			return ret;
1938945aea22SJiri Olsa 	}
1939945aea22SJiri Olsa 
1940945aea22SJiri Olsa 	ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms));
1941945aea22SJiri Olsa 	if (!ret2)
1942945aea22SJiri Olsa 		ret2 = ret1;
1943945aea22SJiri Olsa 
1944945aea22SJiri Olsa 	return ret2;
1945945aea22SJiri Olsa }
1946