xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 2aadca4b35427a7c65acc6aa415b38758128b22c)
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 
1502e831f3ccSIan Rogers static int test__term_equal_term(struct evlist *evlist)
1503e831f3ccSIan Rogers {
1504e831f3ccSIan Rogers 	struct evsel *evsel = evlist__first(evlist);
1505e831f3ccSIan Rogers 
1506e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
1507e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
1508e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "name") == 0);
1509e831f3ccSIan Rogers 	return TEST_OK;
1510e831f3ccSIan Rogers }
1511e831f3ccSIan Rogers 
1512*2aadca4bSIan Rogers static int test__term_equal_legacy(struct evlist *evlist)
1513*2aadca4bSIan Rogers {
1514*2aadca4bSIan Rogers 	struct evsel *evsel = evlist__first(evlist);
1515*2aadca4bSIan Rogers 
1516*2aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
1517*2aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
1518*2aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "l1d") == 0);
1519*2aadca4bSIan Rogers 	return TEST_OK;
1520*2aadca4bSIan Rogers }
1521*2aadca4bSIan Rogers 
1522378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
152382ce75d9SJiri Olsa static int count_tracepoints(void)
152482ce75d9SJiri Olsa {
152582ce75d9SJiri Olsa 	struct dirent *events_ent;
152682ce75d9SJiri Olsa 	DIR *events_dir;
152782ce75d9SJiri Olsa 	int cnt = 0;
152882ce75d9SJiri Olsa 
15297014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
153082ce75d9SJiri Olsa 
153182ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
153282ce75d9SJiri Olsa 
153382ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
153425a7d914SArnaldo Carvalho de Melo 		char *sys_path;
153582ce75d9SJiri Olsa 		struct dirent *sys_ent;
153682ce75d9SJiri Olsa 		DIR *sys_dir;
153782ce75d9SJiri Olsa 
153882ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
153982ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
154082ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
154182ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
154282ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
154382ce75d9SJiri Olsa 			continue;
154482ce75d9SJiri Olsa 
154525a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
154625a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
154782ce75d9SJiri Olsa 
154882ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
154982ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
155082ce75d9SJiri Olsa 
155182ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
155282ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
155382ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
155482ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
155582ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
155682ce75d9SJiri Olsa 				continue;
155782ce75d9SJiri Olsa 
155882ce75d9SJiri Olsa 			cnt++;
155982ce75d9SJiri Olsa 		}
156082ce75d9SJiri Olsa 
156182ce75d9SJiri Olsa 		closedir(sys_dir);
156225a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
156382ce75d9SJiri Olsa 	}
156482ce75d9SJiri Olsa 
156582ce75d9SJiri Olsa 	closedir(events_dir);
156682ce75d9SJiri Olsa 	return cnt;
156782ce75d9SJiri Olsa }
156882ce75d9SJiri Olsa 
156963503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
157082ce75d9SJiri Olsa {
157182ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
15726484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
157382ce75d9SJiri Olsa 
157482ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
157582ce75d9SJiri Olsa }
1576378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */
157782ce75d9SJiri Olsa 
157823b6339bSArnaldo Carvalho de Melo struct evlist_test {
1579945aea22SJiri Olsa 	const char *name;
158016ddcfbfSJiri Olsa 	bool (*valid)(void);
158163503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1582945aea22SJiri Olsa };
1583945aea22SJiri Olsa 
15848252e791SIan Rogers static const struct evlist_test test__events[] = {
1585378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1586615b8f99SAlexander Yarygin 	{
158743f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1588945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
15898252e791SIan Rogers 		/* 0 */
1590945aea22SJiri Olsa 	},
1591615b8f99SAlexander Yarygin 	{
1592945aea22SJiri Olsa 		.name  = "syscalls:*",
1593945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
15948252e791SIan Rogers 		/* 1 */
1595945aea22SJiri Olsa 	},
1596378ef0f5SIan Rogers #endif
1597615b8f99SAlexander Yarygin 	{
1598945aea22SJiri Olsa 		.name  = "r1a",
1599945aea22SJiri Olsa 		.check = test__checkevent_raw,
16008252e791SIan Rogers 		/* 2 */
1601945aea22SJiri Olsa 	},
1602615b8f99SAlexander Yarygin 	{
1603945aea22SJiri Olsa 		.name  = "1:1",
1604945aea22SJiri Olsa 		.check = test__checkevent_numeric,
16058252e791SIan Rogers 		/* 3 */
1606945aea22SJiri Olsa 	},
1607615b8f99SAlexander Yarygin 	{
1608945aea22SJiri Olsa 		.name  = "instructions",
1609945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
16108252e791SIan Rogers 		/* 4 */
1611945aea22SJiri Olsa 	},
1612615b8f99SAlexander Yarygin 	{
1613945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1614945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
16158252e791SIan Rogers 		/* 5 */
1616945aea22SJiri Olsa 	},
1617615b8f99SAlexander Yarygin 	{
1618945aea22SJiri Olsa 		.name  = "faults",
1619945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
16208252e791SIan Rogers 		/* 6 */
1621945aea22SJiri Olsa 	},
1622615b8f99SAlexander Yarygin 	{
1623945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1624945aea22SJiri Olsa 		.check = test__checkevent_genhw,
16258252e791SIan Rogers 		/* 7 */
1626945aea22SJiri Olsa 	},
1627615b8f99SAlexander Yarygin 	{
1628945aea22SJiri Olsa 		.name  = "mem:0",
1629945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
16308252e791SIan Rogers 		/* 8 */
1631945aea22SJiri Olsa 	},
1632615b8f99SAlexander Yarygin 	{
1633945aea22SJiri Olsa 		.name  = "mem:0:x",
1634945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
16358252e791SIan Rogers 		/* 9 */
1636945aea22SJiri Olsa 	},
1637615b8f99SAlexander Yarygin 	{
1638945aea22SJiri Olsa 		.name  = "mem:0:r",
1639945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
16408252e791SIan Rogers 		/* 0 */
1641945aea22SJiri Olsa 	},
1642615b8f99SAlexander Yarygin 	{
1643945aea22SJiri Olsa 		.name  = "mem:0:w",
1644945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
16458252e791SIan Rogers 		/* 1 */
1646945aea22SJiri Olsa 	},
1647378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1648615b8f99SAlexander Yarygin 	{
164943f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1650945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
16518252e791SIan Rogers 		/* 2 */
1652945aea22SJiri Olsa 	},
1653615b8f99SAlexander Yarygin 	{
1654945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1655945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
16568252e791SIan Rogers 		/* 3 */
1657945aea22SJiri Olsa 	},
1658378ef0f5SIan Rogers #endif
1659615b8f99SAlexander Yarygin 	{
1660945aea22SJiri Olsa 		.name  = "r1a:kp",
1661945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
16628252e791SIan Rogers 		/* 4 */
1663945aea22SJiri Olsa 	},
1664615b8f99SAlexander Yarygin 	{
1665945aea22SJiri Olsa 		.name  = "1:1:hp",
1666945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
16678252e791SIan Rogers 		/* 5 */
1668945aea22SJiri Olsa 	},
1669615b8f99SAlexander Yarygin 	{
1670945aea22SJiri Olsa 		.name  = "instructions:h",
1671945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
16728252e791SIan Rogers 		/* 6 */
1673945aea22SJiri Olsa 	},
1674615b8f99SAlexander Yarygin 	{
1675945aea22SJiri Olsa 		.name  = "faults:u",
1676945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
16778252e791SIan Rogers 		/* 7 */
1678945aea22SJiri Olsa 	},
1679615b8f99SAlexander Yarygin 	{
1680945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1681945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
16828252e791SIan Rogers 		/* 8 */
1683945aea22SJiri Olsa 	},
1684615b8f99SAlexander Yarygin 	{
1685945aea22SJiri Olsa 		.name  = "mem:0:u",
1686945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
16878252e791SIan Rogers 		/* 9 */
1688945aea22SJiri Olsa 	},
1689615b8f99SAlexander Yarygin 	{
1690945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1691945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
16928252e791SIan Rogers 		/* 0 */
1693945aea22SJiri Olsa 	},
1694615b8f99SAlexander Yarygin 	{
1695945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1696945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
16978252e791SIan Rogers 		/* 1 */
1698945aea22SJiri Olsa 	},
1699615b8f99SAlexander Yarygin 	{
1700945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1701945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
17028252e791SIan Rogers 		/* 2 */
1703945aea22SJiri Olsa 	},
1704378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1705615b8f99SAlexander Yarygin 	{
170643f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1707945aea22SJiri Olsa 		.check = test__checkevent_list,
17088252e791SIan Rogers 		/* 3 */
1709945aea22SJiri Olsa 	},
1710378ef0f5SIan Rogers #endif
1711615b8f99SAlexander Yarygin 	{
1712945aea22SJiri Olsa 		.name  = "instructions:G",
1713945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
17148252e791SIan Rogers 		/* 4 */
1715945aea22SJiri Olsa 	},
1716615b8f99SAlexander Yarygin 	{
1717945aea22SJiri Olsa 		.name  = "instructions:H",
1718945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
17198252e791SIan Rogers 		/* 5 */
1720945aea22SJiri Olsa 	},
1721615b8f99SAlexander Yarygin 	{
1722945aea22SJiri Olsa 		.name  = "mem:0:rw",
1723945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
17248252e791SIan Rogers 		/* 6 */
1725945aea22SJiri Olsa 	},
1726615b8f99SAlexander Yarygin 	{
1727945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1728945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
17298252e791SIan Rogers 		/* 7 */
1730945aea22SJiri Olsa 	},
1731615b8f99SAlexander Yarygin 	{
1732945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1733945aea22SJiri Olsa 		.check = test__group1,
17348252e791SIan Rogers 		/* 8 */
1735945aea22SJiri Olsa 	},
1736615b8f99SAlexander Yarygin 	{
1737945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1738945aea22SJiri Olsa 		.check = test__group2,
17398252e791SIan Rogers 		/* 9 */
1740945aea22SJiri Olsa 	},
1741378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1742615b8f99SAlexander Yarygin 	{
174343f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1744945aea22SJiri Olsa 		.check = test__group3,
17458252e791SIan Rogers 		/* 0 */
1746945aea22SJiri Olsa 	},
1747378ef0f5SIan Rogers #endif
1748615b8f99SAlexander Yarygin 	{
1749945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1750945aea22SJiri Olsa 		.check = test__group4,
17518252e791SIan Rogers 		/* 1 */
1752945aea22SJiri Olsa 	},
1753615b8f99SAlexander Yarygin 	{
1754945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1755945aea22SJiri Olsa 		.check = test__group5,
17568252e791SIan Rogers 		/* 2 */
1757945aea22SJiri Olsa 	},
1758378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1759615b8f99SAlexander Yarygin 	{
176082ce75d9SJiri Olsa 		.name  = "*:*",
176182ce75d9SJiri Olsa 		.check = test__all_tracepoints,
17628252e791SIan Rogers 		/* 3 */
176382ce75d9SJiri Olsa 	},
1764378ef0f5SIan Rogers #endif
1765615b8f99SAlexander Yarygin 	{
17665a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
17675a30a99fSJiri Olsa 		.check = test__group_gh1,
17688252e791SIan Rogers 		/* 4 */
17695a30a99fSJiri Olsa 	},
1770615b8f99SAlexander Yarygin 	{
17715a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
17725a30a99fSJiri Olsa 		.check = test__group_gh2,
17738252e791SIan Rogers 		/* 5 */
17745a30a99fSJiri Olsa 	},
1775615b8f99SAlexander Yarygin 	{
17765a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
17775a30a99fSJiri Olsa 		.check = test__group_gh3,
17788252e791SIan Rogers 		/* 6 */
17795a30a99fSJiri Olsa 	},
1780615b8f99SAlexander Yarygin 	{
17815a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
17825a30a99fSJiri Olsa 		.check = test__group_gh4,
17838252e791SIan Rogers 		/* 7 */
17845a30a99fSJiri Olsa 	},
1785615b8f99SAlexander Yarygin 	{
1786a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1787a9f93f97SJiri Olsa 		.check = test__leader_sample1,
17888252e791SIan Rogers 		/* 8 */
1789a9f93f97SJiri Olsa 	},
1790615b8f99SAlexander Yarygin 	{
1791a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1792a9f93f97SJiri Olsa 		.check = test__leader_sample2,
17938252e791SIan Rogers 		/* 9 */
1794a9f93f97SJiri Olsa 	},
1795615b8f99SAlexander Yarygin 	{
1796c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1797c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
17988252e791SIan Rogers 		/* 0 */
1799c9ee780fSMichael Ellerman 	},
1800615b8f99SAlexander Yarygin 	{
1801c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1802c9ee780fSMichael Ellerman 		.check = test__pinned_group,
18038252e791SIan Rogers 		/* 1 */
1804c9ee780fSMichael Ellerman 	},
1805ec32398cSJacob Shin 	{
1806ec32398cSJacob Shin 		.name  = "mem:0/1",
1807ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
18088252e791SIan Rogers 		/* 2 */
1809ec32398cSJacob Shin 	},
1810ec32398cSJacob Shin 	{
1811ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1812ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
18138252e791SIan Rogers 		/* 3 */
1814ec32398cSJacob Shin 	},
1815ec32398cSJacob Shin 	{
1816ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1817ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
18188252e791SIan Rogers 		/* 4 */
1819ec32398cSJacob Shin 	},
1820378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT)
1821c0bc8c6dSAlexander Yarygin 	{
1822c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1823c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
182453fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
18258252e791SIan Rogers 		/* 0 */
1826c0bc8c6dSAlexander Yarygin 	},
1827c0bc8c6dSAlexander Yarygin #endif
1828a1e12da4SJiri Olsa 	{
1829a1e12da4SJiri Olsa 		.name  = "instructions:I",
1830a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
18318252e791SIan Rogers 		/* 5 */
1832a1e12da4SJiri Olsa 	},
1833a1e12da4SJiri Olsa 	{
1834a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1835a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
18368252e791SIan Rogers 		/* 6 */
1837a1e12da4SJiri Olsa 	},
1838ddd83c97SJiri Olsa 	{
1839ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1840ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
18418252e791SIan Rogers 		/* 7 */
1842ddd83c97SJiri Olsa 	},
184310bf358aSWang Nan 	{
184410bf358aSWang Nan 		.name  = "instructions/name=insn/",
184510bf358aSWang Nan 		.check = test__checkevent_config_symbol,
18468252e791SIan Rogers 		/* 8 */
184710bf358aSWang Nan 	},
184810bf358aSWang Nan 	{
184910bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
185010bf358aSWang Nan 		.check = test__checkevent_config_raw,
18518252e791SIan Rogers 		/* 9 */
185210bf358aSWang Nan 	},
185310bf358aSWang Nan 	{
185410bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
185510bf358aSWang Nan 		.check = test__checkevent_config_num,
18568252e791SIan Rogers 		/* 0 */
185710bf358aSWang Nan 	},
185843d0b978SWang Nan 	{
185943d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
186043d0b978SWang Nan 		.check = test__checkevent_config_cache,
18618252e791SIan Rogers 		/* 1 */
186243d0b978SWang Nan 	},
1863b3f58c8dSArnaldo Carvalho de Melo 	{
1864b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
186516ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
1866b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
18678252e791SIan Rogers 		/* 2 */
1868b3f58c8dSArnaldo Carvalho de Melo 	},
186906dc5bf2SAlexey Budankov 	{
187006dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
187106dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
18728252e791SIan Rogers 		/* 3 */
1873714a92d8SJiri Olsa 	},
1874714a92d8SJiri Olsa 	{
1875714a92d8SJiri Olsa 		.name  = "cycles//u",
1876714a92d8SJiri Olsa 		.check = test__sym_event_slash,
18778252e791SIan Rogers 		/* 4 */
1878714a92d8SJiri Olsa 	},
1879714a92d8SJiri Olsa 	{
1880714a92d8SJiri Olsa 		.name  = "cycles:k",
1881714a92d8SJiri Olsa 		.check = test__sym_event_dc,
18828252e791SIan Rogers 		/* 5 */
18830997a266SAndi Kleen 	},
18840997a266SAndi Kleen 	{
18850997a266SAndi Kleen 		.name  = "instructions:uep",
18860997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
18878252e791SIan Rogers 		/* 6 */
18880997a266SAndi Kleen 	},
18890997a266SAndi Kleen 	{
18900997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
18910997a266SAndi Kleen 		.check = test__exclusive_group,
18928252e791SIan Rogers 		/* 7 */
18930997a266SAndi Kleen 	},
1894e831f3ccSIan Rogers 	{
1895e831f3ccSIan Rogers 		.name  = "cycles/name=name/",
1896e831f3ccSIan Rogers 		.check = test__term_equal_term,
1897e831f3ccSIan Rogers 		/* 8 */
1898e831f3ccSIan Rogers 	},
1899*2aadca4bSIan Rogers 	{
1900*2aadca4bSIan Rogers 		.name  = "cycles/name=l1d/",
1901*2aadca4bSIan Rogers 		.check = test__term_equal_legacy,
1902*2aadca4bSIan Rogers 		/* 9 */
1903*2aadca4bSIan Rogers 	},
1904945aea22SJiri Olsa };
1905945aea22SJiri Olsa 
19068252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
1907615b8f99SAlexander Yarygin 	{
1908945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
19098f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
1910945aea22SJiri Olsa 		.check = test__checkevent_pmu,
19118252e791SIan Rogers 		/* 0 */
1912945aea22SJiri Olsa 	},
1913615b8f99SAlexander Yarygin 	{
1914945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
19158f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
1916945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
19178252e791SIan Rogers 		/* 1 */
1918945aea22SJiri Olsa 	},
191971ef150eSKan Liang 	{
192071ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
19218f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
192271ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
19238252e791SIan Rogers 		/* 2 */
192471ef150eSKan Liang 	},
192506dc5bf2SAlexey Budankov 	{
1926a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
19278f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
192806dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
19298252e791SIan Rogers 		/* 3 */
19303a6c51e4SJiri Olsa 	},
19313a6c51e4SJiri Olsa 	{
19323a6c51e4SJiri Olsa 		.name  = "software/r1a/",
19333a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
19348252e791SIan Rogers 		/* 4 */
19353a6c51e4SJiri Olsa 	},
1936c33cdf54SJiri Olsa 	{
1937c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
1938c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
19398252e791SIan Rogers 		/* 5 */
1940c33cdf54SJiri Olsa 	},
19416fd1e519SIan Rogers 	{
19426fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/",
19436fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
19446fd1e519SIan Rogers 		.check = test__checkevent_genhw,
19456fd1e519SIan Rogers 		/* 6 */
19466fd1e519SIan Rogers 	},
19476fd1e519SIan Rogers 	{
19486fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/kp",
19496fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
19506fd1e519SIan Rogers 		.check = test__checkevent_genhw_modifier,
19516fd1e519SIan Rogers 		/* 7 */
19526fd1e519SIan Rogers 	},
19536fd1e519SIan Rogers 	{
19546fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-misses,name=cachepmu/",
19556fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
19566fd1e519SIan Rogers 		.check = test__checkevent_config_cache,
19576fd1e519SIan Rogers 		/* 8 */
19586fd1e519SIan Rogers 	},
19595ea8f2ccSIan Rogers 	{
19605ea8f2ccSIan Rogers 		.name  = "cpu/instructions/",
19615ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
19625ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name,
19635ea8f2ccSIan Rogers 		/* 9 */
19645ea8f2ccSIan Rogers 	},
19655ea8f2ccSIan Rogers 	{
19665ea8f2ccSIan Rogers 		.name  = "cpu/cycles,period=100000,config2/",
19675ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
19685ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name_config,
19695ea8f2ccSIan Rogers 		/* 0 */
19705ea8f2ccSIan Rogers 	},
19715ea8f2ccSIan Rogers 	{
19725ea8f2ccSIan Rogers 		.name  = "cpu/instructions/h",
19735ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
19745ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name_modifier,
19755ea8f2ccSIan Rogers 		/* 1 */
19765ea8f2ccSIan Rogers 	},
19775ea8f2ccSIan Rogers 	{
19785ea8f2ccSIan Rogers 		.name  = "cpu/instructions/G",
19795ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
19805ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_host_modifier,
19815ea8f2ccSIan Rogers 		/* 2 */
19825ea8f2ccSIan Rogers 	},
19835ea8f2ccSIan Rogers 	{
19845ea8f2ccSIan Rogers 		.name  = "cpu/instructions/H",
19855ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
19865ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_guest_modifier,
19875ea8f2ccSIan Rogers 		/* 3 */
19885ea8f2ccSIan Rogers 	},
19895ea8f2ccSIan Rogers 	{
19905ea8f2ccSIan Rogers 		.name  = "{cpu/instructions/k,cpu/cycles/upp}",
19915ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
19925ea8f2ccSIan Rogers 		.check = test__group1,
19935ea8f2ccSIan Rogers 		/* 4 */
19945ea8f2ccSIan Rogers 	},
19955ea8f2ccSIan Rogers 	{
19965ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/u,cpu/instructions/kp}:p",
19975ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
19985ea8f2ccSIan Rogers 		.check = test__group4,
19995ea8f2ccSIan Rogers 		/* 5 */
20005ea8f2ccSIan Rogers 	},
20015ea8f2ccSIan Rogers 	{
20025ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/G}:H",
20035ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20045ea8f2ccSIan Rogers 		.check = test__group_gh1,
20055ea8f2ccSIan Rogers 		/* 6 */
20065ea8f2ccSIan Rogers 	},
20075ea8f2ccSIan Rogers 	{
20085ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/H}:G",
20095ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20105ea8f2ccSIan Rogers 		.check = test__group_gh2,
20115ea8f2ccSIan Rogers 		/* 7 */
20125ea8f2ccSIan Rogers 	},
20135ea8f2ccSIan Rogers 	{
20145ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/G,cpu/cache-misses/H}:u",
20155ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20165ea8f2ccSIan Rogers 		.check = test__group_gh3,
20175ea8f2ccSIan Rogers 		/* 8 */
20185ea8f2ccSIan Rogers 	},
20195ea8f2ccSIan Rogers 	{
20205ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/G,cpu/cache-misses/H}:uG",
20215ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20225ea8f2ccSIan Rogers 		.check = test__group_gh4,
20235ea8f2ccSIan Rogers 		/* 9 */
20245ea8f2ccSIan Rogers 	},
20255ea8f2ccSIan Rogers 	{
20265ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S",
20275ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20285ea8f2ccSIan Rogers 		.check = test__leader_sample1,
20295ea8f2ccSIan Rogers 		/* 0 */
20305ea8f2ccSIan Rogers 	},
20315ea8f2ccSIan Rogers 	{
20325ea8f2ccSIan Rogers 		.name  = "{cpu/instructions/,cpu/branch-misses/}:Su",
20335ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20345ea8f2ccSIan Rogers 		.check = test__leader_sample2,
20355ea8f2ccSIan Rogers 		/* 1 */
20365ea8f2ccSIan Rogers 	},
20375ea8f2ccSIan Rogers 	{
20385ea8f2ccSIan Rogers 		.name  = "cpu/instructions/uDp",
20395ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20405ea8f2ccSIan Rogers 		.check = test__checkevent_pinned_modifier,
20415ea8f2ccSIan Rogers 		/* 2 */
20425ea8f2ccSIan Rogers 	},
20435ea8f2ccSIan Rogers 	{
20445ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D",
20455ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20465ea8f2ccSIan Rogers 		.check = test__pinned_group,
20475ea8f2ccSIan Rogers 		/* 3 */
20485ea8f2ccSIan Rogers 	},
20495ea8f2ccSIan Rogers 	{
20505ea8f2ccSIan Rogers 		.name  = "cpu/instructions/I",
20515ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20525ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_idle_modifier,
20535ea8f2ccSIan Rogers 		/* 4 */
20545ea8f2ccSIan Rogers 	},
20555ea8f2ccSIan Rogers 	{
20565ea8f2ccSIan Rogers 		.name  = "cpu/instructions/kIG",
20575ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20585ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_idle_modifier_1,
20595ea8f2ccSIan Rogers 		/* 5 */
20605ea8f2ccSIan Rogers 	},
20615ea8f2ccSIan Rogers 	{
20625ea8f2ccSIan Rogers 		.name  = "cpu/cycles/u",
20635ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20645ea8f2ccSIan Rogers 		.check = test__sym_event_slash,
20655ea8f2ccSIan Rogers 		/* 6 */
20665ea8f2ccSIan Rogers 	},
20675ea8f2ccSIan Rogers 	{
20685ea8f2ccSIan Rogers 		.name  = "cpu/cycles/k",
20695ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20705ea8f2ccSIan Rogers 		.check = test__sym_event_dc,
20715ea8f2ccSIan Rogers 		/* 7 */
20725ea8f2ccSIan Rogers 	},
20735ea8f2ccSIan Rogers 	{
20745ea8f2ccSIan Rogers 		.name  = "cpu/instructions/uep",
20755ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20765ea8f2ccSIan Rogers 		.check = test__checkevent_exclusive_modifier,
20775ea8f2ccSIan Rogers 		/* 8 */
20785ea8f2ccSIan Rogers 	},
20795ea8f2ccSIan Rogers 	{
20805ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e",
20815ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
20825ea8f2ccSIan Rogers 		.check = test__exclusive_group,
20835ea8f2ccSIan Rogers 		/* 9 */
20845ea8f2ccSIan Rogers 	},
2085e831f3ccSIan Rogers 	{
2086e831f3ccSIan Rogers 		.name  = "cpu/cycles,name=name/",
2087e831f3ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2088e831f3ccSIan Rogers 		.check = test__term_equal_term,
2089e831f3ccSIan Rogers 		/* 0 */
2090e831f3ccSIan Rogers 	},
2091*2aadca4bSIan Rogers 	{
2092*2aadca4bSIan Rogers 		.name  = "cpu/cycles,name=l1d/",
2093*2aadca4bSIan Rogers 		.valid = test__pmu_cpu_valid,
2094*2aadca4bSIan Rogers 		.check = test__term_equal_legacy,
2095*2aadca4bSIan Rogers 		/* 1 */
2096*2aadca4bSIan Rogers 	},
2097945aea22SJiri Olsa };
2098945aea22SJiri Olsa 
209923b6339bSArnaldo Carvalho de Melo struct terms_test {
2100945aea22SJiri Olsa 	const char *str;
2101945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
2102945aea22SJiri Olsa };
2103945aea22SJiri Olsa 
2104b58eca40SIan Rogers static const struct terms_test test__terms[] = {
2105945aea22SJiri Olsa 	[0] = {
2106204e7c49SRob Herring 		.str   = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead",
2107945aea22SJiri Olsa 		.check = test__checkterms_simple,
2108945aea22SJiri Olsa 	},
2109945aea22SJiri Olsa };
2110945aea22SJiri Olsa 
21118252e791SIan Rogers static int test_event(const struct evlist_test *e)
2112945aea22SJiri Olsa {
2113a910e466SIan Rogers 	struct parse_events_error err;
211463503dbaSJiri Olsa 	struct evlist *evlist;
2115945aea22SJiri Olsa 	int ret;
2116945aea22SJiri Olsa 
211716ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
21187741e03eSIan Rogers 		pr_debug("... SKIP\n");
21197741e03eSIan Rogers 		return TEST_OK;
212016ddcfbfSJiri Olsa 	}
212116ddcfbfSJiri Olsa 
21220f98b11cSJiri Olsa 	evlist = evlist__new();
21237741e03eSIan Rogers 	if (evlist == NULL) {
21247741e03eSIan Rogers 		pr_err("Failed allocation");
21257741e03eSIan Rogers 		return TEST_FAIL;
21267741e03eSIan Rogers 	}
212707eafd4eSIan Rogers 	parse_events_error__init(&err);
2128933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
2129945aea22SJiri Olsa 	if (ret) {
2130933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2131933ccf20SJiri Olsa 			 e->name, ret, err.str);
21326c191289SIan Rogers 		parse_events_error__print(&err, e->name);
21337741e03eSIan Rogers 		ret = TEST_FAIL;
2134aefde50aSIan Rogers 		if (err.str && strstr(err.str, "can't access trace events"))
21357741e03eSIan Rogers 			ret = TEST_SKIP;
21362d4352c0SArnaldo Carvalho de Melo 	} else {
21372d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
2138945aea22SJiri Olsa 	}
213907eafd4eSIan Rogers 	parse_events_error__exit(&err);
2140c12995a5SJiri Olsa 	evlist__delete(evlist);
2141945aea22SJiri Olsa 
2142945aea22SJiri Olsa 	return ret;
2143945aea22SJiri Olsa }
2144945aea22SJiri Olsa 
2145b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
2146b4a7276cSJohn Garry {
2147b4a7276cSJohn Garry 	struct parse_events_error err;
2148b4a7276cSJohn Garry 	struct evlist *evlist;
2149b4a7276cSJohn Garry 	int ret;
2150b4a7276cSJohn Garry 
2151b4a7276cSJohn Garry 	evlist = evlist__new();
2152b4a7276cSJohn Garry 	if (!evlist)
2153b4a7276cSJohn Garry 		return -ENOMEM;
2154b4a7276cSJohn Garry 
2155b4a7276cSJohn Garry 	parse_events_error__init(&err);
2156411ad22eSIan Rogers 	ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err,
2157411ad22eSIan Rogers 			     &perf_pmu__fake, /*warn_if_reordered=*/true);
2158b4a7276cSJohn Garry 	if (ret) {
2159b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2160b4a7276cSJohn Garry 			 str, ret, err.str);
2161b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
2162b4a7276cSJohn Garry 	}
2163b4a7276cSJohn Garry 
2164b4a7276cSJohn Garry 	parse_events_error__exit(&err);
2165b4a7276cSJohn Garry 	evlist__delete(evlist);
2166b4a7276cSJohn Garry 
2167b4a7276cSJohn Garry 	return ret;
2168b4a7276cSJohn Garry }
2169b4a7276cSJohn Garry 
21707741e03eSIan Rogers static int combine_test_results(int existing, int latest)
21717741e03eSIan Rogers {
21727741e03eSIan Rogers 	if (existing == TEST_FAIL)
21737741e03eSIan Rogers 		return TEST_FAIL;
21747741e03eSIan Rogers 	if (existing == TEST_SKIP)
21757741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
21767741e03eSIan Rogers 	return latest;
21777741e03eSIan Rogers }
21787741e03eSIan Rogers 
21798252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
2180945aea22SJiri Olsa {
21817741e03eSIan Rogers 	int ret = TEST_OK;
2182945aea22SJiri Olsa 
21838252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
21848252e791SIan Rogers 		const struct evlist_test *e = &events[i];
21857741e03eSIan Rogers 		int test_ret;
2186945aea22SJiri Olsa 
21877741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
21887741e03eSIan Rogers 		test_ret = test_event(e);
21897741e03eSIan Rogers 		if (test_ret != TEST_OK) {
21907741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
21917741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
21927741e03eSIan Rogers 		}
2193945aea22SJiri Olsa 	}
2194945aea22SJiri Olsa 
21957741e03eSIan Rogers 	return ret;
21967741e03eSIan Rogers }
21977741e03eSIan Rogers 
21987741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
21997741e03eSIan Rogers {
22007741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2201945aea22SJiri Olsa }
2202945aea22SJiri Olsa 
2203b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2204945aea22SJiri Olsa {
2205c549aca5SDavid Ahern 	struct list_head terms;
2206945aea22SJiri Olsa 	int ret;
2207945aea22SJiri Olsa 
2208c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2209945aea22SJiri Olsa 
2210c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2211945aea22SJiri Olsa 	if (ret) {
2212945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2213945aea22SJiri Olsa 			 t->str , ret);
2214945aea22SJiri Olsa 		return ret;
2215945aea22SJiri Olsa 	}
2216945aea22SJiri Olsa 
2217c549aca5SDavid Ahern 	ret = t->check(&terms);
2218682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2219945aea22SJiri Olsa 
2220945aea22SJiri Olsa 	return ret;
2221945aea22SJiri Olsa }
2222945aea22SJiri Olsa 
2223b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2224945aea22SJiri Olsa {
2225945aea22SJiri Olsa 	int ret = 0;
2226945aea22SJiri Olsa 
2227b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2228b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2229945aea22SJiri Olsa 
2230945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2231945aea22SJiri Olsa 		ret = test_term(t);
2232945aea22SJiri Olsa 		if (ret)
2233945aea22SJiri Olsa 			break;
2234945aea22SJiri Olsa 	}
2235945aea22SJiri Olsa 
2236945aea22SJiri Olsa 	return ret;
2237945aea22SJiri Olsa }
2238945aea22SJiri Olsa 
22397741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
22407741e03eSIan Rogers {
22417741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
22427741e03eSIan Rogers }
22437741e03eSIan Rogers 
22447741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2245945aea22SJiri Olsa {
22465a52817eSIan Rogers 	struct perf_pmu *pmu;
22475a52817eSIan Rogers 	int ret = TEST_OK;
22485a52817eSIan Rogers 
22495a52817eSIan Rogers 	if (list_empty(&pmus))
22505a52817eSIan Rogers 		perf_pmu__scan(NULL);
22515a52817eSIan Rogers 
22525a52817eSIan Rogers 	perf_pmus__for_each_pmu(pmu) {
2253945aea22SJiri Olsa 		struct stat st;
2254945aea22SJiri Olsa 		char path[PATH_MAX];
2255945aea22SJiri Olsa 		struct dirent *ent;
2256945aea22SJiri Olsa 		DIR *dir;
22575a52817eSIan Rogers 		int err;
2258945aea22SJiri Olsa 
22595a52817eSIan Rogers 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/",
22605a52817eSIan Rogers 			sysfs__mountpoint(), pmu->name);
22617741e03eSIan Rogers 
22625a52817eSIan Rogers 		err = stat(path, &st);
22635a52817eSIan Rogers 		if (err) {
22645a52817eSIan Rogers 			pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path);
22655a52817eSIan Rogers 			continue;
2266945aea22SJiri Olsa 		}
2267945aea22SJiri Olsa 
2268945aea22SJiri Olsa 		dir = opendir(path);
2269945aea22SJiri Olsa 		if (!dir) {
22707741e03eSIan Rogers 			pr_debug("can't open pmu event dir: %s\n", path);
22715a52817eSIan Rogers 			ret = combine_test_results(ret, TEST_SKIP);
22725a52817eSIan Rogers 			continue;
2273945aea22SJiri Olsa 		}
2274945aea22SJiri Olsa 
22757741e03eSIan Rogers 		while ((ent = readdir(dir))) {
22768252e791SIan Rogers 			struct evlist_test e = { .name = NULL, };
22772e2bbc03SArnaldo Carvalho de Melo 			char name[2 * NAME_MAX + 1 + 12 + 3];
22787741e03eSIan Rogers 			int test_ret;
2279945aea22SJiri Olsa 
228017a2634bSAndi Kleen 			/* Names containing . are special and cannot be used directly */
228117a2634bSAndi Kleen 			if (strchr(ent->d_name, '.'))
2282945aea22SJiri Olsa 				continue;
2283945aea22SJiri Olsa 
22845a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name);
2285945aea22SJiri Olsa 
2286945aea22SJiri Olsa 			e.name  = name;
2287945aea22SJiri Olsa 			e.check = test__checkevent_pmu_events;
2288945aea22SJiri Olsa 
22897741e03eSIan Rogers 			test_ret = test_event(&e);
22907741e03eSIan Rogers 			if (test_ret != TEST_OK) {
22917741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
22927741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
22937741e03eSIan Rogers 			}
22945a52817eSIan Rogers 
22955a52817eSIan Rogers 			if (!is_pmu_core(pmu->name))
22965a52817eSIan Rogers 				continue;
22975a52817eSIan Rogers 
2298146edff3SIan Rogers 			/*
2299146edff3SIan Rogers 			 * Names containing '-' are recognized as prefixes and suffixes
2300146edff3SIan Rogers 			 * due to '-' being a legacy PMU separator. This fails when the
2301146edff3SIan Rogers 			 * prefix or suffix collides with an existing legacy token. For
2302146edff3SIan Rogers 			 * example, branch-brs has a prefix (branch) that collides with
2303146edff3SIan Rogers 			 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2304146edff3SIan Rogers 			 * isn't expected after this. As event names in the config
2305146edff3SIan Rogers 			 * slashes are allowed a '-' in the name we check this works
2306146edff3SIan Rogers 			 * above.
2307146edff3SIan Rogers 			 */
2308146edff3SIan Rogers 			if (strchr(ent->d_name, '-'))
2309146edff3SIan Rogers 				continue;
2310146edff3SIan Rogers 
23115a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s:u,%s/event=%s/u",
23125a52817eSIan Rogers 				 ent->d_name, pmu->name, ent->d_name);
2313ffe59788SKan Liang 			e.name  = name;
2314ffe59788SKan Liang 			e.check = test__checkevent_pmu_events_mix;
23157741e03eSIan Rogers 			test_ret = test_event(&e);
23167741e03eSIan Rogers 			if (test_ret != TEST_OK) {
23177741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
23187741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
23197741e03eSIan Rogers 			}
2320945aea22SJiri Olsa 		}
2321945aea22SJiri Olsa 
2322945aea22SJiri Olsa 		closedir(dir);
23235a52817eSIan Rogers 	}
2324945aea22SJiri Olsa 	return ret;
2325945aea22SJiri Olsa }
2326945aea22SJiri Olsa 
23277741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
23287741e03eSIan Rogers {
23297741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
23307741e03eSIan Rogers }
23317741e03eSIan Rogers 
2332c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2333c7a3828dSJin Yao {
2334c7a3828dSJin Yao 	char path[PATH_MAX];
2335c7a3828dSJin Yao 	DIR *dir;
2336c7a3828dSJin Yao 	struct dirent *dent;
2337c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2338c7a3828dSJin Yao 	char buf[128];
2339c7a3828dSJin Yao 	FILE *file;
2340c7a3828dSJin Yao 
2341c7a3828dSJin Yao 	if (!sysfs)
2342c7a3828dSJin Yao 		return false;
2343c7a3828dSJin Yao 
2344c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2345c7a3828dSJin Yao 	dir = opendir(path);
2346c7a3828dSJin Yao 	if (!dir)
2347c7a3828dSJin Yao 		return false;
2348c7a3828dSJin Yao 
2349c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2350c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2351c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2352c7a3828dSJin Yao 			continue;
2353c7a3828dSJin Yao 
2354c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2355c7a3828dSJin Yao 			 sysfs, dent->d_name);
2356c7a3828dSJin Yao 
2357c7a3828dSJin Yao 		if (!file_available(path))
2358c7a3828dSJin Yao 			continue;
2359c7a3828dSJin Yao 
2360c7a3828dSJin Yao 		file = fopen(path, "r");
2361c7a3828dSJin Yao 		if (!file)
2362c7a3828dSJin Yao 			continue;
2363c7a3828dSJin Yao 
2364c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2365c7a3828dSJin Yao 			fclose(file);
2366c7a3828dSJin Yao 			continue;
2367c7a3828dSJin Yao 		}
2368c7a3828dSJin Yao 
2369c7a3828dSJin Yao 		/* Remove the last '\n' */
2370c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2371c7a3828dSJin Yao 
2372c7a3828dSJin Yao 		fclose(file);
2373c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2374c7a3828dSJin Yao 		*alias = strdup(buf);
2375c7a3828dSJin Yao 		closedir(dir);
2376c7a3828dSJin Yao 
2377c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2378c7a3828dSJin Yao 			free(*event);
2379c7a3828dSJin Yao 			free(*alias);
2380c7a3828dSJin Yao 			return false;
2381c7a3828dSJin Yao 		}
2382c7a3828dSJin Yao 
2383c7a3828dSJin Yao 		return true;
2384c7a3828dSJin Yao 	}
2385c7a3828dSJin Yao 
2386c7a3828dSJin Yao 	closedir(dir);
2387c7a3828dSJin Yao 	return false;
2388c7a3828dSJin Yao }
2389c7a3828dSJin Yao 
2390c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2391c7a3828dSJin Yao {
2392c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2393c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2394c7a3828dSJin Yao 
2395c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2396c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
23977741e03eSIan Rogers 	return TEST_OK;
2398c7a3828dSJin Yao }
2399c7a3828dSJin Yao 
24007741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2401c7a3828dSJin Yao {
24028252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2403c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2404c7a3828dSJin Yao 
2405c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2406c7a3828dSJin Yao 		 event, alias);
2407c7a3828dSJin Yao 
2408c7a3828dSJin Yao 	e.name  = name;
2409c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2410c7a3828dSJin Yao 	return test_event(&e);
2411c7a3828dSJin Yao }
2412c7a3828dSJin Yao 
24137741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
24147741e03eSIan Rogers {
24157741e03eSIan Rogers 	char *event, *alias;
24167741e03eSIan Rogers 	int ret;
24177741e03eSIan Rogers 
24187741e03eSIan Rogers 	if (!test_alias(&event, &alias))
24197741e03eSIan Rogers 		return TEST_SKIP;
24207741e03eSIan Rogers 
24217741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
24227741e03eSIan Rogers 
24237741e03eSIan Rogers 	free(event);
24247741e03eSIan Rogers 	free(alias);
24257741e03eSIan Rogers 	return ret;
24267741e03eSIan Rogers }
24277741e03eSIan Rogers 
24287741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
24297741e03eSIan Rogers 				   int subtest __maybe_unused)
2430b4a7276cSJohn Garry {
2431b4a7276cSJohn Garry 	static const char events[][30] = {
2432b4a7276cSJohn Garry 			"event-hyphen",
2433b4a7276cSJohn Garry 			"event-two-hyph",
2434b4a7276cSJohn Garry 	};
24357741e03eSIan Rogers 	int ret = TEST_OK;
2436b4a7276cSJohn Garry 
24377741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
24387741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
24397741e03eSIan Rogers 
24407741e03eSIan Rogers 		if (test_ret != TEST_OK) {
24417741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
24427741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2443b4a7276cSJohn Garry 		}
2444b4a7276cSJohn Garry 	}
2445b4a7276cSJohn Garry 
2446b4a7276cSJohn Garry 	return ret;
2447b4a7276cSJohn Garry }
2448b4a7276cSJohn Garry 
24497741e03eSIan Rogers static struct test_case tests__parse_events[] = {
24507741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
24517741e03eSIan Rogers 			 events2,
24527741e03eSIan Rogers 			 "permissions"),
24537741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
24547741e03eSIan Rogers 			 pmu_events,
24557741e03eSIan Rogers 			 "permissions"),
24567741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
24577741e03eSIan Rogers 			 pmu_events2,
24587741e03eSIan Rogers 			 "permissions"),
24597741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
24607741e03eSIan Rogers 			 "no aliases in sysfs"),
24617741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
24627741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
24637741e03eSIan Rogers 	{	.name = NULL, }
24647741e03eSIan Rogers };
2465945aea22SJiri Olsa 
24667741e03eSIan Rogers struct test_suite suite__parse_events = {
24677741e03eSIan Rogers 	.desc = "Parse event definition strings",
24687741e03eSIan Rogers 	.test_cases = tests__parse_events,
24697741e03eSIan Rogers };
2470