xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 146edff3d7ed135269dae8abef3219083c45b21e)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2945aea22SJiri Olsa #include "parse-events.h"
3945aea22SJiri Olsa #include "evsel.h"
4945aea22SJiri Olsa #include "evlist.h"
5cd0cfad7SBorislav Petkov #include <api/fs/fs.h>
6c81251e8SJiri Olsa #include "tests.h"
784f5d36fSJiri Olsa #include "debug.h"
8f2a39fe8SArnaldo Carvalho de Melo #include "pmu.h"
9490e9a8fSJin Yao #include "pmu-hybrid.h"
1076b31a29SArnaldo Carvalho de Melo #include <dirent.h>
11a43783aeSArnaldo Carvalho de Melo #include <errno.h>
12c7a3828dSJin Yao #include "fncache.h"
137a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h>
147a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h>
157a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h>
16877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h>
17f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h>
1820a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h>
19945aea22SJiri Olsa 
20945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
21945aea22SJiri Olsa 			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
22945aea22SJiri Olsa 
2353fe307dSThomas Richter #if defined(__s390x__)
2453fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this
254d39c89fSIngo Molnar  * and return success when trace point kvm_s390_create_vm
2653fe307dSThomas Richter  * exists. Otherwise this test always fails.
2753fe307dSThomas Richter  */
2853fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void)
2953fe307dSThomas Richter {
3053fe307dSThomas Richter 	char *eventfile;
3153fe307dSThomas Richter 	bool rc = false;
3253fe307dSThomas Richter 
3353fe307dSThomas Richter 	eventfile = get_events_file("kvm-s390");
3453fe307dSThomas Richter 
3553fe307dSThomas Richter 	if (eventfile) {
3653fe307dSThomas Richter 		DIR *mydir = opendir(eventfile);
3753fe307dSThomas Richter 
3853fe307dSThomas Richter 		if (mydir) {
3953fe307dSThomas Richter 			rc = true;
4053fe307dSThomas Richter 			closedir(mydir);
4153fe307dSThomas Richter 		}
4253fe307dSThomas Richter 		put_events_file(eventfile);
4353fe307dSThomas Richter 	}
4453fe307dSThomas Richter 
4553fe307dSThomas Richter 	return rc;
4653fe307dSThomas Richter }
4753fe307dSThomas Richter #endif
4853fe307dSThomas Richter 
4963503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist)
50945aea22SJiri Olsa {
51515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
52945aea22SJiri Olsa 
536484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
543a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups);
551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
56945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
571fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
597741e03eSIan Rogers 	return TEST_OK;
60945aea22SJiri Olsa }
61945aea22SJiri Olsa 
6263503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist)
63945aea22SJiri Olsa {
6432dcd021SJiri Olsa 	struct evsel *evsel;
65945aea22SJiri Olsa 
666484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
673a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups);
68945aea22SJiri Olsa 
69e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
70945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong type",
711fc632ceSJiri Olsa 			PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
72945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_type",
731fc632ceSJiri Olsa 			PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
74945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_period",
751fc632ceSJiri Olsa 			1 == evsel->core.attr.sample_period);
76945aea22SJiri Olsa 	}
777741e03eSIan Rogers 	return TEST_OK;
78945aea22SJiri Olsa }
79945aea22SJiri Olsa 
8063503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist)
81945aea22SJiri Olsa {
82515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
83945aea22SJiri Olsa 
846484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
877741e03eSIan Rogers 	return TEST_OK;
88945aea22SJiri Olsa }
89945aea22SJiri Olsa 
9063503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
91945aea22SJiri Olsa {
92515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
93945aea22SJiri Olsa 
946484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
977741e03eSIan Rogers 	return TEST_OK;
98945aea22SJiri Olsa }
99945aea22SJiri Olsa 
10063503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist)
101945aea22SJiri Olsa {
102515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
103945aea22SJiri Olsa 
1046484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
106945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1071fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
1087741e03eSIan Rogers 	return TEST_OK;
109945aea22SJiri Olsa }
110945aea22SJiri Olsa 
11163503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
112945aea22SJiri Olsa {
113515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
114945aea22SJiri Olsa 
1156484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
117945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1181fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
119ee4c7588SJiri Olsa 	/*
12078e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
121ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
122ee4c7588SJiri Olsa 	 */
123945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong period",
1241fc632ceSJiri Olsa 			0 == evsel->core.attr.sample_period);
125945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1",
1261fc632ceSJiri Olsa 			0 == evsel->core.attr.config1);
127945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2",
1281fc632ceSJiri Olsa 			1 == evsel->core.attr.config2);
1297741e03eSIan Rogers 	return TEST_OK;
130945aea22SJiri Olsa }
131945aea22SJiri Olsa 
13263503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
133945aea22SJiri Olsa {
134515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
135945aea22SJiri Olsa 
1366484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
138945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
1391fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
1407741e03eSIan Rogers 	return TEST_OK;
141945aea22SJiri Olsa }
142945aea22SJiri Olsa 
14363503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
144945aea22SJiri Olsa {
145515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
146945aea22SJiri Olsa 
1476484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
1491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->core.attr.config);
1507741e03eSIan Rogers 	return TEST_OK;
151945aea22SJiri Olsa }
152945aea22SJiri Olsa 
15363503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
154945aea22SJiri Olsa {
155515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
156945aea22SJiri Olsa 
1576484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
160945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
1611fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
162945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
1631fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1647741e03eSIan Rogers 	return TEST_OK;
165945aea22SJiri Olsa }
166945aea22SJiri Olsa 
16763503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist)
168945aea22SJiri Olsa {
169515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
170945aea22SJiri Olsa 
1716484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
174945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1751fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
1761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
1777741e03eSIan Rogers 	return TEST_OK;
178945aea22SJiri Olsa }
179945aea22SJiri Olsa 
18063503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
181945aea22SJiri Olsa {
182515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
183945aea22SJiri Olsa 
1846484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
185945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
1861fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
1871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
188945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
1891fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
190945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
1911fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
1927741e03eSIan Rogers 	return TEST_OK;
193945aea22SJiri Olsa }
194945aea22SJiri Olsa 
19563503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
196945aea22SJiri Olsa {
197515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
198945aea22SJiri Olsa 
1996484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
200945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2011fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
203945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2041fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
205945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2061fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2077741e03eSIan Rogers 	return TEST_OK;
208945aea22SJiri Olsa }
209945aea22SJiri Olsa 
21063503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
211945aea22SJiri Olsa {
212515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
213945aea22SJiri Olsa 
2146484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
215945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2161fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
218945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2191fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
220945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2211fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2227741e03eSIan Rogers 	return TEST_OK;
223945aea22SJiri Olsa }
224945aea22SJiri Olsa 
22563503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
226945aea22SJiri Olsa {
227515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
228945aea22SJiri Olsa 
2291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
233945aea22SJiri Olsa 
234945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
235945aea22SJiri Olsa }
236945aea22SJiri Olsa 
237945aea22SJiri Olsa static int
23863503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
239945aea22SJiri Olsa {
24032dcd021SJiri Olsa 	struct evsel *evsel;
241945aea22SJiri Olsa 
2426484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
243945aea22SJiri Olsa 
244e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
245945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user",
2461fc632ceSJiri Olsa 				!evsel->core.attr.exclude_user);
247945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel",
2481fc632ceSJiri Olsa 				evsel->core.attr.exclude_kernel);
2491fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2501fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
251945aea22SJiri Olsa 	}
252945aea22SJiri Olsa 
253945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
254945aea22SJiri Olsa }
255945aea22SJiri Olsa 
25663503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
257945aea22SJiri Olsa {
258515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
259945aea22SJiri Olsa 
2601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
264945aea22SJiri Olsa 
265945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
266945aea22SJiri Olsa }
267945aea22SJiri Olsa 
26863503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
269945aea22SJiri Olsa {
270515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
271945aea22SJiri Olsa 
2721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
276945aea22SJiri Olsa 
277945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
278945aea22SJiri Olsa }
279945aea22SJiri Olsa 
28063503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
281945aea22SJiri Olsa {
282515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
283945aea22SJiri Olsa 
2841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
2861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
2871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
288945aea22SJiri Olsa 
289945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
290945aea22SJiri Olsa }
291945aea22SJiri Olsa 
29263503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
293945aea22SJiri Olsa {
294515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
295945aea22SJiri Olsa 
2961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
2971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
298945aea22SJiri Olsa 
299945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
300945aea22SJiri Olsa }
301945aea22SJiri Olsa 
30263503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
303945aea22SJiri Olsa {
304515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
305945aea22SJiri Olsa 
3061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
3071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
308945aea22SJiri Olsa 
309945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
310945aea22SJiri Olsa }
311945aea22SJiri Olsa 
31263503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
313945aea22SJiri Olsa {
314515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
315945aea22SJiri Olsa 
3161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
320945aea22SJiri Olsa 
321945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
322945aea22SJiri Olsa }
323945aea22SJiri Olsa 
32463503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
325945aea22SJiri Olsa {
326515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
327945aea22SJiri Olsa 
3281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
332945aea22SJiri Olsa 
333945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
334945aea22SJiri Olsa }
335945aea22SJiri Olsa 
33663503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
337a1e12da4SJiri Olsa {
338515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
339a1e12da4SJiri Olsa 
3401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
3431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
347a1e12da4SJiri Olsa 
348a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
349a1e12da4SJiri Olsa }
350a1e12da4SJiri Olsa 
35163503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
352a1e12da4SJiri Olsa {
353515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
354a1e12da4SJiri Olsa 
3551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
3581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
362a1e12da4SJiri Olsa 
363a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
364a1e12da4SJiri Olsa }
365a1e12da4SJiri Olsa 
36663503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
367945aea22SJiri Olsa {
368515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
369945aea22SJiri Olsa 
370945aea22SJiri Olsa 
3711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
375945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3768ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:u"));
377945aea22SJiri Olsa 
378945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
379945aea22SJiri Olsa }
380945aea22SJiri Olsa 
38163503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
382945aea22SJiri Olsa {
383515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
384945aea22SJiri Olsa 
3851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
389945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
3908ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:x:k"));
391945aea22SJiri Olsa 
392945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
393945aea22SJiri Olsa }
394945aea22SJiri Olsa 
39563503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
396945aea22SJiri Olsa {
397515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
398945aea22SJiri Olsa 
3991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
403945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4048ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:r:hp"));
405945aea22SJiri Olsa 
406945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
407945aea22SJiri Olsa }
408945aea22SJiri Olsa 
40963503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
410945aea22SJiri Olsa {
411515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
412945aea22SJiri Olsa 
4131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
417945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4188ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:w:up"));
419945aea22SJiri Olsa 
420945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
421945aea22SJiri Olsa }
422945aea22SJiri Olsa 
42363503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
424945aea22SJiri Olsa {
425515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
426945aea22SJiri Olsa 
4271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
431945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4328ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:rw:kp"));
433945aea22SJiri Olsa 
434945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
435945aea22SJiri Olsa }
436945aea22SJiri Olsa 
43763503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
438945aea22SJiri Olsa {
439945aea22SJiri Olsa 
440515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
441945aea22SJiri Olsa 
4426484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
4431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",    10 == evsel->core.attr.config);
4451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
4461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
447ee4c7588SJiri Olsa 	/*
44878e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
449ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
450ee4c7588SJiri Olsa 	 */
4511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
452945aea22SJiri Olsa 
4537741e03eSIan Rogers 	return TEST_OK;
454945aea22SJiri Olsa }
455945aea22SJiri Olsa 
45663503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
457945aea22SJiri Olsa {
458515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
459945aea22SJiri Olsa 
4606484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
461945aea22SJiri Olsa 
462945aea22SJiri Olsa 	/* r1 */
4631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
4661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
4671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
471945aea22SJiri Olsa 
47243f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
473e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
475945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
4761fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
4771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
4781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
482945aea22SJiri Olsa 
483945aea22SJiri Olsa 	/* 1:1:hp */
484e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
4851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
4861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->core.attr.config);
4871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
491945aea22SJiri Olsa 
4927741e03eSIan Rogers 	return TEST_OK;
493945aea22SJiri Olsa }
494945aea22SJiri Olsa 
49563503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
496945aea22SJiri Olsa {
497515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
498945aea22SJiri Olsa 
499945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
5006484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
5038ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
504945aea22SJiri Olsa 
505945aea22SJiri Olsa 	/* cpu/config=2/u" */
506e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5076484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->core.attr.config);
510945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
5118ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
512945aea22SJiri Olsa 
5137741e03eSIan Rogers 	return TEST_OK;
514945aea22SJiri Olsa }
515945aea22SJiri Olsa 
51663503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
51771ef150eSKan Liang {
518515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
51971ef150eSKan Liang 
52071ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
5216484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->core.attr.config);
52471ef150eSKan Liang 	/*
52578e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within 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/ */
533e470daeaSArnaldo Carvalho de Melo 	evsel = 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 	/*
53778e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
53871ef150eSKan Liang 	 * while this test executes only parse events method.
53971ef150eSKan Liang 	 */
5401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
54127de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
54371ef150eSKan Liang 
5447741e03eSIan Rogers 	return TEST_OK;
54571ef150eSKan Liang }
54671ef150eSKan Liang 
54763503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
548945aea22SJiri Olsa {
549515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
550945aea22SJiri Olsa 
5516484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
5521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
553945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
5541fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
555945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
5561fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5600997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
561945aea22SJiri Olsa 
5627741e03eSIan Rogers 	return TEST_OK;
563945aea22SJiri Olsa }
564945aea22SJiri Olsa 
565ffe59788SKan Liang 
56663503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
567ffe59788SKan Liang {
568515dbe48SJiri Olsa 	struct evsel *evsel = 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);
5790997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
580ffe59788SKan Liang 
581ffe59788SKan Liang 	/* cpu/pmu-event/u*/
582e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5836484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
585ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
5861fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
587ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
5881fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
5891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
5911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
5920997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned);
593ffe59788SKan Liang 
5947741e03eSIan Rogers 	return TEST_OK;
595ffe59788SKan Liang }
596ffe59788SKan Liang 
597945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
598945aea22SJiri Olsa {
5996cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
600945aea22SJiri Olsa 
601945aea22SJiri Olsa 	/* config=10 */
6026cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
603945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
604945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
605945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
606945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
607945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
6084f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
609945aea22SJiri Olsa 
610945aea22SJiri Olsa 	/* config1 */
6116cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
612945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
613945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
614945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
615945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
616945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6174f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1"));
618945aea22SJiri Olsa 
619945aea22SJiri Olsa 	/* config2=3 */
6206cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
621945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
622945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
623945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
624945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
625945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
6264f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2"));
627945aea22SJiri Olsa 
628945aea22SJiri Olsa 	/* umask=1*/
6296cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
630945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
631945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
632945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
633945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
634945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
635945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
636945aea22SJiri Olsa 
6374929e95aSJiri Olsa 	/*
6384929e95aSJiri Olsa 	 * read
6394929e95aSJiri Olsa 	 *
6404929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
6414929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
6424929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
6434929e95aSJiri Olsa 	 */
6444929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6454929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6464929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
6474929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6484929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6494929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6504929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "read"));
6514929e95aSJiri Olsa 
6524929e95aSJiri Olsa 	/*
6534929e95aSJiri Olsa 	 * r0xead
6544929e95aSJiri Olsa 	 *
6554929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
6564929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
6574929e95aSJiri Olsa 	 */
6584929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
6594929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
6604929e95aSJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
6614929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
6624929e95aSJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
6634929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 0xead);
6644f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
6657741e03eSIan Rogers 	return TEST_OK;
666945aea22SJiri Olsa }
667945aea22SJiri Olsa 
66863503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
669945aea22SJiri Olsa {
67032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
671945aea22SJiri Olsa 
6726484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6733a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
674945aea22SJiri Olsa 
675945aea22SJiri Olsa 	/* instructions:k */
676515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
6771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
678945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6791fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
6801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
6811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
6821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
6841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
6851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
686c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
6875643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
6882bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
689a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
690945aea22SJiri Olsa 
691945aea22SJiri Olsa 	/* cycles:upp */
692e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
694945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
6951fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
6961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
6971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
6981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
699945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
7001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
703fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7042bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
705a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
706945aea22SJiri Olsa 
7077741e03eSIan Rogers 	return TEST_OK;
708945aea22SJiri Olsa }
709945aea22SJiri Olsa 
71063503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
711945aea22SJiri Olsa {
71232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
713945aea22SJiri Olsa 
7146484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
7153a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
716945aea22SJiri Olsa 
717945aea22SJiri Olsa 	/* faults + :ku modifier */
718515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
720945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7211fc632ceSJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->core.attr.config);
7221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
725943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
728c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7295643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7302bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
731a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
732945aea22SJiri Olsa 
733945aea22SJiri Olsa 	/* cache-references + :u modifier */
734e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
736945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7371fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_REFERENCES == evsel->core.attr.config);
7381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
744fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7452bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
746a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
747945aea22SJiri Olsa 
748945aea22SJiri Olsa 	/* cycles:k */
749e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
751945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7521fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
759c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
760a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
761945aea22SJiri Olsa 
7627741e03eSIan Rogers 	return TEST_OK;
763945aea22SJiri Olsa }
764945aea22SJiri Olsa 
76563503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
766945aea22SJiri Olsa {
76732dcd021SJiri Olsa 	struct evsel *evsel, *leader;
768945aea22SJiri Olsa 
7696484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
7703a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups);
771945aea22SJiri Olsa 
77243f322b4SRiku Voipio 	/* group1 syscalls:sys_enter_openat:H */
773515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
775945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
7761fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
7771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
7781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
7811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
784c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
785945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
786945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
7875643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7882bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
789a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
790945aea22SJiri Olsa 
791945aea22SJiri Olsa 	/* group1 cycles:kppp */
792e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
794945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
7951fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
7961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
799945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3);
803fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
804945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
8052bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
806a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
807945aea22SJiri Olsa 
808945aea22SJiri Olsa 	/* group2 cycles + G modifier */
809e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
8101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
811945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8121fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
819c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
820945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
821945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
8225643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8232bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
824a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
825945aea22SJiri Olsa 
826945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
827e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
8291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 3 == evsel->core.attr.config);
8301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
836fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8372bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
838a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
839945aea22SJiri Olsa 
840945aea22SJiri Olsa 	/* instructions:u */
841e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
843945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8441fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
848943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
851c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
852a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
853945aea22SJiri Olsa 
8547741e03eSIan Rogers 	return TEST_OK;
855945aea22SJiri Olsa }
856945aea22SJiri Olsa 
85763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
858945aea22SJiri Olsa {
85932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
860945aea22SJiri Olsa 
8616484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
8623a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
863945aea22SJiri Olsa 
864945aea22SJiri Olsa 	/* cycles:u + p */
865515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
8661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
867945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8681fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
8691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
872945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
876945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
877c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
8785643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8792bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
880a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
881945aea22SJiri Olsa 
882945aea22SJiri Olsa 	/* instructions:kp + p */
883e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
885945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
8861fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
8871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
890945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
894fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8952bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
896a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
897945aea22SJiri Olsa 
8987741e03eSIan Rogers 	return TEST_OK;
899945aea22SJiri Olsa }
900945aea22SJiri Olsa 
90163503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
902945aea22SJiri Olsa {
90332dcd021SJiri Olsa 	struct evsel *evsel, *leader;
904945aea22SJiri Olsa 
9056484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
9063a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups);
907945aea22SJiri Olsa 
908945aea22SJiri Olsa 	/* cycles + G */
909515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
911945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9121fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
919945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
920c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9215643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9222bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
923a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
924945aea22SJiri Olsa 
925945aea22SJiri Olsa 	/* instructions + G */
926e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
928945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9291fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
936fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9372bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
938a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
939945aea22SJiri Olsa 
940945aea22SJiri Olsa 	/* cycles:G */
941e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
9421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
943945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9441fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
951945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
952c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9535643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9542bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
955a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
956945aea22SJiri Olsa 
957945aea22SJiri Olsa 	/* instructions:G */
958e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
960945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9611fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
9621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
968fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9692bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
970945aea22SJiri Olsa 
971945aea22SJiri Olsa 	/* cycles */
972e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
974945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9751fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
982c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
983945aea22SJiri Olsa 
9847741e03eSIan Rogers 	return TEST_OK;
985945aea22SJiri Olsa }
986945aea22SJiri Olsa 
98763503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
9885a30a99fSJiri Olsa {
98932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
9905a30a99fSJiri Olsa 
9916484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
9923a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
9935a30a99fSJiri Olsa 
9945a30a99fSJiri Olsa 	/* cycles + :H group modifier */
995515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9975a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
9981fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
9991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10055a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1006c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10075643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10082bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10095a30a99fSJiri Olsa 
10105a30a99fSJiri Olsa 	/* cache-misses:G + :H group modifier */
1011e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10135a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10141fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1021fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10222bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10235a30a99fSJiri Olsa 
10247741e03eSIan Rogers 	return TEST_OK;
10255a30a99fSJiri Olsa }
10265a30a99fSJiri Olsa 
102763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
10285a30a99fSJiri Olsa {
102932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10305a30a99fSJiri Olsa 
10316484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10323a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
10335a30a99fSJiri Olsa 
10345a30a99fSJiri Olsa 	/* cycles + :G group modifier */
1035515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10375a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10381fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10455a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1046c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10475643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10482bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10495a30a99fSJiri Olsa 
10505a30a99fSJiri Olsa 	/* cache-misses:H + :G group modifier */
1051e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10535a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10541fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1061fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10622bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10635a30a99fSJiri Olsa 
10647741e03eSIan Rogers 	return TEST_OK;
10655a30a99fSJiri Olsa }
10665a30a99fSJiri Olsa 
106763503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
10685a30a99fSJiri Olsa {
106932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10705a30a99fSJiri Olsa 
10716484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10723a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
10735a30a99fSJiri Olsa 
10745a30a99fSJiri Olsa 	/* cycles:G + :u group modifier */
1075515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10775a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10781fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
10791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10855a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1086c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10875643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10882bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10895a30a99fSJiri Olsa 
10905a30a99fSJiri Olsa 	/* cache-misses:H + :u group modifier */
1091e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10935a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
10941fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
10951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
10981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1101fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11022bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11035a30a99fSJiri Olsa 
11047741e03eSIan Rogers 	return TEST_OK;
11055a30a99fSJiri Olsa }
11065a30a99fSJiri Olsa 
110763503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
11085a30a99fSJiri Olsa {
110932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
11105a30a99fSJiri Olsa 
11116484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
11123a683120SJiri Olsa 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups);
11135a30a99fSJiri Olsa 
11145a30a99fSJiri Olsa 	/* cycles:G + :uG group modifier */
1115515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11175a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11181fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11255a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1126c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11275643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11282bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11295a30a99fSJiri Olsa 
11305a30a99fSJiri Olsa 	/* cache-misses:H + :uG group modifier */
1131e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11335a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11341fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1141fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11422bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11435a30a99fSJiri Olsa 
11447741e03eSIan Rogers 	return TEST_OK;
11455a30a99fSJiri Olsa }
11465a30a99fSJiri Olsa 
114763503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1148a9f93f97SJiri Olsa {
114932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1150a9f93f97SJiri Olsa 
11516484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1152a9f93f97SJiri Olsa 
1153a9f93f97SJiri Olsa 	/* cycles - sampling group leader */
1154515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1156a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11571fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
11581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1164a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1165fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1166a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1167a9f93f97SJiri Olsa 
1168a9f93f97SJiri Olsa 	/* cache-misses - not sampling */
1169e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1171a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11721fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
11731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1179fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1180a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1181a9f93f97SJiri Olsa 
1182a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1183e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1185a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
11861fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
11871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1193a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1194fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1195a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1196a9f93f97SJiri Olsa 
11977741e03eSIan Rogers 	return TEST_OK;
1198a9f93f97SJiri Olsa }
1199a9f93f97SJiri Olsa 
120063503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1201a9f93f97SJiri Olsa {
120232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1203a9f93f97SJiri Olsa 
12046484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
1205a9f93f97SJiri Olsa 
1206a9f93f97SJiri Olsa 	/* instructions - sampling group leader */
1207515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1209a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12101fc632ceSJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->core.attr.config);
12111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1217a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1218fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1219a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1220a9f93f97SJiri Olsa 
1221a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1222e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1224a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
12251fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1232a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1233fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1234a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1235a9f93f97SJiri Olsa 
12367741e03eSIan Rogers 	return TEST_OK;
1237a9f93f97SJiri Olsa }
1238a9f93f97SJiri Olsa 
123963503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1240c9ee780fSMichael Ellerman {
1241515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1242c9ee780fSMichael Ellerman 
12431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1248c9ee780fSMichael Ellerman 
1249c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1250c9ee780fSMichael Ellerman }
1251c9ee780fSMichael Ellerman 
125263503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1253c9ee780fSMichael Ellerman {
125432dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1255c9ee780fSMichael Ellerman 
12566484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1257c9ee780fSMichael Ellerman 
1258c9ee780fSMichael Ellerman 	/* cycles - group leader */
1259515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1261c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12621fc632ceSJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
1263c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1264fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1266c9ee780fSMichael Ellerman 
1267c9ee780fSMichael Ellerman 	/* cache-misses - can not be pinned, but will go on with the leader */
1268e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
1270c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12711fc632ceSJiri Olsa 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
12721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1273c9ee780fSMichael Ellerman 
1274c9ee780fSMichael Ellerman 	/* branch-misses - ditto */
1275e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
1276c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong config",
12771fc632ceSJiri Olsa 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
12781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1279c9ee780fSMichael Ellerman 
12807741e03eSIan Rogers 	return TEST_OK;
1281c9ee780fSMichael Ellerman }
1282c9ee780fSMichael Ellerman 
12830997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist)
12840997a266SAndi Kleen {
12850997a266SAndi Kleen 	struct evsel *evsel = evlist__first(evlist);
12860997a266SAndi Kleen 
12870997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12880997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12890997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12900997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12910997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
12920997a266SAndi Kleen 
12930997a266SAndi Kleen 	return test__checkevent_symbolic_name(evlist);
12940997a266SAndi Kleen }
12950997a266SAndi Kleen 
12960997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist)
12970997a266SAndi Kleen {
12980997a266SAndi Kleen 	struct evsel *evsel, *leader;
12990997a266SAndi Kleen 
13000997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
13010997a266SAndi Kleen 
13020997a266SAndi Kleen 	/* cycles - group leader */
13030997a266SAndi Kleen 	evsel = leader = evlist__first(evlist);
13040997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13050997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13060997a266SAndi Kleen 			PERF_COUNT_HW_CPU_CYCLES == evsel->core.attr.config);
13070997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1308fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13090997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13100997a266SAndi Kleen 
13110997a266SAndi Kleen 	/* cache-misses - can not be pinned, but will go on with the leader */
13120997a266SAndi Kleen 	evsel = evsel__next(evsel);
13130997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13140997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13150997a266SAndi Kleen 			PERF_COUNT_HW_CACHE_MISSES == evsel->core.attr.config);
13160997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13170997a266SAndi Kleen 
13180997a266SAndi Kleen 	/* branch-misses - ditto */
13190997a266SAndi Kleen 	evsel = evsel__next(evsel);
13200997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong config",
13210997a266SAndi Kleen 			PERF_COUNT_HW_BRANCH_MISSES == evsel->core.attr.config);
13220997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13230997a266SAndi Kleen 
13247741e03eSIan Rogers 	return TEST_OK;
13250997a266SAndi Kleen }
132663503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1327ec32398cSJacob Shin {
1328515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1329ec32398cSJacob Shin 
13306484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1333ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
13341fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1335ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
13361fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1337ec32398cSJacob Shin 
13387741e03eSIan Rogers 	return TEST_OK;
1339ec32398cSJacob Shin }
1340ec32398cSJacob Shin 
134163503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1342ec32398cSJacob Shin {
1343515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1344ec32398cSJacob Shin 
13456484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->core.attr.config);
1348ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
13491fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1350ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
13511fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1352ec32398cSJacob Shin 
13537741e03eSIan Rogers 	return TEST_OK;
1354ec32398cSJacob Shin }
1355ec32398cSJacob Shin 
1356ec32398cSJacob Shin static int
135763503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1358ec32398cSJacob Shin {
1359515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1360ec32398cSJacob Shin 
13611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1365ec32398cSJacob Shin 
1366ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1367ec32398cSJacob Shin }
1368ec32398cSJacob Shin 
136963503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1370ddd83c97SJiri Olsa {
1371515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1372ddd83c97SJiri Olsa 
13736484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
13741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1375ddd83c97SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
13761fc632ceSJiri Olsa 			PERF_COUNT_SW_TASK_CLOCK == evsel->core.attr.config);
13777741e03eSIan Rogers 	return TEST_OK;
1378ddd83c97SJiri Olsa }
1379ddd83c97SJiri Olsa 
138063503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
138110bf358aSWang Nan {
1382515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
138310bf358aSWang Nan 
138410bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0);
13857741e03eSIan Rogers 	return TEST_OK;
138610bf358aSWang Nan }
138710bf358aSWang Nan 
138863503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
138910bf358aSWang Nan {
1390515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
139110bf358aSWang Nan 
139210bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0);
13937741e03eSIan Rogers 	return TEST_OK;
139410bf358aSWang Nan }
139510bf358aSWang Nan 
139663503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
139710bf358aSWang Nan {
1398515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
139910bf358aSWang Nan 
140010bf358aSWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0);
14017741e03eSIan Rogers 	return TEST_OK;
140210bf358aSWang Nan }
140310bf358aSWang Nan 
140463503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
140543d0b978SWang Nan {
1406515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
140743d0b978SWang Nan 
140843d0b978SWang Nan 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0);
14097741e03eSIan Rogers 	return TEST_OK;
141043d0b978SWang Nan }
141110bf358aSWang Nan 
141216ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
141316ddcfbfSJiri Olsa {
141416ddcfbfSJiri Olsa 	return !!perf_pmu__find("intel_pt");
141516ddcfbfSJiri Olsa }
141616ddcfbfSJiri Olsa 
141763503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1418b3f58c8dSArnaldo Carvalho de Melo {
1419515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1420b3f58c8dSArnaldo Carvalho de Melo 
1421b3f58c8dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0);
14227741e03eSIan Rogers 	return TEST_OK;
1423b3f58c8dSArnaldo Carvalho de Melo }
1424b3f58c8dSArnaldo Carvalho de Melo 
142563503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
142606dc5bf2SAlexey Budankov {
1427515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
142806dc5bf2SAlexey Budankov 
142906dc5bf2SAlexey Budankov 	TEST_ASSERT_VAL("wrong complex name parsing", strcmp(evsel->name, "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks") == 0);
14307741e03eSIan Rogers 	return TEST_OK;
143106dc5bf2SAlexey Budankov }
143206dc5bf2SAlexey Budankov 
14333a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
14343a6c51e4SJiri Olsa {
14353a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
14363a6c51e4SJiri Olsa 
14373a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
14383a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
14393a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
14407741e03eSIan Rogers 	return TEST_OK;
14413a6c51e4SJiri Olsa }
14423a6c51e4SJiri Olsa 
144363503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1444714a92d8SJiri Olsa {
1445515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1446714a92d8SJiri Olsa 
14471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14507741e03eSIan Rogers 	return TEST_OK;
1451714a92d8SJiri Olsa }
1452714a92d8SJiri Olsa 
145363503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1454714a92d8SJiri Olsa {
1455515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1456714a92d8SJiri Olsa 
14571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config", evsel->core.attr.config == PERF_COUNT_HW_CPU_CYCLES);
14591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
14607741e03eSIan Rogers 	return TEST_OK;
1461714a92d8SJiri Olsa }
1462714a92d8SJiri Olsa 
146382ce75d9SJiri Olsa static int count_tracepoints(void)
146482ce75d9SJiri Olsa {
146582ce75d9SJiri Olsa 	struct dirent *events_ent;
146682ce75d9SJiri Olsa 	DIR *events_dir;
146782ce75d9SJiri Olsa 	int cnt = 0;
146882ce75d9SJiri Olsa 
14697014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
147082ce75d9SJiri Olsa 
147182ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
147282ce75d9SJiri Olsa 
147382ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
147425a7d914SArnaldo Carvalho de Melo 		char *sys_path;
147582ce75d9SJiri Olsa 		struct dirent *sys_ent;
147682ce75d9SJiri Olsa 		DIR *sys_dir;
147782ce75d9SJiri Olsa 
147882ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
147982ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
148082ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
148182ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
148282ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
148382ce75d9SJiri Olsa 			continue;
148482ce75d9SJiri Olsa 
148525a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
148625a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
148782ce75d9SJiri Olsa 
148882ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
148982ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
149082ce75d9SJiri Olsa 
149182ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
149282ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
149382ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
149482ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
149582ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
149682ce75d9SJiri Olsa 				continue;
149782ce75d9SJiri Olsa 
149882ce75d9SJiri Olsa 			cnt++;
149982ce75d9SJiri Olsa 		}
150082ce75d9SJiri Olsa 
150182ce75d9SJiri Olsa 		closedir(sys_dir);
150225a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
150382ce75d9SJiri Olsa 	}
150482ce75d9SJiri Olsa 
150582ce75d9SJiri Olsa 	closedir(events_dir);
150682ce75d9SJiri Olsa 	return cnt;
150782ce75d9SJiri Olsa }
150882ce75d9SJiri Olsa 
150963503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
151082ce75d9SJiri Olsa {
151182ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
15126484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
151382ce75d9SJiri Olsa 
151482ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
151582ce75d9SJiri Olsa }
151682ce75d9SJiri Olsa 
15172541cb63SJin Yao static int test__hybrid_hw_event_with_pmu(struct evlist *evlist)
15182541cb63SJin Yao {
15192541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
15202541cb63SJin Yao 
15212541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
15222541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15232541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
15247741e03eSIan Rogers 	return TEST_OK;
15252541cb63SJin Yao }
15262541cb63SJin Yao 
15272541cb63SJin Yao static int test__hybrid_hw_group_event(struct evlist *evlist)
15282541cb63SJin Yao {
15292541cb63SJin Yao 	struct evsel *evsel, *leader;
15302541cb63SJin Yao 
15312541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15322541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15332541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15342541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1535fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15362541cb63SJin Yao 
15372541cb63SJin Yao 	evsel = evsel__next(evsel);
15382541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15392541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config);
1540fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15417741e03eSIan Rogers 	return TEST_OK;
15422541cb63SJin Yao }
15432541cb63SJin Yao 
15442541cb63SJin Yao static int test__hybrid_sw_hw_group_event(struct evlist *evlist)
15452541cb63SJin Yao {
15462541cb63SJin Yao 	struct evsel *evsel, *leader;
15472541cb63SJin Yao 
15482541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15492541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15502541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1551fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15522541cb63SJin Yao 
15532541cb63SJin Yao 	evsel = evsel__next(evsel);
15542541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15552541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1556fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15577741e03eSIan Rogers 	return TEST_OK;
15582541cb63SJin Yao }
15592541cb63SJin Yao 
15602541cb63SJin Yao static int test__hybrid_hw_sw_group_event(struct evlist *evlist)
15612541cb63SJin Yao {
15622541cb63SJin Yao 	struct evsel *evsel, *leader;
15632541cb63SJin Yao 
15642541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15652541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15662541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15672541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1568fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15692541cb63SJin Yao 
15702541cb63SJin Yao 	evsel = evsel__next(evsel);
15712541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1572fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15737741e03eSIan Rogers 	return TEST_OK;
15742541cb63SJin Yao }
15752541cb63SJin Yao 
15762541cb63SJin Yao static int test__hybrid_group_modifier1(struct evlist *evlist)
15772541cb63SJin Yao {
15782541cb63SJin Yao 	struct evsel *evsel, *leader;
15792541cb63SJin Yao 
15802541cb63SJin Yao 	evsel = leader = evlist__first(evlist);
15812541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
15822541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15832541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x3c == evsel->core.attr.config);
1584fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15852541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
15862541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
15872541cb63SJin Yao 
15882541cb63SJin Yao 	evsel = evsel__next(evsel);
15892541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
15902541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0xc0 == evsel->core.attr.config);
1591fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
15922541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
15932541cb63SJin Yao 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
15947741e03eSIan Rogers 	return TEST_OK;
15952541cb63SJin Yao }
15962541cb63SJin Yao 
15972541cb63SJin Yao static int test__hybrid_raw1(struct evlist *evlist)
15982541cb63SJin Yao {
15992541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16002541cb63SJin Yao 
1601490e9a8fSJin Yao 	if (!perf_pmu__hybrid_mounted("cpu_atom")) {
1602490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1603490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
1604490e9a8fSJin Yao 		TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16057741e03eSIan Rogers 		return TEST_OK;
1606490e9a8fSJin Yao 	}
1607490e9a8fSJin Yao 
16082541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
16092541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16102541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16112541cb63SJin Yao 
16122541cb63SJin Yao 	/* The type of second event is randome value */
16132541cb63SJin Yao 	evsel = evsel__next(evsel);
16142541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16157741e03eSIan Rogers 	return TEST_OK;
16162541cb63SJin Yao }
16172541cb63SJin Yao 
16182541cb63SJin Yao static int test__hybrid_raw2(struct evlist *evlist)
16192541cb63SJin Yao {
16202541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16212541cb63SJin Yao 
16222541cb63SJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16232541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
16242541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->core.attr.config);
16257741e03eSIan Rogers 	return TEST_OK;
16262541cb63SJin Yao }
16272541cb63SJin Yao 
16282541cb63SJin Yao static int test__hybrid_cache_event(struct evlist *evlist)
16292541cb63SJin Yao {
16302541cb63SJin Yao 	struct evsel *evsel = evlist__first(evlist);
16312541cb63SJin Yao 
1632490e9a8fSJin Yao 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16332541cb63SJin Yao 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->core.attr.type);
16342541cb63SJin Yao 	TEST_ASSERT_VAL("wrong config", 0x2 == (evsel->core.attr.config & 0xffffffff));
16357741e03eSIan Rogers 	return TEST_OK;
16362541cb63SJin Yao }
16372541cb63SJin Yao 
163823b6339bSArnaldo Carvalho de Melo struct evlist_test {
1639945aea22SJiri Olsa 	const char *name;
164016ddcfbfSJiri Olsa 	bool (*valid)(void);
164163503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1642945aea22SJiri Olsa };
1643945aea22SJiri Olsa 
16448252e791SIan Rogers static const struct evlist_test test__events[] = {
1645615b8f99SAlexander Yarygin 	{
164643f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1647945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
16488252e791SIan Rogers 		/* 0 */
1649945aea22SJiri Olsa 	},
1650615b8f99SAlexander Yarygin 	{
1651945aea22SJiri Olsa 		.name  = "syscalls:*",
1652945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
16538252e791SIan Rogers 		/* 1 */
1654945aea22SJiri Olsa 	},
1655615b8f99SAlexander Yarygin 	{
1656945aea22SJiri Olsa 		.name  = "r1a",
1657945aea22SJiri Olsa 		.check = test__checkevent_raw,
16588252e791SIan Rogers 		/* 2 */
1659945aea22SJiri Olsa 	},
1660615b8f99SAlexander Yarygin 	{
1661945aea22SJiri Olsa 		.name  = "1:1",
1662945aea22SJiri Olsa 		.check = test__checkevent_numeric,
16638252e791SIan Rogers 		/* 3 */
1664945aea22SJiri Olsa 	},
1665615b8f99SAlexander Yarygin 	{
1666945aea22SJiri Olsa 		.name  = "instructions",
1667945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
16688252e791SIan Rogers 		/* 4 */
1669945aea22SJiri Olsa 	},
1670615b8f99SAlexander Yarygin 	{
1671945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1672945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
16738252e791SIan Rogers 		/* 5 */
1674945aea22SJiri Olsa 	},
1675615b8f99SAlexander Yarygin 	{
1676945aea22SJiri Olsa 		.name  = "faults",
1677945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
16788252e791SIan Rogers 		/* 6 */
1679945aea22SJiri Olsa 	},
1680615b8f99SAlexander Yarygin 	{
1681945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1682945aea22SJiri Olsa 		.check = test__checkevent_genhw,
16838252e791SIan Rogers 		/* 7 */
1684945aea22SJiri Olsa 	},
1685615b8f99SAlexander Yarygin 	{
1686945aea22SJiri Olsa 		.name  = "mem:0",
1687945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
16888252e791SIan Rogers 		/* 8 */
1689945aea22SJiri Olsa 	},
1690615b8f99SAlexander Yarygin 	{
1691945aea22SJiri Olsa 		.name  = "mem:0:x",
1692945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
16938252e791SIan Rogers 		/* 9 */
1694945aea22SJiri Olsa 	},
1695615b8f99SAlexander Yarygin 	{
1696945aea22SJiri Olsa 		.name  = "mem:0:r",
1697945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
16988252e791SIan Rogers 		/* 0 */
1699945aea22SJiri Olsa 	},
1700615b8f99SAlexander Yarygin 	{
1701945aea22SJiri Olsa 		.name  = "mem:0:w",
1702945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
17038252e791SIan Rogers 		/* 1 */
1704945aea22SJiri Olsa 	},
1705615b8f99SAlexander Yarygin 	{
170643f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1707945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
17088252e791SIan Rogers 		/* 2 */
1709945aea22SJiri Olsa 	},
1710615b8f99SAlexander Yarygin 	{
1711945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1712945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
17138252e791SIan Rogers 		/* 3 */
1714945aea22SJiri Olsa 	},
1715615b8f99SAlexander Yarygin 	{
1716945aea22SJiri Olsa 		.name  = "r1a:kp",
1717945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
17188252e791SIan Rogers 		/* 4 */
1719945aea22SJiri Olsa 	},
1720615b8f99SAlexander Yarygin 	{
1721945aea22SJiri Olsa 		.name  = "1:1:hp",
1722945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
17238252e791SIan Rogers 		/* 5 */
1724945aea22SJiri Olsa 	},
1725615b8f99SAlexander Yarygin 	{
1726945aea22SJiri Olsa 		.name  = "instructions:h",
1727945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
17288252e791SIan Rogers 		/* 6 */
1729945aea22SJiri Olsa 	},
1730615b8f99SAlexander Yarygin 	{
1731945aea22SJiri Olsa 		.name  = "faults:u",
1732945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
17338252e791SIan Rogers 		/* 7 */
1734945aea22SJiri Olsa 	},
1735615b8f99SAlexander Yarygin 	{
1736945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1737945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
17388252e791SIan Rogers 		/* 8 */
1739945aea22SJiri Olsa 	},
1740615b8f99SAlexander Yarygin 	{
1741945aea22SJiri Olsa 		.name  = "mem:0:u",
1742945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
17438252e791SIan Rogers 		/* 9 */
1744945aea22SJiri Olsa 	},
1745615b8f99SAlexander Yarygin 	{
1746945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1747945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
17488252e791SIan Rogers 		/* 0 */
1749945aea22SJiri Olsa 	},
1750615b8f99SAlexander Yarygin 	{
1751945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1752945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
17538252e791SIan Rogers 		/* 1 */
1754945aea22SJiri Olsa 	},
1755615b8f99SAlexander Yarygin 	{
1756945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1757945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
17588252e791SIan Rogers 		/* 2 */
1759945aea22SJiri Olsa 	},
1760615b8f99SAlexander Yarygin 	{
176143f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1762945aea22SJiri Olsa 		.check = test__checkevent_list,
17638252e791SIan Rogers 		/* 3 */
1764945aea22SJiri Olsa 	},
1765615b8f99SAlexander Yarygin 	{
1766945aea22SJiri Olsa 		.name  = "instructions:G",
1767945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
17688252e791SIan Rogers 		/* 4 */
1769945aea22SJiri Olsa 	},
1770615b8f99SAlexander Yarygin 	{
1771945aea22SJiri Olsa 		.name  = "instructions:H",
1772945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
17738252e791SIan Rogers 		/* 5 */
1774945aea22SJiri Olsa 	},
1775615b8f99SAlexander Yarygin 	{
1776945aea22SJiri Olsa 		.name  = "mem:0:rw",
1777945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
17788252e791SIan Rogers 		/* 6 */
1779945aea22SJiri Olsa 	},
1780615b8f99SAlexander Yarygin 	{
1781945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1782945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
17838252e791SIan Rogers 		/* 7 */
1784945aea22SJiri Olsa 	},
1785615b8f99SAlexander Yarygin 	{
1786945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1787945aea22SJiri Olsa 		.check = test__group1,
17888252e791SIan Rogers 		/* 8 */
1789945aea22SJiri Olsa 	},
1790615b8f99SAlexander Yarygin 	{
1791945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1792945aea22SJiri Olsa 		.check = test__group2,
17938252e791SIan Rogers 		/* 9 */
1794945aea22SJiri Olsa 	},
1795615b8f99SAlexander Yarygin 	{
179643f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1797945aea22SJiri Olsa 		.check = test__group3,
17988252e791SIan Rogers 		/* 0 */
1799945aea22SJiri Olsa 	},
1800615b8f99SAlexander Yarygin 	{
1801945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1802945aea22SJiri Olsa 		.check = test__group4,
18038252e791SIan Rogers 		/* 1 */
1804945aea22SJiri Olsa 	},
1805615b8f99SAlexander Yarygin 	{
1806945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1807945aea22SJiri Olsa 		.check = test__group5,
18088252e791SIan Rogers 		/* 2 */
1809945aea22SJiri Olsa 	},
1810615b8f99SAlexander Yarygin 	{
181182ce75d9SJiri Olsa 		.name  = "*:*",
181282ce75d9SJiri Olsa 		.check = test__all_tracepoints,
18138252e791SIan Rogers 		/* 3 */
181482ce75d9SJiri Olsa 	},
1815615b8f99SAlexander Yarygin 	{
18165a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
18175a30a99fSJiri Olsa 		.check = test__group_gh1,
18188252e791SIan Rogers 		/* 4 */
18195a30a99fSJiri Olsa 	},
1820615b8f99SAlexander Yarygin 	{
18215a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
18225a30a99fSJiri Olsa 		.check = test__group_gh2,
18238252e791SIan Rogers 		/* 5 */
18245a30a99fSJiri Olsa 	},
1825615b8f99SAlexander Yarygin 	{
18265a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
18275a30a99fSJiri Olsa 		.check = test__group_gh3,
18288252e791SIan Rogers 		/* 6 */
18295a30a99fSJiri Olsa 	},
1830615b8f99SAlexander Yarygin 	{
18315a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
18325a30a99fSJiri Olsa 		.check = test__group_gh4,
18338252e791SIan Rogers 		/* 7 */
18345a30a99fSJiri Olsa 	},
1835615b8f99SAlexander Yarygin 	{
1836a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1837a9f93f97SJiri Olsa 		.check = test__leader_sample1,
18388252e791SIan Rogers 		/* 8 */
1839a9f93f97SJiri Olsa 	},
1840615b8f99SAlexander Yarygin 	{
1841a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1842a9f93f97SJiri Olsa 		.check = test__leader_sample2,
18438252e791SIan Rogers 		/* 9 */
1844a9f93f97SJiri Olsa 	},
1845615b8f99SAlexander Yarygin 	{
1846c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1847c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
18488252e791SIan Rogers 		/* 0 */
1849c9ee780fSMichael Ellerman 	},
1850615b8f99SAlexander Yarygin 	{
1851c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1852c9ee780fSMichael Ellerman 		.check = test__pinned_group,
18538252e791SIan Rogers 		/* 1 */
1854c9ee780fSMichael Ellerman 	},
1855ec32398cSJacob Shin 	{
1856ec32398cSJacob Shin 		.name  = "mem:0/1",
1857ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
18588252e791SIan Rogers 		/* 2 */
1859ec32398cSJacob Shin 	},
1860ec32398cSJacob Shin 	{
1861ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1862ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
18638252e791SIan Rogers 		/* 3 */
1864ec32398cSJacob Shin 	},
1865ec32398cSJacob Shin 	{
1866ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1867ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
18688252e791SIan Rogers 		/* 4 */
1869ec32398cSJacob Shin 	},
1870c0bc8c6dSAlexander Yarygin #if defined(__s390x__)
1871c0bc8c6dSAlexander Yarygin 	{
1872c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1873c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
187453fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
18758252e791SIan Rogers 		/* 0 */
1876c0bc8c6dSAlexander Yarygin 	},
1877c0bc8c6dSAlexander Yarygin #endif
1878a1e12da4SJiri Olsa 	{
1879a1e12da4SJiri Olsa 		.name  = "instructions:I",
1880a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
18818252e791SIan Rogers 		/* 5 */
1882a1e12da4SJiri Olsa 	},
1883a1e12da4SJiri Olsa 	{
1884a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1885a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
18868252e791SIan Rogers 		/* 6 */
1887a1e12da4SJiri Olsa 	},
1888ddd83c97SJiri Olsa 	{
1889ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1890ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
18918252e791SIan Rogers 		/* 7 */
1892ddd83c97SJiri Olsa 	},
189310bf358aSWang Nan 	{
189410bf358aSWang Nan 		.name  = "instructions/name=insn/",
189510bf358aSWang Nan 		.check = test__checkevent_config_symbol,
18968252e791SIan Rogers 		/* 8 */
189710bf358aSWang Nan 	},
189810bf358aSWang Nan 	{
189910bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
190010bf358aSWang Nan 		.check = test__checkevent_config_raw,
19018252e791SIan Rogers 		/* 9 */
190210bf358aSWang Nan 	},
190310bf358aSWang Nan 	{
190410bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
190510bf358aSWang Nan 		.check = test__checkevent_config_num,
19068252e791SIan Rogers 		/* 0 */
190710bf358aSWang Nan 	},
190843d0b978SWang Nan 	{
190943d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
191043d0b978SWang Nan 		.check = test__checkevent_config_cache,
19118252e791SIan Rogers 		/* 1 */
191243d0b978SWang Nan 	},
1913b3f58c8dSArnaldo Carvalho de Melo 	{
1914b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
191516ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1916b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
19178252e791SIan Rogers 		/* 2 */
1918b3f58c8dSArnaldo Carvalho de Melo 	},
191906dc5bf2SAlexey Budankov 	{
192006dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
192106dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
19228252e791SIan Rogers 		/* 3 */
1923714a92d8SJiri Olsa 	},
1924714a92d8SJiri Olsa 	{
1925714a92d8SJiri Olsa 		.name  = "cycles//u",
1926714a92d8SJiri Olsa 		.check = test__sym_event_slash,
19278252e791SIan Rogers 		/* 4 */
1928714a92d8SJiri Olsa 	},
1929714a92d8SJiri Olsa 	{
1930714a92d8SJiri Olsa 		.name  = "cycles:k",
1931714a92d8SJiri Olsa 		.check = test__sym_event_dc,
19328252e791SIan Rogers 		/* 5 */
19330997a266SAndi Kleen 	},
19340997a266SAndi Kleen 	{
19350997a266SAndi Kleen 		.name  = "instructions:uep",
19360997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
19378252e791SIan Rogers 		/* 6 */
19380997a266SAndi Kleen 	},
19390997a266SAndi Kleen 	{
19400997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
19410997a266SAndi Kleen 		.check = test__exclusive_group,
19428252e791SIan Rogers 		/* 7 */
19430997a266SAndi Kleen 	},
1944945aea22SJiri Olsa };
1945945aea22SJiri Olsa 
19468252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
1947615b8f99SAlexander Yarygin 	{
1948945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
1949945aea22SJiri Olsa 		.check = test__checkevent_pmu,
19508252e791SIan Rogers 		/* 0 */
1951945aea22SJiri Olsa 	},
1952615b8f99SAlexander Yarygin 	{
1953945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
1954945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
19558252e791SIan Rogers 		/* 1 */
1956945aea22SJiri Olsa 	},
195771ef150eSKan Liang 	{
195871ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
195971ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
19608252e791SIan Rogers 		/* 2 */
196171ef150eSKan Liang 	},
196206dc5bf2SAlexey Budankov 	{
1963a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
196406dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
19658252e791SIan Rogers 		/* 3 */
19663a6c51e4SJiri Olsa 	},
19673a6c51e4SJiri Olsa 	{
19683a6c51e4SJiri Olsa 		.name  = "software/r1a/",
19693a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
19708252e791SIan Rogers 		/* 4 */
19713a6c51e4SJiri Olsa 	},
1972c33cdf54SJiri Olsa 	{
1973c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
1974c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
19758252e791SIan Rogers 		/* 5 */
1976c33cdf54SJiri Olsa 	},
1977945aea22SJiri Olsa };
1978945aea22SJiri Olsa 
197923b6339bSArnaldo Carvalho de Melo struct terms_test {
1980945aea22SJiri Olsa 	const char *str;
1981945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
1982945aea22SJiri Olsa };
1983945aea22SJiri Olsa 
1984b58eca40SIan Rogers static const struct terms_test test__terms[] = {
1985945aea22SJiri Olsa 	[0] = {
19864929e95aSJiri Olsa 		.str   = "config=10,config1,config2=3,umask=1,read,r0xead",
1987945aea22SJiri Olsa 		.check = test__checkterms_simple,
1988945aea22SJiri Olsa 	},
1989945aea22SJiri Olsa };
1990945aea22SJiri Olsa 
19918252e791SIan Rogers static const struct evlist_test test__hybrid_events[] = {
19922541cb63SJin Yao 	{
19932541cb63SJin Yao 		.name  = "cpu_core/cpu-cycles/",
19942541cb63SJin Yao 		.check = test__hybrid_hw_event_with_pmu,
19958252e791SIan Rogers 		/* 0 */
19962541cb63SJin Yao 	},
19972541cb63SJin Yao 	{
19982541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/,cpu_core/instructions/}",
19992541cb63SJin Yao 		.check = test__hybrid_hw_group_event,
20008252e791SIan Rogers 		/* 1 */
20012541cb63SJin Yao 	},
20022541cb63SJin Yao 	{
20032541cb63SJin Yao 		.name  = "{cpu-clock,cpu_core/cpu-cycles/}",
20042541cb63SJin Yao 		.check = test__hybrid_sw_hw_group_event,
20058252e791SIan Rogers 		/* 2 */
20062541cb63SJin Yao 	},
20072541cb63SJin Yao 	{
20082541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/,cpu-clock}",
20092541cb63SJin Yao 		.check = test__hybrid_hw_sw_group_event,
20108252e791SIan Rogers 		/* 3 */
20112541cb63SJin Yao 	},
20122541cb63SJin Yao 	{
20132541cb63SJin Yao 		.name  = "{cpu_core/cpu-cycles/k,cpu_core/instructions/u}",
20142541cb63SJin Yao 		.check = test__hybrid_group_modifier1,
20158252e791SIan Rogers 		/* 4 */
20162541cb63SJin Yao 	},
20172541cb63SJin Yao 	{
20182541cb63SJin Yao 		.name  = "r1a",
20192541cb63SJin Yao 		.check = test__hybrid_raw1,
20208252e791SIan Rogers 		/* 5 */
20212541cb63SJin Yao 	},
20222541cb63SJin Yao 	{
20232541cb63SJin Yao 		.name  = "cpu_core/r1a/",
20242541cb63SJin Yao 		.check = test__hybrid_raw2,
20258252e791SIan Rogers 		/* 6 */
20262541cb63SJin Yao 	},
20272541cb63SJin Yao 	{
20282541cb63SJin Yao 		.name  = "cpu_core/config=10,config1,config2=3,period=1000/u",
20292541cb63SJin Yao 		.check = test__checkevent_pmu,
20308252e791SIan Rogers 		/* 7 */
20312541cb63SJin Yao 	},
20322541cb63SJin Yao 	{
2033490e9a8fSJin Yao 		.name  = "cpu_core/LLC-loads/",
20342541cb63SJin Yao 		.check = test__hybrid_cache_event,
20358252e791SIan Rogers 		/* 8 */
20362541cb63SJin Yao 	},
20372541cb63SJin Yao };
20382541cb63SJin Yao 
20398252e791SIan Rogers static int test_event(const struct evlist_test *e)
2040945aea22SJiri Olsa {
2041a910e466SIan Rogers 	struct parse_events_error err;
204263503dbaSJiri Olsa 	struct evlist *evlist;
2043945aea22SJiri Olsa 	int ret;
2044945aea22SJiri Olsa 
204516ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
20467741e03eSIan Rogers 		pr_debug("... SKIP\n");
20477741e03eSIan Rogers 		return TEST_OK;
204816ddcfbfSJiri Olsa 	}
204916ddcfbfSJiri Olsa 
20500f98b11cSJiri Olsa 	evlist = evlist__new();
20517741e03eSIan Rogers 	if (evlist == NULL) {
20527741e03eSIan Rogers 		pr_err("Failed allocation");
20537741e03eSIan Rogers 		return TEST_FAIL;
20547741e03eSIan Rogers 	}
205507eafd4eSIan Rogers 	parse_events_error__init(&err);
2056933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
2057945aea22SJiri Olsa 	if (ret) {
2058933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2059933ccf20SJiri Olsa 			 e->name, ret, err.str);
20606c191289SIan Rogers 		parse_events_error__print(&err, e->name);
20617741e03eSIan Rogers 		ret = TEST_FAIL;
20627741e03eSIan Rogers 		if (strstr(err.str, "can't access trace events"))
20637741e03eSIan Rogers 			ret = TEST_SKIP;
20642d4352c0SArnaldo Carvalho de Melo 	} else {
20652d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
2066945aea22SJiri Olsa 	}
206707eafd4eSIan Rogers 	parse_events_error__exit(&err);
2068c12995a5SJiri Olsa 	evlist__delete(evlist);
2069945aea22SJiri Olsa 
2070945aea22SJiri Olsa 	return ret;
2071945aea22SJiri Olsa }
2072945aea22SJiri Olsa 
2073b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
2074b4a7276cSJohn Garry {
2075b4a7276cSJohn Garry 	struct parse_events_error err;
2076b4a7276cSJohn Garry 	struct evlist *evlist;
2077b4a7276cSJohn Garry 	int ret;
2078b4a7276cSJohn Garry 
2079b4a7276cSJohn Garry 	evlist = evlist__new();
2080b4a7276cSJohn Garry 	if (!evlist)
2081b4a7276cSJohn Garry 		return -ENOMEM;
2082b4a7276cSJohn Garry 
2083b4a7276cSJohn Garry 	parse_events_error__init(&err);
2084b4a7276cSJohn Garry 	perf_pmu__test_parse_init();
2085b4a7276cSJohn Garry 	ret = __parse_events(evlist, str, &err, &perf_pmu__fake);
2086b4a7276cSJohn Garry 	if (ret) {
2087b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2088b4a7276cSJohn Garry 			 str, ret, err.str);
2089b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
2090b4a7276cSJohn Garry 	}
2091b4a7276cSJohn Garry 
2092b4a7276cSJohn Garry 	parse_events_error__exit(&err);
2093b4a7276cSJohn Garry 	evlist__delete(evlist);
2094b4a7276cSJohn Garry 
2095b4a7276cSJohn Garry 	return ret;
2096b4a7276cSJohn Garry }
2097b4a7276cSJohn Garry 
20987741e03eSIan Rogers static int combine_test_results(int existing, int latest)
20997741e03eSIan Rogers {
21007741e03eSIan Rogers 	if (existing == TEST_FAIL)
21017741e03eSIan Rogers 		return TEST_FAIL;
21027741e03eSIan Rogers 	if (existing == TEST_SKIP)
21037741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
21047741e03eSIan Rogers 	return latest;
21057741e03eSIan Rogers }
21067741e03eSIan Rogers 
21078252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
2108945aea22SJiri Olsa {
21097741e03eSIan Rogers 	int ret = TEST_OK;
2110945aea22SJiri Olsa 
21118252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
21128252e791SIan Rogers 		const struct evlist_test *e = &events[i];
21137741e03eSIan Rogers 		int test_ret;
2114945aea22SJiri Olsa 
21157741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
21167741e03eSIan Rogers 		test_ret = test_event(e);
21177741e03eSIan Rogers 		if (test_ret != TEST_OK) {
21187741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
21197741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
21207741e03eSIan Rogers 		}
2121945aea22SJiri Olsa 	}
2122945aea22SJiri Olsa 
21237741e03eSIan Rogers 	return ret;
21247741e03eSIan Rogers }
21257741e03eSIan Rogers 
21267741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21277741e03eSIan Rogers {
21287741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2129945aea22SJiri Olsa }
2130945aea22SJiri Olsa 
2131b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2132945aea22SJiri Olsa {
2133c549aca5SDavid Ahern 	struct list_head terms;
2134945aea22SJiri Olsa 	int ret;
2135945aea22SJiri Olsa 
2136c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2137945aea22SJiri Olsa 
21384929e95aSJiri Olsa 	/*
21394929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init prepares perf_pmu_events_list
21404929e95aSJiri Olsa 	 * which gets freed in parse_events_terms.
21414929e95aSJiri Olsa 	 */
21424929e95aSJiri Olsa 	if (perf_pmu__test_parse_init())
21434929e95aSJiri Olsa 		return -1;
21444929e95aSJiri Olsa 
2145c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2146945aea22SJiri Olsa 	if (ret) {
2147945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2148945aea22SJiri Olsa 			 t->str , ret);
2149945aea22SJiri Olsa 		return ret;
2150945aea22SJiri Olsa 	}
2151945aea22SJiri Olsa 
2152c549aca5SDavid Ahern 	ret = t->check(&terms);
2153682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2154945aea22SJiri Olsa 
2155945aea22SJiri Olsa 	return ret;
2156945aea22SJiri Olsa }
2157945aea22SJiri Olsa 
2158b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2159945aea22SJiri Olsa {
2160945aea22SJiri Olsa 	int ret = 0;
2161945aea22SJiri Olsa 
2162b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2163b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2164945aea22SJiri Olsa 
2165945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2166945aea22SJiri Olsa 		ret = test_term(t);
2167945aea22SJiri Olsa 		if (ret)
2168945aea22SJiri Olsa 			break;
2169945aea22SJiri Olsa 	}
2170945aea22SJiri Olsa 
2171945aea22SJiri Olsa 	return ret;
2172945aea22SJiri Olsa }
2173945aea22SJiri Olsa 
21747741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21757741e03eSIan Rogers {
21767741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
21777741e03eSIan Rogers }
21787741e03eSIan Rogers 
2179945aea22SJiri Olsa static int test_pmu(void)
2180945aea22SJiri Olsa {
2181945aea22SJiri Olsa 	struct stat st;
2182945aea22SJiri Olsa 	char path[PATH_MAX];
2183945aea22SJiri Olsa 	int ret;
2184945aea22SJiri Olsa 
2185945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
2186cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
2187945aea22SJiri Olsa 
2188945aea22SJiri Olsa 	ret = stat(path, &st);
2189945aea22SJiri Olsa 	if (ret)
2190945aea22SJiri Olsa 		pr_debug("omitting PMU cpu tests\n");
2191945aea22SJiri Olsa 	return !ret;
2192945aea22SJiri Olsa }
2193945aea22SJiri Olsa 
21947741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2195945aea22SJiri Olsa {
2196945aea22SJiri Olsa 	struct stat st;
2197945aea22SJiri Olsa 	char path[PATH_MAX];
2198945aea22SJiri Olsa 	struct dirent *ent;
2199945aea22SJiri Olsa 	DIR *dir;
2200945aea22SJiri Olsa 	int ret;
2201945aea22SJiri Olsa 
22027741e03eSIan Rogers 	if (!test_pmu())
22037741e03eSIan Rogers 		return TEST_SKIP;
22047741e03eSIan Rogers 
2205945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/",
2206cf38fadaSArnaldo Carvalho de Melo 		 sysfs__mountpoint());
2207945aea22SJiri Olsa 
2208945aea22SJiri Olsa 	ret = stat(path, &st);
2209945aea22SJiri Olsa 	if (ret) {
22107741e03eSIan Rogers 		pr_debug("omitting PMU cpu events tests: %s\n", path);
22117741e03eSIan Rogers 		return TEST_OK;
2212945aea22SJiri Olsa 	}
2213945aea22SJiri Olsa 
2214945aea22SJiri Olsa 	dir = opendir(path);
2215945aea22SJiri Olsa 	if (!dir) {
22167741e03eSIan Rogers 		pr_debug("can't open pmu event dir: %s\n", path);
22177741e03eSIan Rogers 		return TEST_FAIL;
2218945aea22SJiri Olsa 	}
2219945aea22SJiri Olsa 
22207741e03eSIan Rogers 	ret = TEST_OK;
22217741e03eSIan Rogers 	while ((ent = readdir(dir))) {
22228252e791SIan Rogers 		struct evlist_test e = { .name = NULL, };
22232e2bbc03SArnaldo Carvalho de Melo 		char name[2 * NAME_MAX + 1 + 12 + 3];
22247741e03eSIan Rogers 		int test_ret;
2225945aea22SJiri Olsa 
222617a2634bSAndi Kleen 		/* Names containing . are special and cannot be used directly */
222717a2634bSAndi Kleen 		if (strchr(ent->d_name, '.'))
2228945aea22SJiri Olsa 			continue;
2229945aea22SJiri Olsa 
22302e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name);
2231945aea22SJiri Olsa 
2232945aea22SJiri Olsa 		e.name  = name;
2233945aea22SJiri Olsa 		e.check = test__checkevent_pmu_events;
2234945aea22SJiri Olsa 
22357741e03eSIan Rogers 		test_ret = test_event(&e);
22367741e03eSIan Rogers 		if (test_ret != TEST_OK) {
22377741e03eSIan Rogers 			pr_debug("Test PMU event failed for '%s'", name);
22387741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
22397741e03eSIan Rogers 		}
2240*146edff3SIan Rogers 		/*
2241*146edff3SIan Rogers 		 * Names containing '-' are recognized as prefixes and suffixes
2242*146edff3SIan Rogers 		 * due to '-' being a legacy PMU separator. This fails when the
2243*146edff3SIan Rogers 		 * prefix or suffix collides with an existing legacy token. For
2244*146edff3SIan Rogers 		 * example, branch-brs has a prefix (branch) that collides with
2245*146edff3SIan Rogers 		 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2246*146edff3SIan Rogers 		 * isn't expected after this. As event names in the config
2247*146edff3SIan Rogers 		 * slashes are allowed a '-' in the name we check this works
2248*146edff3SIan Rogers 		 * above.
2249*146edff3SIan Rogers 		 */
2250*146edff3SIan Rogers 		if (strchr(ent->d_name, '-'))
2251*146edff3SIan Rogers 			continue;
2252*146edff3SIan Rogers 
22532e2bbc03SArnaldo Carvalho de Melo 		snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);
2254ffe59788SKan Liang 		e.name  = name;
2255ffe59788SKan Liang 		e.check = test__checkevent_pmu_events_mix;
22567741e03eSIan Rogers 		test_ret = test_event(&e);
22577741e03eSIan Rogers 		if (test_ret != TEST_OK) {
22587741e03eSIan Rogers 			pr_debug("Test PMU event failed for '%s'", name);
22597741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
22607741e03eSIan Rogers 		}
2261945aea22SJiri Olsa 	}
2262945aea22SJiri Olsa 
2263945aea22SJiri Olsa 	closedir(dir);
2264945aea22SJiri Olsa 	return ret;
2265945aea22SJiri Olsa }
2266945aea22SJiri Olsa 
22677741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
22687741e03eSIan Rogers {
22697741e03eSIan Rogers 	if (!test_pmu())
22707741e03eSIan Rogers 		return TEST_SKIP;
22717741e03eSIan Rogers 
22727741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
22737741e03eSIan Rogers }
22747741e03eSIan Rogers 
2275c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2276c7a3828dSJin Yao {
2277c7a3828dSJin Yao 	char path[PATH_MAX];
2278c7a3828dSJin Yao 	DIR *dir;
2279c7a3828dSJin Yao 	struct dirent *dent;
2280c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2281c7a3828dSJin Yao 	char buf[128];
2282c7a3828dSJin Yao 	FILE *file;
2283c7a3828dSJin Yao 
2284c7a3828dSJin Yao 	if (!sysfs)
2285c7a3828dSJin Yao 		return false;
2286c7a3828dSJin Yao 
2287c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2288c7a3828dSJin Yao 	dir = opendir(path);
2289c7a3828dSJin Yao 	if (!dir)
2290c7a3828dSJin Yao 		return false;
2291c7a3828dSJin Yao 
2292c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2293c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2294c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2295c7a3828dSJin Yao 			continue;
2296c7a3828dSJin Yao 
2297c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2298c7a3828dSJin Yao 			 sysfs, dent->d_name);
2299c7a3828dSJin Yao 
2300c7a3828dSJin Yao 		if (!file_available(path))
2301c7a3828dSJin Yao 			continue;
2302c7a3828dSJin Yao 
2303c7a3828dSJin Yao 		file = fopen(path, "r");
2304c7a3828dSJin Yao 		if (!file)
2305c7a3828dSJin Yao 			continue;
2306c7a3828dSJin Yao 
2307c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2308c7a3828dSJin Yao 			fclose(file);
2309c7a3828dSJin Yao 			continue;
2310c7a3828dSJin Yao 		}
2311c7a3828dSJin Yao 
2312c7a3828dSJin Yao 		/* Remove the last '\n' */
2313c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2314c7a3828dSJin Yao 
2315c7a3828dSJin Yao 		fclose(file);
2316c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2317c7a3828dSJin Yao 		*alias = strdup(buf);
2318c7a3828dSJin Yao 		closedir(dir);
2319c7a3828dSJin Yao 
2320c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2321c7a3828dSJin Yao 			free(*event);
2322c7a3828dSJin Yao 			free(*alias);
2323c7a3828dSJin Yao 			return false;
2324c7a3828dSJin Yao 		}
2325c7a3828dSJin Yao 
2326c7a3828dSJin Yao 		return true;
2327c7a3828dSJin Yao 	}
2328c7a3828dSJin Yao 
2329c7a3828dSJin Yao 	closedir(dir);
2330c7a3828dSJin Yao 	return false;
2331c7a3828dSJin Yao }
2332c7a3828dSJin Yao 
23337741e03eSIan Rogers static int test__hybrid(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23347741e03eSIan Rogers {
23357741e03eSIan Rogers 	if (!perf_pmu__has_hybrid())
23367741e03eSIan Rogers 		return TEST_SKIP;
23377741e03eSIan Rogers 
23387741e03eSIan Rogers 	return test_events(test__hybrid_events, ARRAY_SIZE(test__hybrid_events));
23397741e03eSIan Rogers }
23407741e03eSIan Rogers 
2341c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2342c7a3828dSJin Yao {
2343c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2344c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2345c7a3828dSJin Yao 
2346c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2347c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
23487741e03eSIan Rogers 	return TEST_OK;
2349c7a3828dSJin Yao }
2350c7a3828dSJin Yao 
23517741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2352c7a3828dSJin Yao {
23538252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2354c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2355c7a3828dSJin Yao 
2356c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2357c7a3828dSJin Yao 		 event, alias);
2358c7a3828dSJin Yao 
2359c7a3828dSJin Yao 	e.name  = name;
2360c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2361c7a3828dSJin Yao 	return test_event(&e);
2362c7a3828dSJin Yao }
2363c7a3828dSJin Yao 
23647741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23657741e03eSIan Rogers {
23667741e03eSIan Rogers 	char *event, *alias;
23677741e03eSIan Rogers 	int ret;
23687741e03eSIan Rogers 
23697741e03eSIan Rogers 	if (!test_alias(&event, &alias))
23707741e03eSIan Rogers 		return TEST_SKIP;
23717741e03eSIan Rogers 
23727741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
23737741e03eSIan Rogers 
23747741e03eSIan Rogers 	free(event);
23757741e03eSIan Rogers 	free(alias);
23767741e03eSIan Rogers 	return ret;
23777741e03eSIan Rogers }
23787741e03eSIan Rogers 
23797741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
23807741e03eSIan Rogers 				   int subtest __maybe_unused)
2381b4a7276cSJohn Garry {
2382b4a7276cSJohn Garry 	static const char events[][30] = {
2383b4a7276cSJohn Garry 			"event-hyphen",
2384b4a7276cSJohn Garry 			"event-two-hyph",
2385b4a7276cSJohn Garry 	};
23867741e03eSIan Rogers 	int ret = TEST_OK;
2387b4a7276cSJohn Garry 
23887741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
23897741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
23907741e03eSIan Rogers 
23917741e03eSIan Rogers 		if (test_ret != TEST_OK) {
23927741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
23937741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2394b4a7276cSJohn Garry 		}
2395b4a7276cSJohn Garry 	}
2396b4a7276cSJohn Garry 
2397b4a7276cSJohn Garry 	return ret;
2398b4a7276cSJohn Garry }
2399b4a7276cSJohn Garry 
24007741e03eSIan Rogers static struct test_case tests__parse_events[] = {
24017741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
24027741e03eSIan Rogers 			 events2,
24037741e03eSIan Rogers 			 "permissions"),
24047741e03eSIan Rogers 	TEST_CASE_REASON("Test parsing of \"hybrid\" CPU events",
24057741e03eSIan Rogers 			 hybrid,
24067741e03eSIan Rogers 			"not hybrid"),
24077741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
24087741e03eSIan Rogers 			 pmu_events,
24097741e03eSIan Rogers 			 "permissions"),
24107741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
24117741e03eSIan Rogers 			 pmu_events2,
24127741e03eSIan Rogers 			 "permissions"),
24137741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
24147741e03eSIan Rogers 			 "no aliases in sysfs"),
24157741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
24167741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
24177741e03eSIan Rogers 	{	.name = NULL, }
24187741e03eSIan Rogers };
2419945aea22SJiri Olsa 
24207741e03eSIan Rogers struct test_suite suite__parse_events = {
24217741e03eSIan Rogers 	.desc = "Parse event definition strings",
24227741e03eSIan Rogers 	.test_cases = tests__parse_events,
24237741e03eSIan Rogers };
2424