xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 5ea8f2ccffb23983f02012a2731464586b10fbf3)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2945aea22SJiri Olsa #include "parse-events.h"
3945aea22SJiri Olsa #include "evsel.h"
4945aea22SJiri Olsa #include "evlist.h"
5cd0cfad7SBorislav Petkov #include <api/fs/fs.h>
6c81251e8SJiri Olsa #include "tests.h"
784f5d36fSJiri Olsa #include "debug.h"
8f2a39fe8SArnaldo Carvalho de Melo #include "pmu.h"
95a52817eSIan Rogers #include "pmus.h"
1076b31a29SArnaldo Carvalho de Melo #include <dirent.h>
11a43783aeSArnaldo Carvalho de Melo #include <errno.h>
12c7a3828dSJin Yao #include "fncache.h"
137a8ef4c4SArnaldo Carvalho de Melo #include <sys/types.h>
147a8ef4c4SArnaldo Carvalho de Melo #include <sys/stat.h>
157a8ef4c4SArnaldo Carvalho de Melo #include <unistd.h>
16877a7a11SArnaldo Carvalho de Melo #include <linux/kernel.h>
17f0b9abfbSIngo Molnar #include <linux/hw_breakpoint.h>
1820a9ed28SArnaldo Carvalho de Melo #include <api/fs/tracing_path.h>
19945aea22SJiri Olsa 
20945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
21945aea22SJiri Olsa 			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
22945aea22SJiri Olsa 
239854934bSIan Rogers static bool test_config(const struct evsel *evsel, __u64 expected_config)
249854934bSIan Rogers {
259854934bSIan Rogers 	__u32 type = evsel->core.attr.type;
269854934bSIan Rogers 	__u64 config = evsel->core.attr.config;
279854934bSIan Rogers 
289854934bSIan Rogers 	if (type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE) {
299854934bSIan Rogers 		/*
309854934bSIan Rogers 		 * HARDWARE and HW_CACHE events encode the PMU's extended type
319854934bSIan Rogers 		 * in the top 32-bits. Mask in order to ignore.
329854934bSIan Rogers 		 */
339854934bSIan Rogers 		config &= PERF_HW_EVENT_MASK;
349854934bSIan Rogers 	}
359854934bSIan Rogers 	return config == expected_config;
369854934bSIan Rogers }
379854934bSIan Rogers 
38aefde50aSIan Rogers static bool test_perf_config(const struct perf_evsel *evsel, __u64 expected_config)
39aefde50aSIan Rogers {
40aefde50aSIan Rogers 	return (evsel->attr.config & PERF_HW_EVENT_MASK) == expected_config;
41aefde50aSIan Rogers }
42aefde50aSIan Rogers 
43378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
44378ef0f5SIan Rogers 
4553fe307dSThomas Richter #if defined(__s390x__)
4653fe307dSThomas Richter /* Return true if kvm module is available and loaded. Test this
474d39c89fSIngo Molnar  * and return success when trace point kvm_s390_create_vm
4853fe307dSThomas Richter  * exists. Otherwise this test always fails.
4953fe307dSThomas Richter  */
5053fe307dSThomas Richter static bool kvm_s390_create_vm_valid(void)
5153fe307dSThomas Richter {
5253fe307dSThomas Richter 	char *eventfile;
5353fe307dSThomas Richter 	bool rc = false;
5453fe307dSThomas Richter 
5553fe307dSThomas Richter 	eventfile = get_events_file("kvm-s390");
5653fe307dSThomas Richter 
5753fe307dSThomas Richter 	if (eventfile) {
5853fe307dSThomas Richter 		DIR *mydir = opendir(eventfile);
5953fe307dSThomas Richter 
6053fe307dSThomas Richter 		if (mydir) {
6153fe307dSThomas Richter 			rc = true;
6253fe307dSThomas Richter 			closedir(mydir);
6353fe307dSThomas Richter 		}
6453fe307dSThomas Richter 		put_events_file(eventfile);
6553fe307dSThomas Richter 	}
6653fe307dSThomas Richter 
6753fe307dSThomas Richter 	return rc;
6853fe307dSThomas Richter }
6953fe307dSThomas Richter #endif
7053fe307dSThomas Richter 
7163503dbaSJiri Olsa static int test__checkevent_tracepoint(struct evlist *evlist)
72945aea22SJiri Olsa {
73515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
74945aea22SJiri Olsa 
756484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
769d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist));
771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
78945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
791fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
817741e03eSIan Rogers 	return TEST_OK;
82945aea22SJiri Olsa }
83945aea22SJiri Olsa 
8463503dbaSJiri Olsa static int test__checkevent_tracepoint_multi(struct evlist *evlist)
85945aea22SJiri Olsa {
8632dcd021SJiri Olsa 	struct evsel *evsel;
87945aea22SJiri Olsa 
886484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
899d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist));
90945aea22SJiri Olsa 
91e5cadb93SArnaldo Carvalho de Melo 	evlist__for_each_entry(evlist, evsel) {
92945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong type",
931fc632ceSJiri Olsa 			PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
94945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_type",
951fc632ceSJiri Olsa 			PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
96945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_period",
971fc632ceSJiri Olsa 			1 == evsel->core.attr.sample_period);
98945aea22SJiri Olsa 	}
997741e03eSIan Rogers 	return TEST_OK;
100945aea22SJiri Olsa }
101378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
102945aea22SJiri Olsa 
10363503dbaSJiri Olsa static int test__checkevent_raw(struct evlist *evlist)
104945aea22SJiri Olsa {
105aefde50aSIan Rogers 	struct perf_evsel *evsel;
106aefde50aSIan Rogers 	bool raw_type_match = false;
107945aea22SJiri Olsa 
108aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
109aefde50aSIan Rogers 
110aefde50aSIan Rogers 	perf_evlist__for_each_evsel(&evlist->core, evsel) {
111aefde50aSIan Rogers 		struct perf_pmu *pmu;
112aefde50aSIan Rogers 		bool type_matched = false;
113aefde50aSIan Rogers 
114aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 0x1a));
115aefde50aSIan Rogers 		perf_pmus__for_each_pmu(pmu) {
116aefde50aSIan Rogers 			if (pmu->type == evsel->attr.type) {
117aefde50aSIan Rogers 				TEST_ASSERT_VAL("PMU type expected once", !type_matched);
118aefde50aSIan Rogers 				type_matched = true;
119aefde50aSIan Rogers 				if (pmu->type == PERF_TYPE_RAW)
120aefde50aSIan Rogers 					raw_type_match = true;
121aefde50aSIan Rogers 			}
122aefde50aSIan Rogers 		}
123aefde50aSIan Rogers 		TEST_ASSERT_VAL("No PMU found for type", type_matched);
124aefde50aSIan Rogers 	}
125aefde50aSIan Rogers 	TEST_ASSERT_VAL("Raw PMU not matched", raw_type_match);
1267741e03eSIan Rogers 	return TEST_OK;
127945aea22SJiri Olsa }
128945aea22SJiri Olsa 
12963503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
130945aea22SJiri Olsa {
131515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
132945aea22SJiri Olsa 
1336484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
1359854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
1367741e03eSIan Rogers 	return TEST_OK;
137945aea22SJiri Olsa }
138945aea22SJiri Olsa 
13963503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist)
140945aea22SJiri Olsa {
141aefde50aSIan Rogers 	struct perf_evsel *evsel;
142945aea22SJiri Olsa 
143aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
144aefde50aSIan Rogers 
145aefde50aSIan Rogers 	perf_evlist__for_each_evsel(&evlist->core, evsel) {
146aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
147aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config",
148aefde50aSIan Rogers 				test_perf_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
149aefde50aSIan Rogers 	}
1507741e03eSIan Rogers 	return TEST_OK;
151945aea22SJiri Olsa }
152945aea22SJiri Olsa 
15363503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
154945aea22SJiri Olsa {
155aefde50aSIan Rogers 	struct perf_evsel *evsel;
156945aea22SJiri Olsa 
157aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
158aefde50aSIan Rogers 
159aefde50aSIan Rogers 	perf_evlist__for_each_evsel(&evlist->core, evsel) {
160aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
161aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
162ee4c7588SJiri Olsa 		/*
16378e1bc25SArnaldo Carvalho de Melo 		 * The period value gets configured within evlist__config,
164ee4c7588SJiri Olsa 		 * while this test executes only parse events method.
165ee4c7588SJiri Olsa 		 */
166aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period);
167aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1);
168aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config2", 1 == evsel->attr.config2);
169aefde50aSIan Rogers 	}
1707741e03eSIan Rogers 	return TEST_OK;
171945aea22SJiri Olsa }
172945aea22SJiri Olsa 
17363503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
174945aea22SJiri Olsa {
175515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
176945aea22SJiri Olsa 
1776484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1799854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS));
1807741e03eSIan Rogers 	return TEST_OK;
181945aea22SJiri Olsa }
182945aea22SJiri Olsa 
18363503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
184945aea22SJiri Olsa {
185aefde50aSIan Rogers 	struct perf_evsel *evsel;
186945aea22SJiri Olsa 
187aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
188aefde50aSIan Rogers 
189aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
190aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type);
191aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 1 << 16));
192aefde50aSIan Rogers 	}
1937741e03eSIan Rogers 	return TEST_OK;
194945aea22SJiri Olsa }
195945aea22SJiri Olsa 
19663503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
197945aea22SJiri Olsa {
198515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
199945aea22SJiri Olsa 
2006484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
2011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2029854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
203945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
2041fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
205945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
2061fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
2077741e03eSIan Rogers 	return TEST_OK;
208945aea22SJiri Olsa }
209945aea22SJiri Olsa 
21063503dbaSJiri Olsa static int test__checkevent_breakpoint_x(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);
2151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2169854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
217945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2181fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
2191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
2207741e03eSIan Rogers 	return TEST_OK;
221945aea22SJiri Olsa }
222945aea22SJiri Olsa 
22363503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
224945aea22SJiri Olsa {
225515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
226945aea22SJiri Olsa 
2276484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
228945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2291fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2309854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
231945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2321fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
233945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2341fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2357741e03eSIan Rogers 	return TEST_OK;
236945aea22SJiri Olsa }
237945aea22SJiri Olsa 
23863503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
239945aea22SJiri Olsa {
240515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
241945aea22SJiri Olsa 
2426484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
243945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2441fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2459854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
246945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2471fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
248945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2491fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2507741e03eSIan Rogers 	return TEST_OK;
251945aea22SJiri Olsa }
252945aea22SJiri Olsa 
25363503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
254945aea22SJiri Olsa {
255515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
256945aea22SJiri Olsa 
2576484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
258945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2591fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2609854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
261945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2621fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
263945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2641fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2657741e03eSIan Rogers 	return TEST_OK;
266945aea22SJiri Olsa }
267945aea22SJiri Olsa 
268378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
26963503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
270945aea22SJiri Olsa {
271515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
272945aea22SJiri Olsa 
2731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
277945aea22SJiri Olsa 
278945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
279945aea22SJiri Olsa }
280945aea22SJiri Olsa 
281945aea22SJiri Olsa static int
28263503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
283945aea22SJiri Olsa {
284aefde50aSIan Rogers 	struct perf_evsel *evsel;
285945aea22SJiri Olsa 
2866484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
287945aea22SJiri Olsa 
288aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
289aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
290aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
291aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
292aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
293945aea22SJiri Olsa 	}
294945aea22SJiri Olsa 
295945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
296945aea22SJiri Olsa }
297378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
298945aea22SJiri Olsa 
29963503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
300945aea22SJiri Olsa {
301aefde50aSIan Rogers 	struct perf_evsel *evsel;
302945aea22SJiri Olsa 
303aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
304aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
305aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
306aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
307aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
308aefde50aSIan Rogers 	}
309945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
310945aea22SJiri Olsa }
311945aea22SJiri Olsa 
31263503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
313945aea22SJiri Olsa {
314aefde50aSIan Rogers 	struct perf_evsel *evsel;
315945aea22SJiri Olsa 
316aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
317aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
318aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
319aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
320aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
321aefde50aSIan Rogers 	}
322945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
323945aea22SJiri Olsa }
324945aea22SJiri Olsa 
32563503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
326945aea22SJiri Olsa {
327515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
328945aea22SJiri Olsa 
3291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
3301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
333945aea22SJiri Olsa 
334945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
335945aea22SJiri Olsa }
336945aea22SJiri Olsa 
33763503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
338945aea22SJiri Olsa {
339aefde50aSIan Rogers 	struct perf_evsel *evsel;
340945aea22SJiri Olsa 
341aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
342aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
343aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
344aefde50aSIan Rogers 	}
345945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
346945aea22SJiri Olsa }
347945aea22SJiri Olsa 
34863503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
349945aea22SJiri Olsa {
350aefde50aSIan Rogers 	struct perf_evsel *evsel;
351945aea22SJiri Olsa 
352aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
353aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
354aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
355aefde50aSIan Rogers 	}
356945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
357945aea22SJiri Olsa }
358945aea22SJiri Olsa 
35963503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
360945aea22SJiri Olsa {
361515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
362945aea22SJiri Olsa 
3631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
367945aea22SJiri Olsa 
368945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
369945aea22SJiri Olsa }
370945aea22SJiri Olsa 
37163503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
372945aea22SJiri Olsa {
373aefde50aSIan Rogers 	struct perf_evsel *evsel;
374945aea22SJiri Olsa 
375aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
376aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
377aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
378aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
379aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
380aefde50aSIan Rogers 	}
381945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
382945aea22SJiri Olsa }
383945aea22SJiri Olsa 
38463503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
385a1e12da4SJiri Olsa {
386515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
387a1e12da4SJiri Olsa 
3881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
3911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
395a1e12da4SJiri Olsa 
396a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
397a1e12da4SJiri Olsa }
398a1e12da4SJiri Olsa 
39963503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
400a1e12da4SJiri Olsa {
401515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
402a1e12da4SJiri Olsa 
4031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
4041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
4051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
4061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
410a1e12da4SJiri Olsa 
411a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
412a1e12da4SJiri Olsa }
413a1e12da4SJiri Olsa 
41463503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
415945aea22SJiri Olsa {
416515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
417945aea22SJiri Olsa 
418945aea22SJiri Olsa 
4191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
423945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4248ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:u"));
425945aea22SJiri Olsa 
426945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
427945aea22SJiri Olsa }
428945aea22SJiri Olsa 
42963503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
430945aea22SJiri Olsa {
431515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
432945aea22SJiri Olsa 
4331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
437945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4388ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:x:k"));
439945aea22SJiri Olsa 
440945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
441945aea22SJiri Olsa }
442945aea22SJiri Olsa 
44363503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
444945aea22SJiri Olsa {
445515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
446945aea22SJiri Olsa 
4471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
451945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4528ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:r:hp"));
453945aea22SJiri Olsa 
454945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
455945aea22SJiri Olsa }
456945aea22SJiri Olsa 
45763503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
458945aea22SJiri Olsa {
459515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
460945aea22SJiri Olsa 
4611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
465945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4668ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:w:up"));
467945aea22SJiri Olsa 
468945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
469945aea22SJiri Olsa }
470945aea22SJiri Olsa 
47163503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
472945aea22SJiri Olsa {
473515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
474945aea22SJiri Olsa 
4751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
479945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4808ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:rw:kp"));
481945aea22SJiri Olsa 
482945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
483945aea22SJiri Olsa }
484945aea22SJiri Olsa 
48563503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
486945aea22SJiri Olsa {
487945aea22SJiri Olsa 
488515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
489945aea22SJiri Olsa 
4906484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
4911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
4929854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config",    test_config(evsel, 10));
4931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
4941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
495204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3",    0 == evsel->core.attr.config3);
496ee4c7588SJiri Olsa 	/*
49778e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
498ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
499ee4c7588SJiri Olsa 	 */
5001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
501945aea22SJiri Olsa 
5027741e03eSIan Rogers 	return TEST_OK;
503945aea22SJiri Olsa }
504945aea22SJiri Olsa 
505378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
50663503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
507945aea22SJiri Olsa {
508515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
509945aea22SJiri Olsa 
510aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 3 <= evlist->core.nr_entries);
511945aea22SJiri Olsa 
512945aea22SJiri Olsa 	/* r1 */
513aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT != evsel->core.attr.type);
514aefde50aSIan Rogers 	while (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) {
5159854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
5161fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
5171fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
518204e7c49SRob Herring 		TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3);
5191fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
5201fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
5211fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
5221fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
523aefde50aSIan Rogers 		evsel = evsel__next(evsel);
524aefde50aSIan Rogers 	}
525945aea22SJiri Olsa 
52643f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
5271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
528945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
5291fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
5301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
5311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
5321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
5331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
5341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
535945aea22SJiri Olsa 
536945aea22SJiri Olsa 	/* 1:1:hp */
537e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
5399854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
5401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
5411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
5421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
5431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
544945aea22SJiri Olsa 
5457741e03eSIan Rogers 	return TEST_OK;
546945aea22SJiri Olsa }
547378ef0f5SIan Rogers #endif
548945aea22SJiri Olsa 
54963503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
550945aea22SJiri Olsa {
551515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
552945aea22SJiri Olsa 
553945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
5546484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5569854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
5578ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
558945aea22SJiri Olsa 
559945aea22SJiri Olsa 	/* cpu/config=2/u" */
560e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5616484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5639854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 2));
564945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
5658ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
566945aea22SJiri Olsa 
5677741e03eSIan Rogers 	return TEST_OK;
568945aea22SJiri Olsa }
569945aea22SJiri Olsa 
57063503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
57171ef150eSKan Liang {
572515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
57371ef150eSKan Liang 
57471ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
5756484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
5761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5779854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
57871ef150eSKan Liang 	/*
57978e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
58071ef150eSKan Liang 	 * while this test executes only parse events method.
58171ef150eSKan Liang 	 */
5821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
58327de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
58571ef150eSKan Liang 
58671ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
587e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
5881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5899854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 2));
59071ef150eSKan Liang 	/*
59178e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
59271ef150eSKan Liang 	 * while this test executes only parse events method.
59371ef150eSKan Liang 	 */
5941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
59527de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
5961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
59771ef150eSKan Liang 
5987741e03eSIan Rogers 	return TEST_OK;
59971ef150eSKan Liang }
60071ef150eSKan Liang 
60163503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
602945aea22SJiri Olsa {
603515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
604945aea22SJiri Olsa 
6056484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
6065a52817eSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type ||
6075a52817eSIan Rogers 				      strcmp(evsel->pmu_name, "cpu"));
608945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
6091fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
610945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
6111fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
6121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
6141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
6150997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
616945aea22SJiri Olsa 
6177741e03eSIan Rogers 	return TEST_OK;
618945aea22SJiri Olsa }
619945aea22SJiri Olsa 
620ffe59788SKan Liang 
62163503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
622ffe59788SKan Liang {
623515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
624ffe59788SKan Liang 
625ffe59788SKan Liang 	/* pmu-event:u */
6266484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
627ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
6281fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
629ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
6301fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
6311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
6331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
6340997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
635ffe59788SKan Liang 
636ffe59788SKan Liang 	/* cpu/pmu-event/u*/
637e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6386484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6395a52817eSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type ||
6405a52817eSIan Rogers 				      strcmp(evsel->pmu_name, "cpu"));
641ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
6421fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
643ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
6441fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
6451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
6471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
6480997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned);
649ffe59788SKan Liang 
6507741e03eSIan Rogers 	return TEST_OK;
651ffe59788SKan Liang }
652ffe59788SKan Liang 
653945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
654945aea22SJiri Olsa {
6556cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
656945aea22SJiri Olsa 
657945aea22SJiri Olsa 	/* config=10 */
6586cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
659945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
660945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
661945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
662945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
663945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
6644f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
665945aea22SJiri Olsa 
666945aea22SJiri Olsa 	/* config1 */
6676cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
668945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
669945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
670945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
671945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
672945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
6734f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1"));
674945aea22SJiri Olsa 
675945aea22SJiri Olsa 	/* config2=3 */
6766cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
677945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
678945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
679945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
680945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
681945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
6824f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2"));
683945aea22SJiri Olsa 
684204e7c49SRob Herring 	/* config3=4 */
685204e7c49SRob Herring 	term = list_entry(term->list.next, struct parse_events_term, list);
686204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type term",
687204e7c49SRob Herring 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3);
688204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type val",
689204e7c49SRob Herring 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
690204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong val", term->val.num == 4);
691204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3"));
692204e7c49SRob Herring 
693945aea22SJiri Olsa 	/* umask=1*/
6946cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
695945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
696945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
697945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
698945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
699945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
700945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
701945aea22SJiri Olsa 
7024929e95aSJiri Olsa 	/*
7034929e95aSJiri Olsa 	 * read
7044929e95aSJiri Olsa 	 *
7054929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
7064929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
7074929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
7084929e95aSJiri Olsa 	 */
7094929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
7104929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
71170c90e4aSIan Rogers 			term->type_term == PARSE_EVENTS__TERM_TYPE_RAW);
7124929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
71370c90e4aSIan Rogers 			term->type_val == PARSE_EVENTS__TERM_TYPE_STR);
71470c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "read"));
71570c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw"));
7164929e95aSJiri Olsa 
7174929e95aSJiri Olsa 	/*
7184929e95aSJiri Olsa 	 * r0xead
7194929e95aSJiri Olsa 	 *
7204929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
7214929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
7224929e95aSJiri Olsa 	 */
7234929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
7244929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
72570c90e4aSIan Rogers 			term->type_term == PARSE_EVENTS__TERM_TYPE_RAW);
7264929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
72770c90e4aSIan Rogers 			term->type_val == PARSE_EVENTS__TERM_TYPE_STR);
72870c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead"));
72970c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw"));
7307741e03eSIan Rogers 	return TEST_OK;
731945aea22SJiri Olsa }
732945aea22SJiri Olsa 
73363503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
734945aea22SJiri Olsa {
73532dcd021SJiri Olsa 	struct evsel *evsel, *leader;
736945aea22SJiri Olsa 
7376484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
7389d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
739945aea22SJiri Olsa 
740945aea22SJiri Olsa 	/* instructions:k */
741515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
7439854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
7441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
7451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
7481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
750c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7515643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7522bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
753a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
754945aea22SJiri Olsa 
755945aea22SJiri Olsa 	/* cycles:upp */
756e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
7589854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
7591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
7611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
762945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
7631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
766fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
7672bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
768a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
769945aea22SJiri Olsa 
7707741e03eSIan Rogers 	return TEST_OK;
771945aea22SJiri Olsa }
772945aea22SJiri Olsa 
77363503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
774945aea22SJiri Olsa {
77532dcd021SJiri Olsa 	struct evsel *evsel, *leader;
776945aea22SJiri Olsa 
7776484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
7789d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
779945aea22SJiri Olsa 
780945aea22SJiri Olsa 	/* faults + :ku modifier */
781515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
7821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
7839854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS));
7841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
7851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
7861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
787943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
7881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
7891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
790c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
7915643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
7922bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
793a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
794945aea22SJiri Olsa 
795945aea22SJiri Olsa 	/* cache-references + :u modifier */
796e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
7971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
7989854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES));
7991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8001fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
8021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
805fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8062bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
807a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
808945aea22SJiri Olsa 
809945aea22SJiri Olsa 	/* cycles:k */
810e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8129854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
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));
820a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
821945aea22SJiri Olsa 
8227741e03eSIan Rogers 	return TEST_OK;
823945aea22SJiri Olsa }
824945aea22SJiri Olsa 
825378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
82663503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
827945aea22SJiri Olsa {
82832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
829945aea22SJiri Olsa 
8306484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
8319d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
832945aea22SJiri Olsa 
83343f322b4SRiku Voipio 	/* group1 syscalls:sys_enter_openat:H */
834515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
8351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
836945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
8371fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
8381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
8391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
845c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
846945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
847945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
8485643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8492bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
850a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
851945aea22SJiri Olsa 
852945aea22SJiri Olsa 	/* group1 cycles:kppp */
853e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8559854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
8561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
859945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
8601fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8611fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 3);
863fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
864945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
8652bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
866a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
867945aea22SJiri Olsa 
868945aea22SJiri Olsa 	/* group2 cycles + G modifier */
869e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
8701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8719854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
8721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
878c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
879945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
880945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
8815643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8822bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
883a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
884945aea22SJiri Olsa 
885945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
886e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
8871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
8889854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 3));
8891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
8921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
8941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
895fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8962bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
897a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
898945aea22SJiri Olsa 
899945aea22SJiri Olsa 	/* instructions:u */
900e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9029854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
9031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
9051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
906943b69acSJin Yao 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
909c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
910a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
911945aea22SJiri Olsa 
9127741e03eSIan Rogers 	return TEST_OK;
913945aea22SJiri Olsa }
914378ef0f5SIan Rogers #endif
915945aea22SJiri Olsa 
91663503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
917945aea22SJiri Olsa {
91832dcd021SJiri Olsa 	struct evsel *evsel, *leader;
919945aea22SJiri Olsa 
9206484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
9219d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
922945aea22SJiri Olsa 
923945aea22SJiri Olsa 	/* cycles:u + p */
924515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9269854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
9271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
9291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
930945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
9311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
934945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
935c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9365643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9372bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
938a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
939945aea22SJiri Olsa 
940945aea22SJiri Olsa 	/* instructions:kp + p */
941e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9439854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
9441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
9451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
947945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
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 == 2);
951fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9522bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
953a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
954945aea22SJiri Olsa 
9557741e03eSIan Rogers 	return TEST_OK;
956945aea22SJiri Olsa }
957945aea22SJiri Olsa 
95863503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
959945aea22SJiri Olsa {
96032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
961945aea22SJiri Olsa 
9626484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries);
9639d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
964945aea22SJiri Olsa 
965945aea22SJiri Olsa 	/* cycles + G */
966515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
9671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9689854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
9691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9711fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9721fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
975945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
976c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9775643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9782bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
979a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
980945aea22SJiri Olsa 
981945aea22SJiri Olsa 	/* instructions + G */
982e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
9831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9849854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
9851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
9901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
991fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
9922bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
993a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
994945aea22SJiri Olsa 
995945aea22SJiri Olsa 	/* cycles:G */
996e470daeaSArnaldo Carvalho de Melo 	evsel = leader = evsel__next(evsel);
9971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9989854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
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);
1005945aea22SJiri 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);
1009a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
1010945aea22SJiri Olsa 
1011945aea22SJiri Olsa 	/* instructions:G */
1012e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10149854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
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);
1023945aea22SJiri Olsa 
1024945aea22SJiri Olsa 	/* cycles */
1025e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10279854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1034c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
1035945aea22SJiri Olsa 
10367741e03eSIan Rogers 	return TEST_OK;
1037945aea22SJiri Olsa }
1038945aea22SJiri Olsa 
103963503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
10405a30a99fSJiri Olsa {
104132dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10425a30a99fSJiri Olsa 
10436484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10449d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10455a30a99fSJiri Olsa 
10465a30a99fSJiri Olsa 	/* cycles + :H group modifier */
1047515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10481fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10499854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10565a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1057c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10585643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10592bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10605a30a99fSJiri Olsa 
10615a30a99fSJiri Olsa 	/* cache-misses:G + :H group modifier */
1062e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
10631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10649854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
10651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1071fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10722bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
10735a30a99fSJiri Olsa 
10747741e03eSIan Rogers 	return TEST_OK;
10755a30a99fSJiri Olsa }
10765a30a99fSJiri Olsa 
107763503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
10785a30a99fSJiri Olsa {
107932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
10805a30a99fSJiri Olsa 
10816484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
10829d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
10835a30a99fSJiri Olsa 
10845a30a99fSJiri Olsa 	/* cycles + :G group modifier */
1085515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
10861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10879854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10891fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
10945a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1095c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10965643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10972bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
10985a30a99fSJiri Olsa 
10995a30a99fSJiri Olsa 	/* cache-misses:H + :G group modifier */
1100e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11029854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
11031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1109fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11102bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11115a30a99fSJiri Olsa 
11127741e03eSIan Rogers 	return TEST_OK;
11135a30a99fSJiri Olsa }
11145a30a99fSJiri Olsa 
111563503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
11165a30a99fSJiri Olsa {
111732dcd021SJiri Olsa 	struct evsel *evsel, *leader;
11185a30a99fSJiri Olsa 
11196484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
11209d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
11215a30a99fSJiri Olsa 
11225a30a99fSJiri Olsa 	/* cycles:G + :u group modifier */
1123515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11259854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11325a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1133c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11345643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11352bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11365a30a99fSJiri Olsa 
11375a30a99fSJiri Olsa 	/* cache-misses:H + :u group modifier */
1138e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11409854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
11411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11421fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1147fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11482bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11495a30a99fSJiri Olsa 
11507741e03eSIan Rogers 	return TEST_OK;
11515a30a99fSJiri Olsa }
11525a30a99fSJiri Olsa 
115363503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
11545a30a99fSJiri Olsa {
115532dcd021SJiri Olsa 	struct evsel *evsel, *leader;
11565a30a99fSJiri Olsa 
11576484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
11589d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
11595a30a99fSJiri Olsa 
11605a30a99fSJiri Olsa 	/* cycles:G + :uG group modifier */
1161515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11621fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11639854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11705a30a99fSJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1171c754c382SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11725643b1a5SJiri Olsa 	TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11732bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11745a30a99fSJiri Olsa 
11755a30a99fSJiri Olsa 	/* cache-misses:H + :uG group modifier */
1176e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
11771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11789854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
11791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
11811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
11821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1185fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11862bb72dbbSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
11875a30a99fSJiri Olsa 
11887741e03eSIan Rogers 	return TEST_OK;
11895a30a99fSJiri Olsa }
11905a30a99fSJiri Olsa 
119163503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1192a9f93f97SJiri Olsa {
119332dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1194a9f93f97SJiri Olsa 
11956484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1196a9f93f97SJiri Olsa 
1197a9f93f97SJiri Olsa 	/* cycles - sampling group leader */
1198515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
11991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12009854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
12011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12021fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1207a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1208fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1209a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1210a9f93f97SJiri Olsa 
1211a9f93f97SJiri Olsa 	/* cache-misses - not sampling */
1212e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12149854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
12151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1221fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1222a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1223a9f93f97SJiri Olsa 
1224a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1225e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12279854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
12281fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1234a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1235fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1236a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1237a9f93f97SJiri Olsa 
12387741e03eSIan Rogers 	return TEST_OK;
1239a9f93f97SJiri Olsa }
1240a9f93f97SJiri Olsa 
124163503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1242a9f93f97SJiri Olsa {
124332dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1244a9f93f97SJiri Olsa 
12456484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
1246a9f93f97SJiri Olsa 
1247a9f93f97SJiri Olsa 	/* instructions - sampling group leader */
1248515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12509854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
12511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12561fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1257a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1258fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1259a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1260a9f93f97SJiri Olsa 
1261a9f93f97SJiri Olsa 	/* branch-misses - not sampling */
1262e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
12631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12649854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
12651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1271a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1272fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1273a9f93f97SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1274a9f93f97SJiri Olsa 
12757741e03eSIan Rogers 	return TEST_OK;
1276a9f93f97SJiri Olsa }
1277a9f93f97SJiri Olsa 
127863503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1279c9ee780fSMichael Ellerman {
1280515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1281c9ee780fSMichael Ellerman 
12821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12831fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
12861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1287c9ee780fSMichael Ellerman 
1288c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1289c9ee780fSMichael Ellerman }
1290c9ee780fSMichael Ellerman 
129163503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1292c9ee780fSMichael Ellerman {
129332dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1294c9ee780fSMichael Ellerman 
12956484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
1296c9ee780fSMichael Ellerman 
1297c9ee780fSMichael Ellerman 	/* cycles - group leader */
1298515dbe48SJiri Olsa 	evsel = leader = evlist__first(evlist);
12991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13009854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
1301c9ee780fSMichael Ellerman 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1302fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1304c9ee780fSMichael Ellerman 
1305c9ee780fSMichael Ellerman 	/* cache-misses - can not be pinned, but will go on with the leader */
1306e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
13071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13089854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
13091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1310c9ee780fSMichael Ellerman 
1311c9ee780fSMichael Ellerman 	/* branch-misses - ditto */
1312e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
13139854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
13141fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1315c9ee780fSMichael Ellerman 
13167741e03eSIan Rogers 	return TEST_OK;
1317c9ee780fSMichael Ellerman }
1318c9ee780fSMichael Ellerman 
13190997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist)
13200997a266SAndi Kleen {
13210997a266SAndi Kleen 	struct evsel *evsel = evlist__first(evlist);
13220997a266SAndi Kleen 
13230997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13240997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13250997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13260997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
13270997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13280997a266SAndi Kleen 
13290997a266SAndi Kleen 	return test__checkevent_symbolic_name(evlist);
13300997a266SAndi Kleen }
13310997a266SAndi Kleen 
13320997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist)
13330997a266SAndi Kleen {
13340997a266SAndi Kleen 	struct evsel *evsel, *leader;
13350997a266SAndi Kleen 
13360997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries);
13370997a266SAndi Kleen 
13380997a266SAndi Kleen 	/* cycles - group leader */
13390997a266SAndi Kleen 	evsel = leader = evlist__first(evlist);
13400997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13419854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
13420997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1343fba7c866SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13440997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
13450997a266SAndi Kleen 
13460997a266SAndi Kleen 	/* cache-misses - can not be pinned, but will go on with the leader */
13470997a266SAndi Kleen 	evsel = evsel__next(evsel);
13480997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13499854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
13500997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13510997a266SAndi Kleen 
13520997a266SAndi Kleen 	/* branch-misses - ditto */
13530997a266SAndi Kleen 	evsel = evsel__next(evsel);
13549854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
13550997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
13560997a266SAndi Kleen 
13577741e03eSIan Rogers 	return TEST_OK;
13580997a266SAndi Kleen }
135963503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1360ec32398cSJacob Shin {
1361515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1362ec32398cSJacob Shin 
13636484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13659854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
1366ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
13671fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1368ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
13691fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1370ec32398cSJacob Shin 
13717741e03eSIan Rogers 	return TEST_OK;
1372ec32398cSJacob Shin }
1373ec32398cSJacob Shin 
137463503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1375ec32398cSJacob Shin {
1376515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1377ec32398cSJacob Shin 
13786484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
13791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
13809854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
1381ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
13821fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1383ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
13841fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1385ec32398cSJacob Shin 
13867741e03eSIan Rogers 	return TEST_OK;
1387ec32398cSJacob Shin }
1388ec32398cSJacob Shin 
1389ec32398cSJacob Shin static int
139063503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1391ec32398cSJacob Shin {
1392515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1393ec32398cSJacob Shin 
13941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1398ec32398cSJacob Shin 
1399ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1400ec32398cSJacob Shin }
1401ec32398cSJacob Shin 
140263503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1403ddd83c97SJiri Olsa {
1404515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1405ddd83c97SJiri Olsa 
14066484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
14071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
14089854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK));
14097741e03eSIan Rogers 	return TEST_OK;
1410ddd83c97SJiri Olsa }
1411ddd83c97SJiri Olsa 
141263503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
141310bf358aSWang Nan {
1414515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
141510bf358aSWang Nan 
1416ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn"));
14177741e03eSIan Rogers 	return TEST_OK;
141810bf358aSWang Nan }
141910bf358aSWang Nan 
142063503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
142110bf358aSWang Nan {
1422515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
142310bf358aSWang Nan 
1424ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu"));
14257741e03eSIan Rogers 	return TEST_OK;
142610bf358aSWang Nan }
142710bf358aSWang Nan 
142863503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
142910bf358aSWang Nan {
1430515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
143110bf358aSWang Nan 
1432ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu"));
14337741e03eSIan Rogers 	return TEST_OK;
143410bf358aSWang Nan }
143510bf358aSWang Nan 
143663503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
143743d0b978SWang Nan {
1438515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
143943d0b978SWang Nan 
1440ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu"));
14414a7c4eafSIan Rogers 	return test__checkevent_genhw(evlist);
144243d0b978SWang Nan }
144310bf358aSWang Nan 
14448f8c1068SIan Rogers static bool test__pmu_cpu_valid(void)
14458f8c1068SIan Rogers {
14468f8c1068SIan Rogers 	return !!perf_pmu__find("cpu");
14478f8c1068SIan Rogers }
14488f8c1068SIan Rogers 
144916ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
145016ddcfbfSJiri Olsa {
145116ddcfbfSJiri Olsa 	return !!perf_pmu__find("intel_pt");
145216ddcfbfSJiri Olsa }
145316ddcfbfSJiri Olsa 
145463503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1455b3f58c8dSArnaldo Carvalho de Melo {
1456515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1457b3f58c8dSArnaldo Carvalho de Melo 
1458ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u"));
14597741e03eSIan Rogers 	return TEST_OK;
1460b3f58c8dSArnaldo Carvalho de Melo }
1461b3f58c8dSArnaldo Carvalho de Melo 
146263503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
146306dc5bf2SAlexey Budankov {
1464515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
146506dc5bf2SAlexey Budankov 
14669854934bSIan Rogers 	TEST_ASSERT_VAL("wrong complex name parsing",
14679854934bSIan Rogers 			evsel__name_is(evsel,
14689854934bSIan Rogers 				       "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks"));
14697741e03eSIan Rogers 	return TEST_OK;
147006dc5bf2SAlexey Budankov }
147106dc5bf2SAlexey Budankov 
14723a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
14733a6c51e4SJiri Olsa {
14743a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
14753a6c51e4SJiri Olsa 
14763a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
14773a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
14789854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a));
14797741e03eSIan Rogers 	return TEST_OK;
14803a6c51e4SJiri Olsa }
14813a6c51e4SJiri Olsa 
148263503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1483714a92d8SJiri Olsa {
1484515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1485714a92d8SJiri Olsa 
14861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14879854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
14881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14897741e03eSIan Rogers 	return TEST_OK;
1490714a92d8SJiri Olsa }
1491714a92d8SJiri Olsa 
149263503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1493714a92d8SJiri Olsa {
1494515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1495714a92d8SJiri Olsa 
14961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
14979854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
14981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
14997741e03eSIan Rogers 	return TEST_OK;
1500714a92d8SJiri Olsa }
1501714a92d8SJiri Olsa 
1502378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
150382ce75d9SJiri Olsa static int count_tracepoints(void)
150482ce75d9SJiri Olsa {
150582ce75d9SJiri Olsa 	struct dirent *events_ent;
150682ce75d9SJiri Olsa 	DIR *events_dir;
150782ce75d9SJiri Olsa 	int cnt = 0;
150882ce75d9SJiri Olsa 
15097014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
151082ce75d9SJiri Olsa 
151182ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
151282ce75d9SJiri Olsa 
151382ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
151425a7d914SArnaldo Carvalho de Melo 		char *sys_path;
151582ce75d9SJiri Olsa 		struct dirent *sys_ent;
151682ce75d9SJiri Olsa 		DIR *sys_dir;
151782ce75d9SJiri Olsa 
151882ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
151982ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
152082ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
152182ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
152282ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
152382ce75d9SJiri Olsa 			continue;
152482ce75d9SJiri Olsa 
152525a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
152625a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
152782ce75d9SJiri Olsa 
152882ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
152982ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
153082ce75d9SJiri Olsa 
153182ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
153282ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
153382ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
153482ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
153582ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
153682ce75d9SJiri Olsa 				continue;
153782ce75d9SJiri Olsa 
153882ce75d9SJiri Olsa 			cnt++;
153982ce75d9SJiri Olsa 		}
154082ce75d9SJiri Olsa 
154182ce75d9SJiri Olsa 		closedir(sys_dir);
154225a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
154382ce75d9SJiri Olsa 	}
154482ce75d9SJiri Olsa 
154582ce75d9SJiri Olsa 	closedir(events_dir);
154682ce75d9SJiri Olsa 	return cnt;
154782ce75d9SJiri Olsa }
154882ce75d9SJiri Olsa 
154963503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
155082ce75d9SJiri Olsa {
155182ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
15526484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
155382ce75d9SJiri Olsa 
155482ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
155582ce75d9SJiri Olsa }
1556378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */
155782ce75d9SJiri Olsa 
155823b6339bSArnaldo Carvalho de Melo struct evlist_test {
1559945aea22SJiri Olsa 	const char *name;
156016ddcfbfSJiri Olsa 	bool (*valid)(void);
156163503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1562945aea22SJiri Olsa };
1563945aea22SJiri Olsa 
15648252e791SIan Rogers static const struct evlist_test test__events[] = {
1565378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1566615b8f99SAlexander Yarygin 	{
156743f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1568945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
15698252e791SIan Rogers 		/* 0 */
1570945aea22SJiri Olsa 	},
1571615b8f99SAlexander Yarygin 	{
1572945aea22SJiri Olsa 		.name  = "syscalls:*",
1573945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
15748252e791SIan Rogers 		/* 1 */
1575945aea22SJiri Olsa 	},
1576378ef0f5SIan Rogers #endif
1577615b8f99SAlexander Yarygin 	{
1578945aea22SJiri Olsa 		.name  = "r1a",
1579945aea22SJiri Olsa 		.check = test__checkevent_raw,
15808252e791SIan Rogers 		/* 2 */
1581945aea22SJiri Olsa 	},
1582615b8f99SAlexander Yarygin 	{
1583945aea22SJiri Olsa 		.name  = "1:1",
1584945aea22SJiri Olsa 		.check = test__checkevent_numeric,
15858252e791SIan Rogers 		/* 3 */
1586945aea22SJiri Olsa 	},
1587615b8f99SAlexander Yarygin 	{
1588945aea22SJiri Olsa 		.name  = "instructions",
1589945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
15908252e791SIan Rogers 		/* 4 */
1591945aea22SJiri Olsa 	},
1592615b8f99SAlexander Yarygin 	{
1593945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1594945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
15958252e791SIan Rogers 		/* 5 */
1596945aea22SJiri Olsa 	},
1597615b8f99SAlexander Yarygin 	{
1598945aea22SJiri Olsa 		.name  = "faults",
1599945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
16008252e791SIan Rogers 		/* 6 */
1601945aea22SJiri Olsa 	},
1602615b8f99SAlexander Yarygin 	{
1603945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1604945aea22SJiri Olsa 		.check = test__checkevent_genhw,
16058252e791SIan Rogers 		/* 7 */
1606945aea22SJiri Olsa 	},
1607615b8f99SAlexander Yarygin 	{
1608945aea22SJiri Olsa 		.name  = "mem:0",
1609945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
16108252e791SIan Rogers 		/* 8 */
1611945aea22SJiri Olsa 	},
1612615b8f99SAlexander Yarygin 	{
1613945aea22SJiri Olsa 		.name  = "mem:0:x",
1614945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
16158252e791SIan Rogers 		/* 9 */
1616945aea22SJiri Olsa 	},
1617615b8f99SAlexander Yarygin 	{
1618945aea22SJiri Olsa 		.name  = "mem:0:r",
1619945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
16208252e791SIan Rogers 		/* 0 */
1621945aea22SJiri Olsa 	},
1622615b8f99SAlexander Yarygin 	{
1623945aea22SJiri Olsa 		.name  = "mem:0:w",
1624945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
16258252e791SIan Rogers 		/* 1 */
1626945aea22SJiri Olsa 	},
1627378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1628615b8f99SAlexander Yarygin 	{
162943f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1630945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
16318252e791SIan Rogers 		/* 2 */
1632945aea22SJiri Olsa 	},
1633615b8f99SAlexander Yarygin 	{
1634945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1635945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
16368252e791SIan Rogers 		/* 3 */
1637945aea22SJiri Olsa 	},
1638378ef0f5SIan Rogers #endif
1639615b8f99SAlexander Yarygin 	{
1640945aea22SJiri Olsa 		.name  = "r1a:kp",
1641945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
16428252e791SIan Rogers 		/* 4 */
1643945aea22SJiri Olsa 	},
1644615b8f99SAlexander Yarygin 	{
1645945aea22SJiri Olsa 		.name  = "1:1:hp",
1646945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
16478252e791SIan Rogers 		/* 5 */
1648945aea22SJiri Olsa 	},
1649615b8f99SAlexander Yarygin 	{
1650945aea22SJiri Olsa 		.name  = "instructions:h",
1651945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
16528252e791SIan Rogers 		/* 6 */
1653945aea22SJiri Olsa 	},
1654615b8f99SAlexander Yarygin 	{
1655945aea22SJiri Olsa 		.name  = "faults:u",
1656945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
16578252e791SIan Rogers 		/* 7 */
1658945aea22SJiri Olsa 	},
1659615b8f99SAlexander Yarygin 	{
1660945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1661945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
16628252e791SIan Rogers 		/* 8 */
1663945aea22SJiri Olsa 	},
1664615b8f99SAlexander Yarygin 	{
1665945aea22SJiri Olsa 		.name  = "mem:0:u",
1666945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
16678252e791SIan Rogers 		/* 9 */
1668945aea22SJiri Olsa 	},
1669615b8f99SAlexander Yarygin 	{
1670945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1671945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
16728252e791SIan Rogers 		/* 0 */
1673945aea22SJiri Olsa 	},
1674615b8f99SAlexander Yarygin 	{
1675945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1676945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
16778252e791SIan Rogers 		/* 1 */
1678945aea22SJiri Olsa 	},
1679615b8f99SAlexander Yarygin 	{
1680945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1681945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
16828252e791SIan Rogers 		/* 2 */
1683945aea22SJiri Olsa 	},
1684378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1685615b8f99SAlexander Yarygin 	{
168643f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1687945aea22SJiri Olsa 		.check = test__checkevent_list,
16888252e791SIan Rogers 		/* 3 */
1689945aea22SJiri Olsa 	},
1690378ef0f5SIan Rogers #endif
1691615b8f99SAlexander Yarygin 	{
1692945aea22SJiri Olsa 		.name  = "instructions:G",
1693945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
16948252e791SIan Rogers 		/* 4 */
1695945aea22SJiri Olsa 	},
1696615b8f99SAlexander Yarygin 	{
1697945aea22SJiri Olsa 		.name  = "instructions:H",
1698945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
16998252e791SIan Rogers 		/* 5 */
1700945aea22SJiri Olsa 	},
1701615b8f99SAlexander Yarygin 	{
1702945aea22SJiri Olsa 		.name  = "mem:0:rw",
1703945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
17048252e791SIan Rogers 		/* 6 */
1705945aea22SJiri Olsa 	},
1706615b8f99SAlexander Yarygin 	{
1707945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1708945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
17098252e791SIan Rogers 		/* 7 */
1710945aea22SJiri Olsa 	},
1711615b8f99SAlexander Yarygin 	{
1712945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1713945aea22SJiri Olsa 		.check = test__group1,
17148252e791SIan Rogers 		/* 8 */
1715945aea22SJiri Olsa 	},
1716615b8f99SAlexander Yarygin 	{
1717945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1718945aea22SJiri Olsa 		.check = test__group2,
17198252e791SIan Rogers 		/* 9 */
1720945aea22SJiri Olsa 	},
1721378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1722615b8f99SAlexander Yarygin 	{
172343f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1724945aea22SJiri Olsa 		.check = test__group3,
17258252e791SIan Rogers 		/* 0 */
1726945aea22SJiri Olsa 	},
1727378ef0f5SIan Rogers #endif
1728615b8f99SAlexander Yarygin 	{
1729945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1730945aea22SJiri Olsa 		.check = test__group4,
17318252e791SIan Rogers 		/* 1 */
1732945aea22SJiri Olsa 	},
1733615b8f99SAlexander Yarygin 	{
1734945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1735945aea22SJiri Olsa 		.check = test__group5,
17368252e791SIan Rogers 		/* 2 */
1737945aea22SJiri Olsa 	},
1738378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1739615b8f99SAlexander Yarygin 	{
174082ce75d9SJiri Olsa 		.name  = "*:*",
174182ce75d9SJiri Olsa 		.check = test__all_tracepoints,
17428252e791SIan Rogers 		/* 3 */
174382ce75d9SJiri Olsa 	},
1744378ef0f5SIan Rogers #endif
1745615b8f99SAlexander Yarygin 	{
17465a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
17475a30a99fSJiri Olsa 		.check = test__group_gh1,
17488252e791SIan Rogers 		/* 4 */
17495a30a99fSJiri Olsa 	},
1750615b8f99SAlexander Yarygin 	{
17515a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
17525a30a99fSJiri Olsa 		.check = test__group_gh2,
17538252e791SIan Rogers 		/* 5 */
17545a30a99fSJiri Olsa 	},
1755615b8f99SAlexander Yarygin 	{
17565a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
17575a30a99fSJiri Olsa 		.check = test__group_gh3,
17588252e791SIan Rogers 		/* 6 */
17595a30a99fSJiri Olsa 	},
1760615b8f99SAlexander Yarygin 	{
17615a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
17625a30a99fSJiri Olsa 		.check = test__group_gh4,
17638252e791SIan Rogers 		/* 7 */
17645a30a99fSJiri Olsa 	},
1765615b8f99SAlexander Yarygin 	{
1766a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1767a9f93f97SJiri Olsa 		.check = test__leader_sample1,
17688252e791SIan Rogers 		/* 8 */
1769a9f93f97SJiri Olsa 	},
1770615b8f99SAlexander Yarygin 	{
1771a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1772a9f93f97SJiri Olsa 		.check = test__leader_sample2,
17738252e791SIan Rogers 		/* 9 */
1774a9f93f97SJiri Olsa 	},
1775615b8f99SAlexander Yarygin 	{
1776c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1777c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
17788252e791SIan Rogers 		/* 0 */
1779c9ee780fSMichael Ellerman 	},
1780615b8f99SAlexander Yarygin 	{
1781c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1782c9ee780fSMichael Ellerman 		.check = test__pinned_group,
17838252e791SIan Rogers 		/* 1 */
1784c9ee780fSMichael Ellerman 	},
1785ec32398cSJacob Shin 	{
1786ec32398cSJacob Shin 		.name  = "mem:0/1",
1787ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
17888252e791SIan Rogers 		/* 2 */
1789ec32398cSJacob Shin 	},
1790ec32398cSJacob Shin 	{
1791ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1792ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
17938252e791SIan Rogers 		/* 3 */
1794ec32398cSJacob Shin 	},
1795ec32398cSJacob Shin 	{
1796ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1797ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
17988252e791SIan Rogers 		/* 4 */
1799ec32398cSJacob Shin 	},
1800378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT)
1801c0bc8c6dSAlexander Yarygin 	{
1802c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1803c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
180453fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
18058252e791SIan Rogers 		/* 0 */
1806c0bc8c6dSAlexander Yarygin 	},
1807c0bc8c6dSAlexander Yarygin #endif
1808a1e12da4SJiri Olsa 	{
1809a1e12da4SJiri Olsa 		.name  = "instructions:I",
1810a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
18118252e791SIan Rogers 		/* 5 */
1812a1e12da4SJiri Olsa 	},
1813a1e12da4SJiri Olsa 	{
1814a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1815a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
18168252e791SIan Rogers 		/* 6 */
1817a1e12da4SJiri Olsa 	},
1818ddd83c97SJiri Olsa 	{
1819ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1820ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
18218252e791SIan Rogers 		/* 7 */
1822ddd83c97SJiri Olsa 	},
182310bf358aSWang Nan 	{
182410bf358aSWang Nan 		.name  = "instructions/name=insn/",
182510bf358aSWang Nan 		.check = test__checkevent_config_symbol,
18268252e791SIan Rogers 		/* 8 */
182710bf358aSWang Nan 	},
182810bf358aSWang Nan 	{
182910bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
183010bf358aSWang Nan 		.check = test__checkevent_config_raw,
18318252e791SIan Rogers 		/* 9 */
183210bf358aSWang Nan 	},
183310bf358aSWang Nan 	{
183410bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
183510bf358aSWang Nan 		.check = test__checkevent_config_num,
18368252e791SIan Rogers 		/* 0 */
183710bf358aSWang Nan 	},
183843d0b978SWang Nan 	{
183943d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
184043d0b978SWang Nan 		.check = test__checkevent_config_cache,
18418252e791SIan Rogers 		/* 1 */
184243d0b978SWang Nan 	},
1843b3f58c8dSArnaldo Carvalho de Melo 	{
1844b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
184516ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1846b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
18478252e791SIan Rogers 		/* 2 */
1848b3f58c8dSArnaldo Carvalho de Melo 	},
184906dc5bf2SAlexey Budankov 	{
185006dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
185106dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
18528252e791SIan Rogers 		/* 3 */
1853714a92d8SJiri Olsa 	},
1854714a92d8SJiri Olsa 	{
1855714a92d8SJiri Olsa 		.name  = "cycles//u",
1856714a92d8SJiri Olsa 		.check = test__sym_event_slash,
18578252e791SIan Rogers 		/* 4 */
1858714a92d8SJiri Olsa 	},
1859714a92d8SJiri Olsa 	{
1860714a92d8SJiri Olsa 		.name  = "cycles:k",
1861714a92d8SJiri Olsa 		.check = test__sym_event_dc,
18628252e791SIan Rogers 		/* 5 */
18630997a266SAndi Kleen 	},
18640997a266SAndi Kleen 	{
18650997a266SAndi Kleen 		.name  = "instructions:uep",
18660997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
18678252e791SIan Rogers 		/* 6 */
18680997a266SAndi Kleen 	},
18690997a266SAndi Kleen 	{
18700997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
18710997a266SAndi Kleen 		.check = test__exclusive_group,
18728252e791SIan Rogers 		/* 7 */
18730997a266SAndi Kleen 	},
1874945aea22SJiri Olsa };
1875945aea22SJiri Olsa 
18768252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
1877615b8f99SAlexander Yarygin 	{
1878945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
18798f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
1880945aea22SJiri Olsa 		.check = test__checkevent_pmu,
18818252e791SIan Rogers 		/* 0 */
1882945aea22SJiri Olsa 	},
1883615b8f99SAlexander Yarygin 	{
1884945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
18858f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
1886945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
18878252e791SIan Rogers 		/* 1 */
1888945aea22SJiri Olsa 	},
188971ef150eSKan Liang 	{
189071ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
18918f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
189271ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
18938252e791SIan Rogers 		/* 2 */
189471ef150eSKan Liang 	},
189506dc5bf2SAlexey Budankov 	{
1896a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
18978f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
189806dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
18998252e791SIan Rogers 		/* 3 */
19003a6c51e4SJiri Olsa 	},
19013a6c51e4SJiri Olsa 	{
19023a6c51e4SJiri Olsa 		.name  = "software/r1a/",
19033a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
19048252e791SIan Rogers 		/* 4 */
19053a6c51e4SJiri Olsa 	},
1906c33cdf54SJiri Olsa 	{
1907c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
1908c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
19098252e791SIan Rogers 		/* 5 */
1910c33cdf54SJiri Olsa 	},
19116fd1e519SIan Rogers 	{
19126fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/",
19136fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
19146fd1e519SIan Rogers 		.check = test__checkevent_genhw,
19156fd1e519SIan Rogers 		/* 6 */
19166fd1e519SIan Rogers 	},
19176fd1e519SIan Rogers 	{
19186fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/kp",
19196fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
19206fd1e519SIan Rogers 		.check = test__checkevent_genhw_modifier,
19216fd1e519SIan Rogers 		/* 7 */
19226fd1e519SIan Rogers 	},
19236fd1e519SIan Rogers 	{
19246fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-misses,name=cachepmu/",
19256fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
19266fd1e519SIan Rogers 		.check = test__checkevent_config_cache,
19276fd1e519SIan Rogers 		/* 8 */
19286fd1e519SIan Rogers 	},
1929*5ea8f2ccSIan Rogers 	{
1930*5ea8f2ccSIan Rogers 		.name  = "cpu/instructions/",
1931*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1932*5ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name,
1933*5ea8f2ccSIan Rogers 		/* 9 */
1934*5ea8f2ccSIan Rogers 	},
1935*5ea8f2ccSIan Rogers 	{
1936*5ea8f2ccSIan Rogers 		.name  = "cpu/cycles,period=100000,config2/",
1937*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1938*5ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name_config,
1939*5ea8f2ccSIan Rogers 		/* 0 */
1940*5ea8f2ccSIan Rogers 	},
1941*5ea8f2ccSIan Rogers 	{
1942*5ea8f2ccSIan Rogers 		.name  = "cpu/instructions/h",
1943*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1944*5ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name_modifier,
1945*5ea8f2ccSIan Rogers 		/* 1 */
1946*5ea8f2ccSIan Rogers 	},
1947*5ea8f2ccSIan Rogers 	{
1948*5ea8f2ccSIan Rogers 		.name  = "cpu/instructions/G",
1949*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1950*5ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_host_modifier,
1951*5ea8f2ccSIan Rogers 		/* 2 */
1952*5ea8f2ccSIan Rogers 	},
1953*5ea8f2ccSIan Rogers 	{
1954*5ea8f2ccSIan Rogers 		.name  = "cpu/instructions/H",
1955*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1956*5ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_guest_modifier,
1957*5ea8f2ccSIan Rogers 		/* 3 */
1958*5ea8f2ccSIan Rogers 	},
1959*5ea8f2ccSIan Rogers 	{
1960*5ea8f2ccSIan Rogers 		.name  = "{cpu/instructions/k,cpu/cycles/upp}",
1961*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1962*5ea8f2ccSIan Rogers 		.check = test__group1,
1963*5ea8f2ccSIan Rogers 		/* 4 */
1964*5ea8f2ccSIan Rogers 	},
1965*5ea8f2ccSIan Rogers 	{
1966*5ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/u,cpu/instructions/kp}:p",
1967*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1968*5ea8f2ccSIan Rogers 		.check = test__group4,
1969*5ea8f2ccSIan Rogers 		/* 5 */
1970*5ea8f2ccSIan Rogers 	},
1971*5ea8f2ccSIan Rogers 	{
1972*5ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/G}:H",
1973*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1974*5ea8f2ccSIan Rogers 		.check = test__group_gh1,
1975*5ea8f2ccSIan Rogers 		/* 6 */
1976*5ea8f2ccSIan Rogers 	},
1977*5ea8f2ccSIan Rogers 	{
1978*5ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/H}:G",
1979*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1980*5ea8f2ccSIan Rogers 		.check = test__group_gh2,
1981*5ea8f2ccSIan Rogers 		/* 7 */
1982*5ea8f2ccSIan Rogers 	},
1983*5ea8f2ccSIan Rogers 	{
1984*5ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/G,cpu/cache-misses/H}:u",
1985*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1986*5ea8f2ccSIan Rogers 		.check = test__group_gh3,
1987*5ea8f2ccSIan Rogers 		/* 8 */
1988*5ea8f2ccSIan Rogers 	},
1989*5ea8f2ccSIan Rogers 	{
1990*5ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/G,cpu/cache-misses/H}:uG",
1991*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1992*5ea8f2ccSIan Rogers 		.check = test__group_gh4,
1993*5ea8f2ccSIan Rogers 		/* 9 */
1994*5ea8f2ccSIan Rogers 	},
1995*5ea8f2ccSIan Rogers 	{
1996*5ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S",
1997*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
1998*5ea8f2ccSIan Rogers 		.check = test__leader_sample1,
1999*5ea8f2ccSIan Rogers 		/* 0 */
2000*5ea8f2ccSIan Rogers 	},
2001*5ea8f2ccSIan Rogers 	{
2002*5ea8f2ccSIan Rogers 		.name  = "{cpu/instructions/,cpu/branch-misses/}:Su",
2003*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2004*5ea8f2ccSIan Rogers 		.check = test__leader_sample2,
2005*5ea8f2ccSIan Rogers 		/* 1 */
2006*5ea8f2ccSIan Rogers 	},
2007*5ea8f2ccSIan Rogers 	{
2008*5ea8f2ccSIan Rogers 		.name  = "cpu/instructions/uDp",
2009*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2010*5ea8f2ccSIan Rogers 		.check = test__checkevent_pinned_modifier,
2011*5ea8f2ccSIan Rogers 		/* 2 */
2012*5ea8f2ccSIan Rogers 	},
2013*5ea8f2ccSIan Rogers 	{
2014*5ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D",
2015*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2016*5ea8f2ccSIan Rogers 		.check = test__pinned_group,
2017*5ea8f2ccSIan Rogers 		/* 3 */
2018*5ea8f2ccSIan Rogers 	},
2019*5ea8f2ccSIan Rogers 	{
2020*5ea8f2ccSIan Rogers 		.name  = "cpu/instructions/I",
2021*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2022*5ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_idle_modifier,
2023*5ea8f2ccSIan Rogers 		/* 4 */
2024*5ea8f2ccSIan Rogers 	},
2025*5ea8f2ccSIan Rogers 	{
2026*5ea8f2ccSIan Rogers 		.name  = "cpu/instructions/kIG",
2027*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2028*5ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_idle_modifier_1,
2029*5ea8f2ccSIan Rogers 		/* 5 */
2030*5ea8f2ccSIan Rogers 	},
2031*5ea8f2ccSIan Rogers 	{
2032*5ea8f2ccSIan Rogers 		.name  = "cpu/cycles/u",
2033*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2034*5ea8f2ccSIan Rogers 		.check = test__sym_event_slash,
2035*5ea8f2ccSIan Rogers 		/* 6 */
2036*5ea8f2ccSIan Rogers 	},
2037*5ea8f2ccSIan Rogers 	{
2038*5ea8f2ccSIan Rogers 		.name  = "cpu/cycles/k",
2039*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2040*5ea8f2ccSIan Rogers 		.check = test__sym_event_dc,
2041*5ea8f2ccSIan Rogers 		/* 7 */
2042*5ea8f2ccSIan Rogers 	},
2043*5ea8f2ccSIan Rogers 	{
2044*5ea8f2ccSIan Rogers 		.name  = "cpu/instructions/uep",
2045*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2046*5ea8f2ccSIan Rogers 		.check = test__checkevent_exclusive_modifier,
2047*5ea8f2ccSIan Rogers 		/* 8 */
2048*5ea8f2ccSIan Rogers 	},
2049*5ea8f2ccSIan Rogers 	{
2050*5ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e",
2051*5ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2052*5ea8f2ccSIan Rogers 		.check = test__exclusive_group,
2053*5ea8f2ccSIan Rogers 		/* 9 */
2054*5ea8f2ccSIan Rogers 	},
2055945aea22SJiri Olsa };
2056945aea22SJiri Olsa 
205723b6339bSArnaldo Carvalho de Melo struct terms_test {
2058945aea22SJiri Olsa 	const char *str;
2059945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
2060945aea22SJiri Olsa };
2061945aea22SJiri Olsa 
2062b58eca40SIan Rogers static const struct terms_test test__terms[] = {
2063945aea22SJiri Olsa 	[0] = {
2064204e7c49SRob Herring 		.str   = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead",
2065945aea22SJiri Olsa 		.check = test__checkterms_simple,
2066945aea22SJiri Olsa 	},
2067945aea22SJiri Olsa };
2068945aea22SJiri Olsa 
20698252e791SIan Rogers static int test_event(const struct evlist_test *e)
2070945aea22SJiri Olsa {
2071a910e466SIan Rogers 	struct parse_events_error err;
207263503dbaSJiri Olsa 	struct evlist *evlist;
2073945aea22SJiri Olsa 	int ret;
2074945aea22SJiri Olsa 
207516ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
20767741e03eSIan Rogers 		pr_debug("... SKIP\n");
20777741e03eSIan Rogers 		return TEST_OK;
207816ddcfbfSJiri Olsa 	}
207916ddcfbfSJiri Olsa 
20800f98b11cSJiri Olsa 	evlist = evlist__new();
20817741e03eSIan Rogers 	if (evlist == NULL) {
20827741e03eSIan Rogers 		pr_err("Failed allocation");
20837741e03eSIan Rogers 		return TEST_FAIL;
20847741e03eSIan Rogers 	}
208507eafd4eSIan Rogers 	parse_events_error__init(&err);
2086933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
2087945aea22SJiri Olsa 	if (ret) {
2088933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2089933ccf20SJiri Olsa 			 e->name, ret, err.str);
20906c191289SIan Rogers 		parse_events_error__print(&err, e->name);
20917741e03eSIan Rogers 		ret = TEST_FAIL;
2092aefde50aSIan Rogers 		if (err.str && strstr(err.str, "can't access trace events"))
20937741e03eSIan Rogers 			ret = TEST_SKIP;
20942d4352c0SArnaldo Carvalho de Melo 	} else {
20952d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
2096945aea22SJiri Olsa 	}
209707eafd4eSIan Rogers 	parse_events_error__exit(&err);
2098c12995a5SJiri Olsa 	evlist__delete(evlist);
2099945aea22SJiri Olsa 
2100945aea22SJiri Olsa 	return ret;
2101945aea22SJiri Olsa }
2102945aea22SJiri Olsa 
2103b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
2104b4a7276cSJohn Garry {
2105b4a7276cSJohn Garry 	struct parse_events_error err;
2106b4a7276cSJohn Garry 	struct evlist *evlist;
2107b4a7276cSJohn Garry 	int ret;
2108b4a7276cSJohn Garry 
2109b4a7276cSJohn Garry 	evlist = evlist__new();
2110b4a7276cSJohn Garry 	if (!evlist)
2111b4a7276cSJohn Garry 		return -ENOMEM;
2112b4a7276cSJohn Garry 
2113b4a7276cSJohn Garry 	parse_events_error__init(&err);
2114411ad22eSIan Rogers 	ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err,
2115411ad22eSIan Rogers 			     &perf_pmu__fake, /*warn_if_reordered=*/true);
2116b4a7276cSJohn Garry 	if (ret) {
2117b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2118b4a7276cSJohn Garry 			 str, ret, err.str);
2119b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
2120b4a7276cSJohn Garry 	}
2121b4a7276cSJohn Garry 
2122b4a7276cSJohn Garry 	parse_events_error__exit(&err);
2123b4a7276cSJohn Garry 	evlist__delete(evlist);
2124b4a7276cSJohn Garry 
2125b4a7276cSJohn Garry 	return ret;
2126b4a7276cSJohn Garry }
2127b4a7276cSJohn Garry 
21287741e03eSIan Rogers static int combine_test_results(int existing, int latest)
21297741e03eSIan Rogers {
21307741e03eSIan Rogers 	if (existing == TEST_FAIL)
21317741e03eSIan Rogers 		return TEST_FAIL;
21327741e03eSIan Rogers 	if (existing == TEST_SKIP)
21337741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
21347741e03eSIan Rogers 	return latest;
21357741e03eSIan Rogers }
21367741e03eSIan Rogers 
21378252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
2138945aea22SJiri Olsa {
21397741e03eSIan Rogers 	int ret = TEST_OK;
2140945aea22SJiri Olsa 
21418252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
21428252e791SIan Rogers 		const struct evlist_test *e = &events[i];
21437741e03eSIan Rogers 		int test_ret;
2144945aea22SJiri Olsa 
21457741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
21467741e03eSIan Rogers 		test_ret = test_event(e);
21477741e03eSIan Rogers 		if (test_ret != TEST_OK) {
21487741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
21497741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
21507741e03eSIan Rogers 		}
2151945aea22SJiri Olsa 	}
2152945aea22SJiri Olsa 
21537741e03eSIan Rogers 	return ret;
21547741e03eSIan Rogers }
21557741e03eSIan Rogers 
21567741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21577741e03eSIan Rogers {
21587741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2159945aea22SJiri Olsa }
2160945aea22SJiri Olsa 
2161b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2162945aea22SJiri Olsa {
2163c549aca5SDavid Ahern 	struct list_head terms;
2164945aea22SJiri Olsa 	int ret;
2165945aea22SJiri Olsa 
2166c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2167945aea22SJiri Olsa 
2168c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2169945aea22SJiri Olsa 	if (ret) {
2170945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2171945aea22SJiri Olsa 			 t->str , ret);
2172945aea22SJiri Olsa 		return ret;
2173945aea22SJiri Olsa 	}
2174945aea22SJiri Olsa 
2175c549aca5SDavid Ahern 	ret = t->check(&terms);
2176682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2177945aea22SJiri Olsa 
2178945aea22SJiri Olsa 	return ret;
2179945aea22SJiri Olsa }
2180945aea22SJiri Olsa 
2181b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2182945aea22SJiri Olsa {
2183945aea22SJiri Olsa 	int ret = 0;
2184945aea22SJiri Olsa 
2185b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2186b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2187945aea22SJiri Olsa 
2188945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2189945aea22SJiri Olsa 		ret = test_term(t);
2190945aea22SJiri Olsa 		if (ret)
2191945aea22SJiri Olsa 			break;
2192945aea22SJiri Olsa 	}
2193945aea22SJiri Olsa 
2194945aea22SJiri Olsa 	return ret;
2195945aea22SJiri Olsa }
2196945aea22SJiri Olsa 
21977741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21987741e03eSIan Rogers {
21997741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
22007741e03eSIan Rogers }
22017741e03eSIan Rogers 
22027741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2203945aea22SJiri Olsa {
22045a52817eSIan Rogers 	struct perf_pmu *pmu;
22055a52817eSIan Rogers 	int ret = TEST_OK;
22065a52817eSIan Rogers 
22075a52817eSIan Rogers 	if (list_empty(&pmus))
22085a52817eSIan Rogers 		perf_pmu__scan(NULL);
22095a52817eSIan Rogers 
22105a52817eSIan Rogers 	perf_pmus__for_each_pmu(pmu) {
2211945aea22SJiri Olsa 		struct stat st;
2212945aea22SJiri Olsa 		char path[PATH_MAX];
2213945aea22SJiri Olsa 		struct dirent *ent;
2214945aea22SJiri Olsa 		DIR *dir;
22155a52817eSIan Rogers 		int err;
2216945aea22SJiri Olsa 
22175a52817eSIan Rogers 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/",
22185a52817eSIan Rogers 			sysfs__mountpoint(), pmu->name);
22197741e03eSIan Rogers 
22205a52817eSIan Rogers 		err = stat(path, &st);
22215a52817eSIan Rogers 		if (err) {
22225a52817eSIan Rogers 			pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path);
22235a52817eSIan Rogers 			continue;
2224945aea22SJiri Olsa 		}
2225945aea22SJiri Olsa 
2226945aea22SJiri Olsa 		dir = opendir(path);
2227945aea22SJiri Olsa 		if (!dir) {
22287741e03eSIan Rogers 			pr_debug("can't open pmu event dir: %s\n", path);
22295a52817eSIan Rogers 			ret = combine_test_results(ret, TEST_SKIP);
22305a52817eSIan Rogers 			continue;
2231945aea22SJiri Olsa 		}
2232945aea22SJiri Olsa 
22337741e03eSIan Rogers 		while ((ent = readdir(dir))) {
22348252e791SIan Rogers 			struct evlist_test e = { .name = NULL, };
22352e2bbc03SArnaldo Carvalho de Melo 			char name[2 * NAME_MAX + 1 + 12 + 3];
22367741e03eSIan Rogers 			int test_ret;
2237945aea22SJiri Olsa 
223817a2634bSAndi Kleen 			/* Names containing . are special and cannot be used directly */
223917a2634bSAndi Kleen 			if (strchr(ent->d_name, '.'))
2240945aea22SJiri Olsa 				continue;
2241945aea22SJiri Olsa 
22425a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name);
2243945aea22SJiri Olsa 
2244945aea22SJiri Olsa 			e.name  = name;
2245945aea22SJiri Olsa 			e.check = test__checkevent_pmu_events;
2246945aea22SJiri Olsa 
22477741e03eSIan Rogers 			test_ret = test_event(&e);
22487741e03eSIan Rogers 			if (test_ret != TEST_OK) {
22497741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
22507741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
22517741e03eSIan Rogers 			}
22525a52817eSIan Rogers 
22535a52817eSIan Rogers 			if (!is_pmu_core(pmu->name))
22545a52817eSIan Rogers 				continue;
22555a52817eSIan Rogers 
2256146edff3SIan Rogers 			/*
2257146edff3SIan Rogers 			 * Names containing '-' are recognized as prefixes and suffixes
2258146edff3SIan Rogers 			 * due to '-' being a legacy PMU separator. This fails when the
2259146edff3SIan Rogers 			 * prefix or suffix collides with an existing legacy token. For
2260146edff3SIan Rogers 			 * example, branch-brs has a prefix (branch) that collides with
2261146edff3SIan Rogers 			 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2262146edff3SIan Rogers 			 * isn't expected after this. As event names in the config
2263146edff3SIan Rogers 			 * slashes are allowed a '-' in the name we check this works
2264146edff3SIan Rogers 			 * above.
2265146edff3SIan Rogers 			 */
2266146edff3SIan Rogers 			if (strchr(ent->d_name, '-'))
2267146edff3SIan Rogers 				continue;
2268146edff3SIan Rogers 
22695a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s:u,%s/event=%s/u",
22705a52817eSIan Rogers 				 ent->d_name, pmu->name, ent->d_name);
2271ffe59788SKan Liang 			e.name  = name;
2272ffe59788SKan Liang 			e.check = test__checkevent_pmu_events_mix;
22737741e03eSIan Rogers 			test_ret = test_event(&e);
22747741e03eSIan Rogers 			if (test_ret != TEST_OK) {
22757741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
22767741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
22777741e03eSIan Rogers 			}
2278945aea22SJiri Olsa 		}
2279945aea22SJiri Olsa 
2280945aea22SJiri Olsa 		closedir(dir);
22815a52817eSIan Rogers 	}
2282945aea22SJiri Olsa 	return ret;
2283945aea22SJiri Olsa }
2284945aea22SJiri Olsa 
22857741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
22867741e03eSIan Rogers {
22877741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
22887741e03eSIan Rogers }
22897741e03eSIan Rogers 
2290c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2291c7a3828dSJin Yao {
2292c7a3828dSJin Yao 	char path[PATH_MAX];
2293c7a3828dSJin Yao 	DIR *dir;
2294c7a3828dSJin Yao 	struct dirent *dent;
2295c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2296c7a3828dSJin Yao 	char buf[128];
2297c7a3828dSJin Yao 	FILE *file;
2298c7a3828dSJin Yao 
2299c7a3828dSJin Yao 	if (!sysfs)
2300c7a3828dSJin Yao 		return false;
2301c7a3828dSJin Yao 
2302c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2303c7a3828dSJin Yao 	dir = opendir(path);
2304c7a3828dSJin Yao 	if (!dir)
2305c7a3828dSJin Yao 		return false;
2306c7a3828dSJin Yao 
2307c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2308c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2309c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2310c7a3828dSJin Yao 			continue;
2311c7a3828dSJin Yao 
2312c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2313c7a3828dSJin Yao 			 sysfs, dent->d_name);
2314c7a3828dSJin Yao 
2315c7a3828dSJin Yao 		if (!file_available(path))
2316c7a3828dSJin Yao 			continue;
2317c7a3828dSJin Yao 
2318c7a3828dSJin Yao 		file = fopen(path, "r");
2319c7a3828dSJin Yao 		if (!file)
2320c7a3828dSJin Yao 			continue;
2321c7a3828dSJin Yao 
2322c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2323c7a3828dSJin Yao 			fclose(file);
2324c7a3828dSJin Yao 			continue;
2325c7a3828dSJin Yao 		}
2326c7a3828dSJin Yao 
2327c7a3828dSJin Yao 		/* Remove the last '\n' */
2328c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2329c7a3828dSJin Yao 
2330c7a3828dSJin Yao 		fclose(file);
2331c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2332c7a3828dSJin Yao 		*alias = strdup(buf);
2333c7a3828dSJin Yao 		closedir(dir);
2334c7a3828dSJin Yao 
2335c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2336c7a3828dSJin Yao 			free(*event);
2337c7a3828dSJin Yao 			free(*alias);
2338c7a3828dSJin Yao 			return false;
2339c7a3828dSJin Yao 		}
2340c7a3828dSJin Yao 
2341c7a3828dSJin Yao 		return true;
2342c7a3828dSJin Yao 	}
2343c7a3828dSJin Yao 
2344c7a3828dSJin Yao 	closedir(dir);
2345c7a3828dSJin Yao 	return false;
2346c7a3828dSJin Yao }
2347c7a3828dSJin Yao 
2348c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2349c7a3828dSJin Yao {
2350c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2351c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2352c7a3828dSJin Yao 
2353c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2354c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
23557741e03eSIan Rogers 	return TEST_OK;
2356c7a3828dSJin Yao }
2357c7a3828dSJin Yao 
23587741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2359c7a3828dSJin Yao {
23608252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2361c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2362c7a3828dSJin Yao 
2363c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2364c7a3828dSJin Yao 		 event, alias);
2365c7a3828dSJin Yao 
2366c7a3828dSJin Yao 	e.name  = name;
2367c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2368c7a3828dSJin Yao 	return test_event(&e);
2369c7a3828dSJin Yao }
2370c7a3828dSJin Yao 
23717741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23727741e03eSIan Rogers {
23737741e03eSIan Rogers 	char *event, *alias;
23747741e03eSIan Rogers 	int ret;
23757741e03eSIan Rogers 
23767741e03eSIan Rogers 	if (!test_alias(&event, &alias))
23777741e03eSIan Rogers 		return TEST_SKIP;
23787741e03eSIan Rogers 
23797741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
23807741e03eSIan Rogers 
23817741e03eSIan Rogers 	free(event);
23827741e03eSIan Rogers 	free(alias);
23837741e03eSIan Rogers 	return ret;
23847741e03eSIan Rogers }
23857741e03eSIan Rogers 
23867741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
23877741e03eSIan Rogers 				   int subtest __maybe_unused)
2388b4a7276cSJohn Garry {
2389b4a7276cSJohn Garry 	static const char events[][30] = {
2390b4a7276cSJohn Garry 			"event-hyphen",
2391b4a7276cSJohn Garry 			"event-two-hyph",
2392b4a7276cSJohn Garry 	};
23937741e03eSIan Rogers 	int ret = TEST_OK;
2394b4a7276cSJohn Garry 
23957741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
23967741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
23977741e03eSIan Rogers 
23987741e03eSIan Rogers 		if (test_ret != TEST_OK) {
23997741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
24007741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2401b4a7276cSJohn Garry 		}
2402b4a7276cSJohn Garry 	}
2403b4a7276cSJohn Garry 
2404b4a7276cSJohn Garry 	return ret;
2405b4a7276cSJohn Garry }
2406b4a7276cSJohn Garry 
24077741e03eSIan Rogers static struct test_case tests__parse_events[] = {
24087741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
24097741e03eSIan Rogers 			 events2,
24107741e03eSIan Rogers 			 "permissions"),
24117741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
24127741e03eSIan Rogers 			 pmu_events,
24137741e03eSIan Rogers 			 "permissions"),
24147741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
24157741e03eSIan Rogers 			 pmu_events2,
24167741e03eSIan Rogers 			 "permissions"),
24177741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
24187741e03eSIan Rogers 			 "no aliases in sysfs"),
24197741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
24207741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
24217741e03eSIan Rogers 	{	.name = NULL, }
24227741e03eSIan Rogers };
2423945aea22SJiri Olsa 
24247741e03eSIan Rogers struct test_suite suite__parse_events = {
24257741e03eSIan Rogers 	.desc = "Parse event definition strings",
24267741e03eSIan Rogers 	.test_cases = tests__parse_events,
24277741e03eSIan Rogers };
2428