xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 808ce56e7d6bfc144b18ded8c11819c45a889520)
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) {
111*808ce56eSJames Clark 		struct perf_pmu *pmu __maybe_unused = NULL;
112aefde50aSIan Rogers 		bool type_matched = false;
113aefde50aSIan Rogers 
114aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 0x1a));
115*808ce56eSJames Clark 		TEST_ASSERT_VAL("event not parsed as raw type",
116*808ce56eSJames Clark 				evsel->attr.type == PERF_TYPE_RAW);
117*808ce56eSJames Clark #if defined(__aarch64__)
118*808ce56eSJames Clark 		/*
119*808ce56eSJames Clark 		 * Arm doesn't have a real raw type PMU in sysfs, so raw events
120*808ce56eSJames Clark 		 * would never match any PMU. However, RAW events on Arm will
121*808ce56eSJames Clark 		 * always successfully open on the first available core PMU
122*808ce56eSJames Clark 		 * so no need to test for a matching type here.
123*808ce56eSJames Clark 		 */
124*808ce56eSJames Clark 		type_matched = raw_type_match = true;
125*808ce56eSJames Clark #else
1261eaf496eSIan Rogers 		while ((pmu = perf_pmus__scan(pmu)) != NULL) {
127aefde50aSIan Rogers 			if (pmu->type == evsel->attr.type) {
128aefde50aSIan Rogers 				TEST_ASSERT_VAL("PMU type expected once", !type_matched);
129aefde50aSIan Rogers 				type_matched = true;
130aefde50aSIan Rogers 				if (pmu->type == PERF_TYPE_RAW)
131aefde50aSIan Rogers 					raw_type_match = true;
132aefde50aSIan Rogers 			}
133aefde50aSIan Rogers 		}
134*808ce56eSJames Clark #endif
135aefde50aSIan Rogers 		TEST_ASSERT_VAL("No PMU found for type", type_matched);
136aefde50aSIan Rogers 	}
137aefde50aSIan Rogers 	TEST_ASSERT_VAL("Raw PMU not matched", raw_type_match);
1387741e03eSIan Rogers 	return TEST_OK;
139945aea22SJiri Olsa }
140945aea22SJiri Olsa 
14163503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
142945aea22SJiri Olsa {
143515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
144945aea22SJiri Olsa 
1456484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
1479854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
1487741e03eSIan Rogers 	return TEST_OK;
149945aea22SJiri Olsa }
150945aea22SJiri Olsa 
15163503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist)
152945aea22SJiri Olsa {
153aefde50aSIan Rogers 	struct perf_evsel *evsel;
154945aea22SJiri Olsa 
155aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
156aefde50aSIan Rogers 
157aefde50aSIan Rogers 	perf_evlist__for_each_evsel(&evlist->core, evsel) {
158aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
159aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config",
160aefde50aSIan Rogers 				test_perf_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
161aefde50aSIan Rogers 	}
1627741e03eSIan Rogers 	return TEST_OK;
163945aea22SJiri Olsa }
164945aea22SJiri Olsa 
16563503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
166945aea22SJiri Olsa {
167aefde50aSIan Rogers 	struct perf_evsel *evsel;
168945aea22SJiri Olsa 
169aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
170aefde50aSIan Rogers 
171aefde50aSIan Rogers 	perf_evlist__for_each_evsel(&evlist->core, evsel) {
172aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
173aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
174ee4c7588SJiri Olsa 		/*
17578e1bc25SArnaldo Carvalho de Melo 		 * The period value gets configured within evlist__config,
176ee4c7588SJiri Olsa 		 * while this test executes only parse events method.
177ee4c7588SJiri Olsa 		 */
178aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period);
179aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1);
180aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config2", 1 == evsel->attr.config2);
181aefde50aSIan Rogers 	}
1827741e03eSIan Rogers 	return TEST_OK;
183945aea22SJiri Olsa }
184945aea22SJiri Olsa 
18563503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
186945aea22SJiri Olsa {
187515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
188945aea22SJiri Olsa 
1896484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1901fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1919854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS));
1927741e03eSIan Rogers 	return TEST_OK;
193945aea22SJiri Olsa }
194945aea22SJiri Olsa 
19563503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
196945aea22SJiri Olsa {
197aefde50aSIan Rogers 	struct perf_evsel *evsel;
198945aea22SJiri Olsa 
199aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
200aefde50aSIan Rogers 
201aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
202aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type);
203aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 1 << 16));
204aefde50aSIan Rogers 	}
2057741e03eSIan Rogers 	return TEST_OK;
206945aea22SJiri Olsa }
207945aea22SJiri Olsa 
20863503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
209945aea22SJiri Olsa {
210515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
211945aea22SJiri Olsa 
2126484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
2131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2149854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
215945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
2161fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
217945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
2181fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
2197741e03eSIan Rogers 	return TEST_OK;
220945aea22SJiri Olsa }
221945aea22SJiri Olsa 
22263503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist)
223945aea22SJiri Olsa {
224515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
225945aea22SJiri Olsa 
2266484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
2271fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2289854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
229945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2301fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
2311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
2327741e03eSIan Rogers 	return TEST_OK;
233945aea22SJiri Olsa }
234945aea22SJiri Olsa 
23563503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
236945aea22SJiri Olsa {
237515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
238945aea22SJiri Olsa 
2396484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
240945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2411fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2429854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
243945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2441fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
245945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2461fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2477741e03eSIan Rogers 	return TEST_OK;
248945aea22SJiri Olsa }
249945aea22SJiri Olsa 
25063503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
251945aea22SJiri Olsa {
252515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
253945aea22SJiri Olsa 
2546484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
255945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2561fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2579854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
258945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2591fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
260945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2611fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2627741e03eSIan Rogers 	return TEST_OK;
263945aea22SJiri Olsa }
264945aea22SJiri Olsa 
26563503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
266945aea22SJiri Olsa {
267515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
268945aea22SJiri Olsa 
2696484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
270945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2711fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2729854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
273945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2741fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
275945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2761fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2777741e03eSIan Rogers 	return TEST_OK;
278945aea22SJiri Olsa }
279945aea22SJiri Olsa 
280378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
28163503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
282945aea22SJiri Olsa {
283515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
284945aea22SJiri Olsa 
2851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2861fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2881fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
289945aea22SJiri Olsa 
290945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
291945aea22SJiri Olsa }
292945aea22SJiri Olsa 
293945aea22SJiri Olsa static int
29463503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
295945aea22SJiri Olsa {
296aefde50aSIan Rogers 	struct perf_evsel *evsel;
297945aea22SJiri Olsa 
2986484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
299945aea22SJiri Olsa 
300aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
301aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
302aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
303aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
304aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
305945aea22SJiri Olsa 	}
306945aea22SJiri Olsa 
307945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
308945aea22SJiri Olsa }
309378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
310945aea22SJiri Olsa 
31163503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
312945aea22SJiri Olsa {
313aefde50aSIan Rogers 	struct perf_evsel *evsel;
314945aea22SJiri Olsa 
315aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
316aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
317aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
318aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
319aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
320aefde50aSIan Rogers 	}
321945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
322945aea22SJiri Olsa }
323945aea22SJiri Olsa 
32463503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
325945aea22SJiri Olsa {
326aefde50aSIan Rogers 	struct perf_evsel *evsel;
327945aea22SJiri Olsa 
328aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
329aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
330aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
331aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
332aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
333aefde50aSIan Rogers 	}
334945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
335945aea22SJiri Olsa }
336945aea22SJiri Olsa 
33763503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
338945aea22SJiri Olsa {
33927c9fcfcSIan Rogers 	struct perf_evsel *evsel;
340945aea22SJiri Olsa 
34127c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
34227c9fcfcSIan Rogers 			evlist->core.nr_entries == perf_pmus__num_core_pmus());
343945aea22SJiri Olsa 
34427c9fcfcSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
34527c9fcfcSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
34627c9fcfcSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
34727c9fcfcSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
34827c9fcfcSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
34927c9fcfcSIan Rogers 	}
350945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
351945aea22SJiri Olsa }
352945aea22SJiri Olsa 
35363503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
354945aea22SJiri Olsa {
355aefde50aSIan Rogers 	struct perf_evsel *evsel;
356945aea22SJiri Olsa 
357aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
358aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
359aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
360aefde50aSIan Rogers 	}
361945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
362945aea22SJiri Olsa }
363945aea22SJiri Olsa 
36463503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
365945aea22SJiri Olsa {
366aefde50aSIan Rogers 	struct perf_evsel *evsel;
367945aea22SJiri Olsa 
368aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
369aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
370aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
371aefde50aSIan Rogers 	}
372945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
373945aea22SJiri Olsa }
374945aea22SJiri Olsa 
37563503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
376945aea22SJiri Olsa {
377515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
378945aea22SJiri Olsa 
3791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
383945aea22SJiri Olsa 
384945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
385945aea22SJiri Olsa }
386945aea22SJiri Olsa 
38763503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
388945aea22SJiri Olsa {
389aefde50aSIan Rogers 	struct perf_evsel *evsel;
390945aea22SJiri Olsa 
391aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
392aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
393aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
394aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
395aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
396aefde50aSIan Rogers 	}
397945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
398945aea22SJiri Olsa }
399945aea22SJiri Olsa 
40063503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
401a1e12da4SJiri Olsa {
402515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
403a1e12da4SJiri Olsa 
4041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
4051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
4061fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
4071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
411a1e12da4SJiri Olsa 
412a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
413a1e12da4SJiri Olsa }
414a1e12da4SJiri Olsa 
41563503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
416a1e12da4SJiri Olsa {
417515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
418a1e12da4SJiri Olsa 
4191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
4201fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
4211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
4221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
426a1e12da4SJiri Olsa 
427a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
428a1e12da4SJiri Olsa }
429a1e12da4SJiri Olsa 
43063503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
431945aea22SJiri Olsa {
432515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
433945aea22SJiri Olsa 
434945aea22SJiri Olsa 
4351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
439945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4408ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:u"));
441945aea22SJiri Olsa 
442945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
443945aea22SJiri Olsa }
444945aea22SJiri Olsa 
44563503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
446945aea22SJiri Olsa {
447515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
448945aea22SJiri Olsa 
4491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4501fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
453945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4548ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:x:k"));
455945aea22SJiri Olsa 
456945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
457945aea22SJiri Olsa }
458945aea22SJiri Olsa 
45963503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
460945aea22SJiri Olsa {
461515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
462945aea22SJiri Olsa 
4631fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
467945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4688ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:r:hp"));
469945aea22SJiri Olsa 
470945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
471945aea22SJiri Olsa }
472945aea22SJiri Olsa 
47363503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
474945aea22SJiri Olsa {
475515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
476945aea22SJiri Olsa 
4771fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
481945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4828ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:w:up"));
483945aea22SJiri Olsa 
484945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
485945aea22SJiri Olsa }
486945aea22SJiri Olsa 
48763503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
488945aea22SJiri Olsa {
489515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
490945aea22SJiri Olsa 
4911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
495945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4968ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:rw:kp"));
497945aea22SJiri Olsa 
498945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
499945aea22SJiri Olsa }
500945aea22SJiri Olsa 
501f0617f52SAdrian Hunter static int test__checkevent_breakpoint_modifier_name(struct evlist *evlist)
502f0617f52SAdrian Hunter {
503f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
504f0617f52SAdrian Hunter 
505f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
506f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
507f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
508f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
509f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
510f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
511f0617f52SAdrian Hunter 
512f0617f52SAdrian Hunter 	return test__checkevent_breakpoint(evlist);
513f0617f52SAdrian Hunter }
514f0617f52SAdrian Hunter 
515f0617f52SAdrian Hunter static int test__checkevent_breakpoint_x_modifier_name(struct evlist *evlist)
516f0617f52SAdrian Hunter {
517f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
518f0617f52SAdrian Hunter 
519f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
520f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
521f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
522f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
523f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
524f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
525f0617f52SAdrian Hunter 
526f0617f52SAdrian Hunter 	return test__checkevent_breakpoint_x(evlist);
527f0617f52SAdrian Hunter }
528f0617f52SAdrian Hunter 
529f0617f52SAdrian Hunter static int test__checkevent_breakpoint_r_modifier_name(struct evlist *evlist)
530f0617f52SAdrian Hunter {
531f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
532f0617f52SAdrian Hunter 
533f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
534f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
535f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
536f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
537f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
538f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
539f0617f52SAdrian Hunter 
540f0617f52SAdrian Hunter 	return test__checkevent_breakpoint_r(evlist);
541f0617f52SAdrian Hunter }
542f0617f52SAdrian Hunter 
543f0617f52SAdrian Hunter static int test__checkevent_breakpoint_w_modifier_name(struct evlist *evlist)
544f0617f52SAdrian Hunter {
545f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
546f0617f52SAdrian Hunter 
547f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
548f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
549f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
550f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
551f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
552f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
553f0617f52SAdrian Hunter 
554f0617f52SAdrian Hunter 	return test__checkevent_breakpoint_w(evlist);
555f0617f52SAdrian Hunter }
556f0617f52SAdrian Hunter 
557f0617f52SAdrian Hunter static int test__checkevent_breakpoint_rw_modifier_name(struct evlist *evlist)
558f0617f52SAdrian Hunter {
559f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
560f0617f52SAdrian Hunter 
561f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
562f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
563f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
564f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
565f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
566f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
567f0617f52SAdrian Hunter 
568f0617f52SAdrian Hunter 	return test__checkevent_breakpoint_rw(evlist);
569f0617f52SAdrian Hunter }
570f0617f52SAdrian Hunter 
571f0617f52SAdrian Hunter static int test__checkevent_breakpoint_2_events(struct evlist *evlist)
572f0617f52SAdrian Hunter {
573f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
574f0617f52SAdrian Hunter 
575f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
576f0617f52SAdrian Hunter 
577f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
578f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint1"));
579f0617f52SAdrian Hunter 
580f0617f52SAdrian Hunter 	evsel = evsel__next(evsel);
581f0617f52SAdrian Hunter 
582f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
583f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint2"));
584f0617f52SAdrian Hunter 
585f0617f52SAdrian Hunter 	return TEST_OK;
586f0617f52SAdrian Hunter }
587f0617f52SAdrian Hunter 
58863503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
589945aea22SJiri Olsa {
590945aea22SJiri Olsa 
591515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
592945aea22SJiri Olsa 
5936484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
5941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5959854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config",    test_config(evsel, 10));
5961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
5971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
598204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3",    0 == evsel->core.attr.config3);
599ee4c7588SJiri Olsa 	/*
60078e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
601ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
602ee4c7588SJiri Olsa 	 */
6031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
604945aea22SJiri Olsa 
6057741e03eSIan Rogers 	return TEST_OK;
606945aea22SJiri Olsa }
607945aea22SJiri Olsa 
608378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
60963503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
610945aea22SJiri Olsa {
611515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
612945aea22SJiri Olsa 
613aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 3 <= evlist->core.nr_entries);
614945aea22SJiri Olsa 
615945aea22SJiri Olsa 	/* r1 */
616aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT != evsel->core.attr.type);
617aefde50aSIan Rogers 	while (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) {
6189854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
6191fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
6201fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
621204e7c49SRob Herring 		TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3);
6221fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
6231fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
6241fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
6251fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
626aefde50aSIan Rogers 		evsel = evsel__next(evsel);
627aefde50aSIan Rogers 	}
628945aea22SJiri Olsa 
62943f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
6301fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
631945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
6321fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
6331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
6341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
6351fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
6361fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
6371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
638945aea22SJiri Olsa 
639945aea22SJiri Olsa 	/* 1:1:hp */
640e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6411fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
6429854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
6431fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
6441fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", 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);
647945aea22SJiri Olsa 
6487741e03eSIan Rogers 	return TEST_OK;
649945aea22SJiri Olsa }
650378ef0f5SIan Rogers #endif
651945aea22SJiri Olsa 
65263503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
653945aea22SJiri Olsa {
654515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
655945aea22SJiri Olsa 
656945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
6576484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6581fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
6599854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
6608ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
661945aea22SJiri Olsa 
662945aea22SJiri Olsa 	/* cpu/config=2/u" */
663e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6646484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
6669854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 2));
667945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
6688ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
669945aea22SJiri Olsa 
6707741e03eSIan Rogers 	return TEST_OK;
671945aea22SJiri Olsa }
672945aea22SJiri Olsa 
67363503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
67471ef150eSKan Liang {
675515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
67671ef150eSKan Liang 
67771ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
6786484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
6809854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
68171ef150eSKan Liang 	/*
68278e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
68371ef150eSKan Liang 	 * while this test executes only parse events method.
68471ef150eSKan Liang 	 */
6851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
68627de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
6871fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
68871ef150eSKan Liang 
68971ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
690e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
6929854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 2));
69371ef150eSKan Liang 	/*
69478e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
69571ef150eSKan Liang 	 * while this test executes only parse events method.
69671ef150eSKan Liang 	 */
6971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
69827de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
6991fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
70071ef150eSKan Liang 
7017741e03eSIan Rogers 	return TEST_OK;
70271ef150eSKan Liang }
70371ef150eSKan Liang 
70463503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
705945aea22SJiri Olsa {
706515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
707945aea22SJiri Olsa 
7086484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
7095a52817eSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type ||
7105a52817eSIan Rogers 				      strcmp(evsel->pmu_name, "cpu"));
711945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
7121fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
713945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
7141fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
7151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7161fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
7171fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
7180997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
719945aea22SJiri Olsa 
7207741e03eSIan Rogers 	return TEST_OK;
721945aea22SJiri Olsa }
722945aea22SJiri Olsa 
723ffe59788SKan Liang 
72463503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
725ffe59788SKan Liang {
72627c9fcfcSIan Rogers 	struct evsel *evsel = NULL;
727ffe59788SKan Liang 
72827c9fcfcSIan Rogers 	/*
72927c9fcfcSIan Rogers 	 * The wild card event will be opened at least once, but it may be
73027c9fcfcSIan Rogers 	 * opened on each core PMU.
73127c9fcfcSIan Rogers 	 */
73227c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries >= 2);
73327c9fcfcSIan Rogers 	for (int i = 0; i < evlist->core.nr_entries - 1; i++) {
73427c9fcfcSIan Rogers 		evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
735ffe59788SKan Liang 		/* pmu-event:u */
736ffe59788SKan Liang 		TEST_ASSERT_VAL("wrong exclude_user",
7371fc632ceSJiri Olsa 				!evsel->core.attr.exclude_user);
738ffe59788SKan Liang 		TEST_ASSERT_VAL("wrong exclude_kernel",
7391fc632ceSJiri Olsa 				evsel->core.attr.exclude_kernel);
7401fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7411fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
7421fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
7430997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
74427c9fcfcSIan Rogers 	}
745ffe59788SKan Liang 	/* cpu/pmu-event/u*/
746e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
74727c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong type", evsel__find_pmu(evsel)->is_core);
748ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_user",
7491fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
750ffe59788SKan Liang 	TEST_ASSERT_VAL("wrong exclude_kernel",
7511fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
7521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
7541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
7550997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.pinned);
756ffe59788SKan Liang 
7577741e03eSIan Rogers 	return TEST_OK;
758ffe59788SKan Liang }
759ffe59788SKan Liang 
760945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
761945aea22SJiri Olsa {
7626cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
763945aea22SJiri Olsa 
764945aea22SJiri Olsa 	/* config=10 */
7656cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
766945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
767945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
768945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
769945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
770945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
7714f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
772945aea22SJiri Olsa 
773945aea22SJiri Olsa 	/* config1 */
7746cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
775945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
776945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
777945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
778945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
779945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
7804f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1"));
781945aea22SJiri Olsa 
782945aea22SJiri Olsa 	/* config2=3 */
7836cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
784945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
785945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
786945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
787945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
788945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
7894f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2"));
790945aea22SJiri Olsa 
791204e7c49SRob Herring 	/* config3=4 */
792204e7c49SRob Herring 	term = list_entry(term->list.next, struct parse_events_term, list);
793204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type term",
794204e7c49SRob Herring 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3);
795204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type val",
796204e7c49SRob Herring 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
797204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong val", term->val.num == 4);
798204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3"));
799204e7c49SRob Herring 
800945aea22SJiri Olsa 	/* umask=1*/
8016cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
802945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
803945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
804945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
805945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
806945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
807945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
808945aea22SJiri Olsa 
8094929e95aSJiri Olsa 	/*
8104929e95aSJiri Olsa 	 * read
8114929e95aSJiri Olsa 	 *
8124929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
8134929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
8144929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
8154929e95aSJiri Olsa 	 */
8164929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
8174929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
81870c90e4aSIan Rogers 			term->type_term == PARSE_EVENTS__TERM_TYPE_RAW);
8194929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
82070c90e4aSIan Rogers 			term->type_val == PARSE_EVENTS__TERM_TYPE_STR);
82170c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "read"));
82270c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw"));
8234929e95aSJiri Olsa 
8244929e95aSJiri Olsa 	/*
8254929e95aSJiri Olsa 	 * r0xead
8264929e95aSJiri Olsa 	 *
8274929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
8284929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
8294929e95aSJiri Olsa 	 */
8304929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
8314929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
83270c90e4aSIan Rogers 			term->type_term == PARSE_EVENTS__TERM_TYPE_RAW);
8334929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
83470c90e4aSIan Rogers 			term->type_val == PARSE_EVENTS__TERM_TYPE_STR);
83570c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead"));
83670c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw"));
8377741e03eSIan Rogers 	return TEST_OK;
838945aea22SJiri Olsa }
839945aea22SJiri Olsa 
84063503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
841945aea22SJiri Olsa {
84232dcd021SJiri Olsa 	struct evsel *evsel, *leader;
843945aea22SJiri Olsa 
84427c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
84527c9fcfcSIan Rogers 			evlist->core.nr_entries == (perf_pmus__num_core_pmus() * 2));
84627c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
84727c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
848945aea22SJiri Olsa 
84927c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
850945aea22SJiri Olsa 		/* instructions:k */
85127c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
8521fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8539854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
8541fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8551fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8561fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
8571fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8581fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8591fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
860c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
8615643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8622bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
863a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
864945aea22SJiri Olsa 
865945aea22SJiri Olsa 		/* cycles:upp */
866e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
8671fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8689854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
8691fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8701fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8711fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
872945aea22SJiri Olsa 		/* use of precise requires exclude_guest */
8731fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8741fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8751fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
876fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8772bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
878a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
87927c9fcfcSIan Rogers 	}
8807741e03eSIan Rogers 	return TEST_OK;
881945aea22SJiri Olsa }
882945aea22SJiri Olsa 
88363503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
884945aea22SJiri Olsa {
88527c9fcfcSIan Rogers 	struct evsel *evsel, *leader = NULL;
886945aea22SJiri Olsa 
88727c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
88827c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus() + 1));
88927c9fcfcSIan Rogers 	/*
89027c9fcfcSIan Rogers 	 * TODO: Currently the software event won't be grouped with the hardware
89127c9fcfcSIan Rogers 	 * event except for 1 PMU.
89227c9fcfcSIan Rogers 	 */
8939d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
894945aea22SJiri Olsa 
89527c9fcfcSIan Rogers 	evlist__for_each_entry(evlist, evsel) {
89627c9fcfcSIan Rogers 		if (evsel->core.attr.type == PERF_TYPE_SOFTWARE) {
897945aea22SJiri Olsa 			/* faults + :ku modifier */
89827c9fcfcSIan Rogers 			leader = evsel;
89927c9fcfcSIan Rogers 			TEST_ASSERT_VAL("wrong config",
90027c9fcfcSIan Rogers 					test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS));
9011fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9021fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9031fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
904943b69acSJin Yao 			TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9051fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9061fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
907c754c382SArnaldo Carvalho de Melo 			TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
9085643b1a5SJiri Olsa 			TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9092bb72dbbSArnaldo Carvalho de Melo 			TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
910a9f93f97SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
91127c9fcfcSIan Rogers 			continue;
91227c9fcfcSIan Rogers 		}
91327c9fcfcSIan Rogers 		if (evsel->core.attr.type == PERF_TYPE_HARDWARE &&
91427c9fcfcSIan Rogers 		    test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)) {
915945aea22SJiri Olsa 			/* cache-references + :u modifier */
9161fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9171fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
9181fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
9191fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9201fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9211fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
92227c9fcfcSIan Rogers 			if (evsel__has_leader(evsel, leader))
9232bb72dbbSArnaldo Carvalho de Melo 				TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
924a9f93f97SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
92527c9fcfcSIan Rogers 			continue;
92627c9fcfcSIan Rogers 		}
927945aea22SJiri Olsa 		/* cycles:k */
9281fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9299854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
9301fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
9311fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9321fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
9331fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9341fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9351fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
936c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
937a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
93827c9fcfcSIan Rogers 	}
9397741e03eSIan Rogers 	return TEST_OK;
940945aea22SJiri Olsa }
941945aea22SJiri Olsa 
942378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
94363503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
944945aea22SJiri Olsa {
94527c9fcfcSIan Rogers 	struct evsel *evsel, *group1_leader = NULL, *group2_leader = NULL;
946945aea22SJiri Olsa 
94727c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
94827c9fcfcSIan Rogers 			evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus() + 2));
94927c9fcfcSIan Rogers 	/*
95027c9fcfcSIan Rogers 	 * Currently the software event won't be grouped with the hardware event
95127c9fcfcSIan Rogers 	 * except for 1 PMU. This means there are always just 2 groups
95227c9fcfcSIan Rogers 	 * regardless of the number of core PMUs.
95327c9fcfcSIan Rogers 	 */
9549d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
955945aea22SJiri Olsa 
95627c9fcfcSIan Rogers 	evlist__for_each_entry(evlist, evsel) {
95727c9fcfcSIan Rogers 		if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT) {
95843f322b4SRiku Voipio 			/* group1 syscalls:sys_enter_openat:H */
95927c9fcfcSIan Rogers 			group1_leader = evsel;
960945aea22SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_type",
96127c9fcfcSIan Rogers 					evsel->core.attr.sample_type == PERF_TP_SAMPLE_TYPE);
9621fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
9631fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9641fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9651fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9661fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9671fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9681fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
969c754c382SArnaldo Carvalho de Melo 			TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
97027c9fcfcSIan Rogers 			TEST_ASSERT_VAL("wrong group name", !strcmp(evsel->group_name, "group1"));
9715643b1a5SJiri Olsa 			TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9722bb72dbbSArnaldo Carvalho de Melo 			TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
973a9f93f97SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
97427c9fcfcSIan Rogers 			continue;
97527c9fcfcSIan Rogers 		}
97627c9fcfcSIan Rogers 		if (evsel->core.attr.type == PERF_TYPE_HARDWARE &&
97727c9fcfcSIan Rogers 		    test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)) {
97827c9fcfcSIan Rogers 			if (evsel->core.attr.exclude_user) {
979945aea22SJiri Olsa 				/* group1 cycles:kppp */
98027c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude_user",
98127c9fcfcSIan Rogers 						evsel->core.attr.exclude_user);
98227c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude_kernel",
98327c9fcfcSIan Rogers 						!evsel->core.attr.exclude_kernel);
9841fc632ceSJiri Olsa 				TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
985945aea22SJiri Olsa 				/* use of precise requires exclude_guest */
98627c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude guest",
98727c9fcfcSIan Rogers 						evsel->core.attr.exclude_guest);
98827c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude host",
98927c9fcfcSIan Rogers 						!evsel->core.attr.exclude_host);
99027c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong precise_ip",
99127c9fcfcSIan Rogers 						evsel->core.attr.precise_ip == 3);
99227c9fcfcSIan Rogers 				if (evsel__has_leader(evsel, group1_leader)) {
993945aea22SJiri Olsa 					TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
99427c9fcfcSIan Rogers 					TEST_ASSERT_VAL("wrong group_idx",
99527c9fcfcSIan Rogers 							evsel__group_idx(evsel) == 1);
99627c9fcfcSIan Rogers 				}
997a9f93f97SJiri Olsa 				TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
99827c9fcfcSIan Rogers 			} else {
999945aea22SJiri Olsa 				/* group2 cycles + G modifier */
100027c9fcfcSIan Rogers 				group2_leader = evsel;
100127c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude_kernel",
100227c9fcfcSIan Rogers 						!evsel->core.attr.exclude_kernel);
100327c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude_hv",
100427c9fcfcSIan Rogers 						!evsel->core.attr.exclude_hv);
100527c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude guest",
100627c9fcfcSIan Rogers 						!evsel->core.attr.exclude_guest);
100727c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude host",
100827c9fcfcSIan Rogers 						evsel->core.attr.exclude_host);
10091fc632ceSJiri Olsa 				TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1010c754c382SArnaldo Carvalho de Melo 				TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
101127c9fcfcSIan Rogers 				if (evsel->core.nr_members == 2) {
101227c9fcfcSIan Rogers 					TEST_ASSERT_VAL("wrong group_idx",
101327c9fcfcSIan Rogers 							evsel__group_idx(evsel) == 0);
101427c9fcfcSIan Rogers 				}
1015a9f93f97SJiri Olsa 				TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
101627c9fcfcSIan Rogers 			}
101727c9fcfcSIan Rogers 			continue;
101827c9fcfcSIan Rogers 		}
101927c9fcfcSIan Rogers 		if (evsel->core.attr.type == 1) {
1020945aea22SJiri Olsa 			/* group2 1:3 + G modifier */
10219854934bSIan Rogers 			TEST_ASSERT_VAL("wrong config", test_config(evsel, 3));
10221fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10231fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10241fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10251fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10261fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10271fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
102827c9fcfcSIan Rogers 			if (evsel__has_leader(evsel, group2_leader))
10292bb72dbbSArnaldo Carvalho de Melo 				TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
1030a9f93f97SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
103127c9fcfcSIan Rogers 			continue;
103227c9fcfcSIan Rogers 		}
1033945aea22SJiri Olsa 		/* instructions:u */
10341fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10359854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
10361fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10371fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10381fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
1039943b69acSJin Yao 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10401fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10411fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1042c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
1043a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
104427c9fcfcSIan Rogers 	}
10457741e03eSIan Rogers 	return TEST_OK;
1046945aea22SJiri Olsa }
1047378ef0f5SIan Rogers #endif
1048945aea22SJiri Olsa 
104963503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
1050945aea22SJiri Olsa {
105132dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1052945aea22SJiri Olsa 
105327c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
105427c9fcfcSIan Rogers 			evlist->core.nr_entries == (perf_pmus__num_core_pmus() * 2));
105527c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
105627c9fcfcSIan Rogers 			perf_pmus__num_core_pmus() == evlist__nr_groups(evlist));
1057945aea22SJiri Olsa 
105827c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1059945aea22SJiri Olsa 		/* cycles:u + p */
106027c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
10611fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10629854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10631fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10641fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10651fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
1066945aea22SJiri Olsa 		/* use of precise requires exclude_guest */
10671fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10681fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10691fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
1070945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1071c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10725643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10732bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
1074a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
1075945aea22SJiri Olsa 
1076945aea22SJiri Olsa 		/* instructions:kp + p */
1077e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
10781fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10799854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
10801fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
10811fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10821fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
1083945aea22SJiri Olsa 		/* use of precise requires exclude_guest */
10841fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10851fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10861fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
1087fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10882bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
1089a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
109027c9fcfcSIan Rogers 	}
10917741e03eSIan Rogers 	return TEST_OK;
1092945aea22SJiri Olsa }
1093945aea22SJiri Olsa 
109463503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
1095945aea22SJiri Olsa {
109627c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
1097945aea22SJiri Olsa 
109827c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
109927c9fcfcSIan Rogers 			evlist->core.nr_entries == (5 * perf_pmus__num_core_pmus()));
110027c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
110127c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == (2 * perf_pmus__num_core_pmus()));
1102945aea22SJiri Olsa 
110327c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1104945aea22SJiri Olsa 		/* cycles + G */
110527c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
11061fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11079854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11081fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11091fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11101fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11111fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11121fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11131fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1114945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1115c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11165643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11172bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
1118a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
1119945aea22SJiri Olsa 
1120945aea22SJiri Olsa 		/* instructions + G */
1121e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
11221fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11239854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
11241fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11251fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11261fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11271fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11281fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11291fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1130fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11312bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
1132a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
113327c9fcfcSIan Rogers 	}
113427c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1135945aea22SJiri Olsa 		/* cycles:G */
1136e470daeaSArnaldo Carvalho de Melo 		evsel = leader = evsel__next(evsel);
11371fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11389854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11391fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11401fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11411fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11421fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11431fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11441fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1145945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1146c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11475643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11482bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
1149a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
1150945aea22SJiri Olsa 
1151945aea22SJiri Olsa 		/* instructions:G */
1152e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
11531fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11549854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
11551fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11561fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11571fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11581fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11591fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11601fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1161fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11622bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
116327c9fcfcSIan Rogers 	}
116427c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1165945aea22SJiri Olsa 		/* cycles */
1166e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
11671fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11689854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11691fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11701fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11711fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11721fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11731fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11741fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1175c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
117627c9fcfcSIan Rogers 	}
11777741e03eSIan Rogers 	return TEST_OK;
1178945aea22SJiri Olsa }
1179945aea22SJiri Olsa 
118063503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
11815a30a99fSJiri Olsa {
118227c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
11835a30a99fSJiri Olsa 
118427c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
118527c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
118627c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
118727c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
11885a30a99fSJiri Olsa 
118927c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
11905a30a99fSJiri Olsa 		/* cycles + :H group modifier */
119127c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
11921fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11939854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11941fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11951fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11961fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11971fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11981fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11991fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
12005a30a99fSJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1201c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
12025643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
12032bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
12045a30a99fSJiri Olsa 
12055a30a99fSJiri Olsa 		/* cache-misses:G + :H group modifier */
1206e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
12071fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12089854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
12091fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12101fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12111fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12121fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
12131fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12141fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1215fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12162bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
121727c9fcfcSIan Rogers 	}
12187741e03eSIan Rogers 	return TEST_OK;
12195a30a99fSJiri Olsa }
12205a30a99fSJiri Olsa 
122163503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
12225a30a99fSJiri Olsa {
122327c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
12245a30a99fSJiri Olsa 
122527c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
122627c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
122727c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
122827c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
12295a30a99fSJiri Olsa 
123027c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
12315a30a99fSJiri Olsa 		/* cycles + :G group modifier */
123227c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
12331fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12349854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
12351fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12361fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12371fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12381fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
12391fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
12401fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
12415a30a99fSJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1242c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
12435643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
12442bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
12455a30a99fSJiri Olsa 
12465a30a99fSJiri Olsa 		/* cache-misses:H + :G group modifier */
1247e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
12481fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12499854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
12501fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12511fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12521fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12531fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
12541fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12551fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1256fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12572bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
125827c9fcfcSIan Rogers 	}
12597741e03eSIan Rogers 	return TEST_OK;
12605a30a99fSJiri Olsa }
12615a30a99fSJiri Olsa 
126263503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
12635a30a99fSJiri Olsa {
126427c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
12655a30a99fSJiri Olsa 
126627c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
126727c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
126827c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
126927c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
12705a30a99fSJiri Olsa 
127127c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
12725a30a99fSJiri Olsa 		/* cycles:G + :u group modifier */
127327c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
12741fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12759854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
12761fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12771fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12781fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12791fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
12801fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
12811fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
12825a30a99fSJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1283c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
12845643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
12852bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
12865a30a99fSJiri Olsa 
12875a30a99fSJiri Olsa 		/* cache-misses:H + :u group modifier */
1288e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
12891fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12909854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
12911fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12921fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12931fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12941fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12951fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12961fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1297fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12982bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
129927c9fcfcSIan Rogers 	}
13007741e03eSIan Rogers 	return TEST_OK;
13015a30a99fSJiri Olsa }
13025a30a99fSJiri Olsa 
130363503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
13045a30a99fSJiri Olsa {
130527c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
13065a30a99fSJiri Olsa 
130727c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
130827c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
130927c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
131027c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
13115a30a99fSJiri Olsa 
131227c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
13135a30a99fSJiri Olsa 		/* cycles:G + :uG group modifier */
131427c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
13151fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13169854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
13171fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13181fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13191fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13201fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
13211fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
13221fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
13235a30a99fSJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1324c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
13255643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
13262bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
13275a30a99fSJiri Olsa 
13285a30a99fSJiri Olsa 		/* cache-misses:H + :uG group modifier */
1329e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
13301fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13319854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
13321fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13331fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13341fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13351fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
13361fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
13371fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1338fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13392bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
134027c9fcfcSIan Rogers 	}
13417741e03eSIan Rogers 	return TEST_OK;
13425a30a99fSJiri Olsa }
13435a30a99fSJiri Olsa 
134463503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1345a9f93f97SJiri Olsa {
134627c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
1347a9f93f97SJiri Olsa 
134827c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
134927c9fcfcSIan Rogers 			evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus()));
1350a9f93f97SJiri Olsa 
135127c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1352a9f93f97SJiri Olsa 		/* cycles - sampling group leader */
135327c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
13541fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13559854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
13561fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13571fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
13581fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
13591fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
13601fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
13611fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1362a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1363fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1364a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1365a9f93f97SJiri Olsa 
1366a9f93f97SJiri Olsa 		/* cache-misses - not sampling */
1367e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
13681fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13699854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
13701fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13711fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
13721fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
13731fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
13741fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
13751fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1376fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1377a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1378a9f93f97SJiri Olsa 
1379a9f93f97SJiri Olsa 		/* branch-misses - not sampling */
1380e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
13811fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13829854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
13831fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13841fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
13851fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
13861fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
13871fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
13881fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1389a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1390fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1391a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
139227c9fcfcSIan Rogers 	}
13937741e03eSIan Rogers 	return TEST_OK;
1394a9f93f97SJiri Olsa }
1395a9f93f97SJiri Olsa 
139663503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1397a9f93f97SJiri Olsa {
139827c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
1399a9f93f97SJiri Olsa 
140027c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
140127c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
1402a9f93f97SJiri Olsa 
140327c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1404a9f93f97SJiri Olsa 		/* instructions - sampling group leader */
140527c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
14061fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
14079854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
14081fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
14091fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14101fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
14111fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
14121fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
14131fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1414a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1415fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1416a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1417a9f93f97SJiri Olsa 
1418a9f93f97SJiri Olsa 		/* branch-misses - not sampling */
1419e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
14201fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
14219854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
14221fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
14231fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14241fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
14251fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
14261fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
14271fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1428a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1429fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1430a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
143127c9fcfcSIan Rogers 	}
14327741e03eSIan Rogers 	return TEST_OK;
1433a9f93f97SJiri Olsa }
1434a9f93f97SJiri Olsa 
143563503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1436c9ee780fSMichael Ellerman {
143727c9fcfcSIan Rogers 	struct evsel *evsel = NULL;
1438c9ee780fSMichael Ellerman 
143927c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
144027c9fcfcSIan Rogers 			evlist->core.nr_entries == perf_pmus__num_core_pmus());
144127c9fcfcSIan Rogers 
144227c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
144327c9fcfcSIan Rogers 		evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
14441fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
14451fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14461fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
14471fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
14481fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
144927c9fcfcSIan Rogers 	}
1450c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1451c9ee780fSMichael Ellerman }
1452c9ee780fSMichael Ellerman 
145363503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1454c9ee780fSMichael Ellerman {
145527c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
1456c9ee780fSMichael Ellerman 
145727c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
145827c9fcfcSIan Rogers 			evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus()));
1459c9ee780fSMichael Ellerman 
146027c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1461c9ee780fSMichael Ellerman 		/* cycles - group leader */
146227c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
14631fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
14649854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
1465c9ee780fSMichael Ellerman 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1466fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
146727c9fcfcSIan Rogers 		/* TODO: The group modifier is not copied to the split group leader. */
146827c9fcfcSIan Rogers 		if (perf_pmus__num_core_pmus() == 1)
14691fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1470c9ee780fSMichael Ellerman 
1471c9ee780fSMichael Ellerman 		/* cache-misses - can not be pinned, but will go on with the leader */
1472e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
14731fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
14749854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
14751fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1476c9ee780fSMichael Ellerman 
1477c9ee780fSMichael Ellerman 		/* branch-misses - ditto */
1478e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
14799854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
14801fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
148127c9fcfcSIan Rogers 	}
14827741e03eSIan Rogers 	return TEST_OK;
1483c9ee780fSMichael Ellerman }
1484c9ee780fSMichael Ellerman 
14850997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist)
14860997a266SAndi Kleen {
14870997a266SAndi Kleen 	struct evsel *evsel = evlist__first(evlist);
14880997a266SAndi Kleen 
14890997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
14900997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14910997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
14920997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
14930997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
14940997a266SAndi Kleen 
14950997a266SAndi Kleen 	return test__checkevent_symbolic_name(evlist);
14960997a266SAndi Kleen }
14970997a266SAndi Kleen 
14980997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist)
14990997a266SAndi Kleen {
150027c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
15010997a266SAndi Kleen 
150227c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
150327c9fcfcSIan Rogers 			evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus()));
15040997a266SAndi Kleen 
150527c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
15060997a266SAndi Kleen 		/* cycles - group leader */
150727c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
15080997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
15099854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
15100997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1511fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
151227c9fcfcSIan Rogers 		/* TODO: The group modifier is not copied to the split group leader. */
151327c9fcfcSIan Rogers 		if (perf_pmus__num_core_pmus() == 1)
15140997a266SAndi Kleen 			TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
15150997a266SAndi Kleen 
15160997a266SAndi Kleen 		/* cache-misses - can not be pinned, but will go on with the leader */
15170997a266SAndi Kleen 		evsel = evsel__next(evsel);
15180997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
15199854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
15200997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
15210997a266SAndi Kleen 
15220997a266SAndi Kleen 		/* branch-misses - ditto */
15230997a266SAndi Kleen 		evsel = evsel__next(evsel);
15249854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
15250997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
152627c9fcfcSIan Rogers 	}
15277741e03eSIan Rogers 	return TEST_OK;
15280997a266SAndi Kleen }
152963503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1530ec32398cSJacob Shin {
1531515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1532ec32398cSJacob Shin 
15336484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
15341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
15359854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
1536ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
15371fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1538ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
15391fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1540ec32398cSJacob Shin 
15417741e03eSIan Rogers 	return TEST_OK;
1542ec32398cSJacob Shin }
1543ec32398cSJacob Shin 
154463503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1545ec32398cSJacob Shin {
1546515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1547ec32398cSJacob Shin 
15486484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
15491fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
15509854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
1551ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
15521fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1553ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
15541fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1555ec32398cSJacob Shin 
15567741e03eSIan Rogers 	return TEST_OK;
1557ec32398cSJacob Shin }
1558ec32398cSJacob Shin 
1559ec32398cSJacob Shin static int
156063503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1561ec32398cSJacob Shin {
1562515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1563ec32398cSJacob Shin 
15641fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
15651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
15661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
15671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1568ec32398cSJacob Shin 
1569ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1570ec32398cSJacob Shin }
1571ec32398cSJacob Shin 
157263503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1573ddd83c97SJiri Olsa {
1574515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1575ddd83c97SJiri Olsa 
157627c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
157727c9fcfcSIan Rogers 			evlist->core.nr_entries == (1 + perf_pmus__num_core_pmus()));
15781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
15799854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK));
15807741e03eSIan Rogers 	return TEST_OK;
1581ddd83c97SJiri Olsa }
1582ddd83c97SJiri Olsa 
158363503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
158410bf358aSWang Nan {
1585515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
158610bf358aSWang Nan 
1587ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn"));
15887741e03eSIan Rogers 	return TEST_OK;
158910bf358aSWang Nan }
159010bf358aSWang Nan 
159163503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
159210bf358aSWang Nan {
1593515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
159410bf358aSWang Nan 
1595ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu"));
15967741e03eSIan Rogers 	return TEST_OK;
159710bf358aSWang Nan }
159810bf358aSWang Nan 
159963503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
160010bf358aSWang Nan {
1601515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
160210bf358aSWang Nan 
1603ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu"));
16047741e03eSIan Rogers 	return TEST_OK;
160510bf358aSWang Nan }
160610bf358aSWang Nan 
160763503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
160843d0b978SWang Nan {
1609515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
161043d0b978SWang Nan 
1611ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu"));
16124a7c4eafSIan Rogers 	return test__checkevent_genhw(evlist);
161343d0b978SWang Nan }
161410bf358aSWang Nan 
16158f8c1068SIan Rogers static bool test__pmu_cpu_valid(void)
16168f8c1068SIan Rogers {
16171eaf496eSIan Rogers 	return !!perf_pmus__find("cpu");
16188f8c1068SIan Rogers }
16198f8c1068SIan Rogers 
162016ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
162116ddcfbfSJiri Olsa {
16221eaf496eSIan Rogers 	return !!perf_pmus__find("intel_pt");
162316ddcfbfSJiri Olsa }
162416ddcfbfSJiri Olsa 
162563503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1626b3f58c8dSArnaldo Carvalho de Melo {
1627515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1628b3f58c8dSArnaldo Carvalho de Melo 
1629ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u"));
16307741e03eSIan Rogers 	return TEST_OK;
1631b3f58c8dSArnaldo Carvalho de Melo }
1632b3f58c8dSArnaldo Carvalho de Melo 
163363503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
163406dc5bf2SAlexey Budankov {
1635515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
163606dc5bf2SAlexey Budankov 
16379854934bSIan Rogers 	TEST_ASSERT_VAL("wrong complex name parsing",
16389854934bSIan Rogers 			evsel__name_is(evsel,
16399854934bSIan Rogers 				       "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks"));
16407741e03eSIan Rogers 	return TEST_OK;
164106dc5bf2SAlexey Budankov }
164206dc5bf2SAlexey Budankov 
16433a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
16443a6c51e4SJiri Olsa {
16453a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
16463a6c51e4SJiri Olsa 
16473a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16483a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
16499854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a));
16507741e03eSIan Rogers 	return TEST_OK;
16513a6c51e4SJiri Olsa }
16523a6c51e4SJiri Olsa 
165363503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1654714a92d8SJiri Olsa {
1655515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1656714a92d8SJiri Olsa 
16571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
16589854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
16591fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
16607741e03eSIan Rogers 	return TEST_OK;
1661714a92d8SJiri Olsa }
1662714a92d8SJiri Olsa 
166363503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1664714a92d8SJiri Olsa {
1665515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1666714a92d8SJiri Olsa 
16671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
16689854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
16691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
16707741e03eSIan Rogers 	return TEST_OK;
1671714a92d8SJiri Olsa }
1672714a92d8SJiri Olsa 
1673e831f3ccSIan Rogers static int test__term_equal_term(struct evlist *evlist)
1674e831f3ccSIan Rogers {
1675e831f3ccSIan Rogers 	struct evsel *evsel = evlist__first(evlist);
1676e831f3ccSIan Rogers 
1677e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
1678e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
1679e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "name") == 0);
1680e831f3ccSIan Rogers 	return TEST_OK;
1681e831f3ccSIan Rogers }
1682e831f3ccSIan Rogers 
16832aadca4bSIan Rogers static int test__term_equal_legacy(struct evlist *evlist)
16842aadca4bSIan Rogers {
16852aadca4bSIan Rogers 	struct evsel *evsel = evlist__first(evlist);
16862aadca4bSIan Rogers 
16872aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
16882aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
16892aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "l1d") == 0);
16902aadca4bSIan Rogers 	return TEST_OK;
16912aadca4bSIan Rogers }
16922aadca4bSIan Rogers 
1693378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
169482ce75d9SJiri Olsa static int count_tracepoints(void)
169582ce75d9SJiri Olsa {
169682ce75d9SJiri Olsa 	struct dirent *events_ent;
169782ce75d9SJiri Olsa 	DIR *events_dir;
169882ce75d9SJiri Olsa 	int cnt = 0;
169982ce75d9SJiri Olsa 
17007014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
170182ce75d9SJiri Olsa 
170282ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
170382ce75d9SJiri Olsa 
170482ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
170525a7d914SArnaldo Carvalho de Melo 		char *sys_path;
170682ce75d9SJiri Olsa 		struct dirent *sys_ent;
170782ce75d9SJiri Olsa 		DIR *sys_dir;
170882ce75d9SJiri Olsa 
170982ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
171082ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
171182ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
171282ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
171382ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
171482ce75d9SJiri Olsa 			continue;
171582ce75d9SJiri Olsa 
171625a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
171725a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
171882ce75d9SJiri Olsa 
171982ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
172082ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
172182ce75d9SJiri Olsa 
172282ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
172382ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
172482ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
172582ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
172682ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
172782ce75d9SJiri Olsa 				continue;
172882ce75d9SJiri Olsa 
172982ce75d9SJiri Olsa 			cnt++;
173082ce75d9SJiri Olsa 		}
173182ce75d9SJiri Olsa 
173282ce75d9SJiri Olsa 		closedir(sys_dir);
173325a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
173482ce75d9SJiri Olsa 	}
173582ce75d9SJiri Olsa 
173682ce75d9SJiri Olsa 	closedir(events_dir);
173782ce75d9SJiri Olsa 	return cnt;
173882ce75d9SJiri Olsa }
173982ce75d9SJiri Olsa 
174063503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
174182ce75d9SJiri Olsa {
174282ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
17436484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
174482ce75d9SJiri Olsa 
174582ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
174682ce75d9SJiri Olsa }
1747378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */
174882ce75d9SJiri Olsa 
174923b6339bSArnaldo Carvalho de Melo struct evlist_test {
1750945aea22SJiri Olsa 	const char *name;
175116ddcfbfSJiri Olsa 	bool (*valid)(void);
175263503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1753945aea22SJiri Olsa };
1754945aea22SJiri Olsa 
17558252e791SIan Rogers static const struct evlist_test test__events[] = {
1756378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1757615b8f99SAlexander Yarygin 	{
175843f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1759945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
17608252e791SIan Rogers 		/* 0 */
1761945aea22SJiri Olsa 	},
1762615b8f99SAlexander Yarygin 	{
1763945aea22SJiri Olsa 		.name  = "syscalls:*",
1764945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
17658252e791SIan Rogers 		/* 1 */
1766945aea22SJiri Olsa 	},
1767378ef0f5SIan Rogers #endif
1768615b8f99SAlexander Yarygin 	{
1769945aea22SJiri Olsa 		.name  = "r1a",
1770945aea22SJiri Olsa 		.check = test__checkevent_raw,
17718252e791SIan Rogers 		/* 2 */
1772945aea22SJiri Olsa 	},
1773615b8f99SAlexander Yarygin 	{
1774945aea22SJiri Olsa 		.name  = "1:1",
1775945aea22SJiri Olsa 		.check = test__checkevent_numeric,
17768252e791SIan Rogers 		/* 3 */
1777945aea22SJiri Olsa 	},
1778615b8f99SAlexander Yarygin 	{
1779945aea22SJiri Olsa 		.name  = "instructions",
1780945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
17818252e791SIan Rogers 		/* 4 */
1782945aea22SJiri Olsa 	},
1783615b8f99SAlexander Yarygin 	{
1784945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1785945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
17868252e791SIan Rogers 		/* 5 */
1787945aea22SJiri Olsa 	},
1788615b8f99SAlexander Yarygin 	{
1789945aea22SJiri Olsa 		.name  = "faults",
1790945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
17918252e791SIan Rogers 		/* 6 */
1792945aea22SJiri Olsa 	},
1793615b8f99SAlexander Yarygin 	{
1794945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1795945aea22SJiri Olsa 		.check = test__checkevent_genhw,
17968252e791SIan Rogers 		/* 7 */
1797945aea22SJiri Olsa 	},
1798615b8f99SAlexander Yarygin 	{
1799945aea22SJiri Olsa 		.name  = "mem:0",
1800945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
18018252e791SIan Rogers 		/* 8 */
1802945aea22SJiri Olsa 	},
1803615b8f99SAlexander Yarygin 	{
1804945aea22SJiri Olsa 		.name  = "mem:0:x",
1805945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
18068252e791SIan Rogers 		/* 9 */
1807945aea22SJiri Olsa 	},
1808615b8f99SAlexander Yarygin 	{
1809945aea22SJiri Olsa 		.name  = "mem:0:r",
1810945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
18118252e791SIan Rogers 		/* 0 */
1812945aea22SJiri Olsa 	},
1813615b8f99SAlexander Yarygin 	{
1814945aea22SJiri Olsa 		.name  = "mem:0:w",
1815945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
18168252e791SIan Rogers 		/* 1 */
1817945aea22SJiri Olsa 	},
1818378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1819615b8f99SAlexander Yarygin 	{
182043f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1821945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
18228252e791SIan Rogers 		/* 2 */
1823945aea22SJiri Olsa 	},
1824615b8f99SAlexander Yarygin 	{
1825945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1826945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
18278252e791SIan Rogers 		/* 3 */
1828945aea22SJiri Olsa 	},
1829378ef0f5SIan Rogers #endif
1830615b8f99SAlexander Yarygin 	{
1831945aea22SJiri Olsa 		.name  = "r1a:kp",
1832945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
18338252e791SIan Rogers 		/* 4 */
1834945aea22SJiri Olsa 	},
1835615b8f99SAlexander Yarygin 	{
1836945aea22SJiri Olsa 		.name  = "1:1:hp",
1837945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
18388252e791SIan Rogers 		/* 5 */
1839945aea22SJiri Olsa 	},
1840615b8f99SAlexander Yarygin 	{
1841945aea22SJiri Olsa 		.name  = "instructions:h",
1842945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
18438252e791SIan Rogers 		/* 6 */
1844945aea22SJiri Olsa 	},
1845615b8f99SAlexander Yarygin 	{
1846945aea22SJiri Olsa 		.name  = "faults:u",
1847945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
18488252e791SIan Rogers 		/* 7 */
1849945aea22SJiri Olsa 	},
1850615b8f99SAlexander Yarygin 	{
1851945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1852945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
18538252e791SIan Rogers 		/* 8 */
1854945aea22SJiri Olsa 	},
1855615b8f99SAlexander Yarygin 	{
1856945aea22SJiri Olsa 		.name  = "mem:0:u",
1857945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
18588252e791SIan Rogers 		/* 9 */
1859945aea22SJiri Olsa 	},
1860615b8f99SAlexander Yarygin 	{
1861945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1862945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
18638252e791SIan Rogers 		/* 0 */
1864945aea22SJiri Olsa 	},
1865615b8f99SAlexander Yarygin 	{
1866945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1867945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
18688252e791SIan Rogers 		/* 1 */
1869945aea22SJiri Olsa 	},
1870615b8f99SAlexander Yarygin 	{
1871945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1872945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
18738252e791SIan Rogers 		/* 2 */
1874945aea22SJiri Olsa 	},
1875378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1876615b8f99SAlexander Yarygin 	{
187743f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1878945aea22SJiri Olsa 		.check = test__checkevent_list,
18798252e791SIan Rogers 		/* 3 */
1880945aea22SJiri Olsa 	},
1881378ef0f5SIan Rogers #endif
1882615b8f99SAlexander Yarygin 	{
1883945aea22SJiri Olsa 		.name  = "instructions:G",
1884945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
18858252e791SIan Rogers 		/* 4 */
1886945aea22SJiri Olsa 	},
1887615b8f99SAlexander Yarygin 	{
1888945aea22SJiri Olsa 		.name  = "instructions:H",
1889945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
18908252e791SIan Rogers 		/* 5 */
1891945aea22SJiri Olsa 	},
1892615b8f99SAlexander Yarygin 	{
1893945aea22SJiri Olsa 		.name  = "mem:0:rw",
1894945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
18958252e791SIan Rogers 		/* 6 */
1896945aea22SJiri Olsa 	},
1897615b8f99SAlexander Yarygin 	{
1898945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1899945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
19008252e791SIan Rogers 		/* 7 */
1901945aea22SJiri Olsa 	},
1902615b8f99SAlexander Yarygin 	{
1903945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1904945aea22SJiri Olsa 		.check = test__group1,
19058252e791SIan Rogers 		/* 8 */
1906945aea22SJiri Olsa 	},
1907615b8f99SAlexander Yarygin 	{
1908945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1909945aea22SJiri Olsa 		.check = test__group2,
19108252e791SIan Rogers 		/* 9 */
1911945aea22SJiri Olsa 	},
1912378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1913615b8f99SAlexander Yarygin 	{
191443f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1915945aea22SJiri Olsa 		.check = test__group3,
19168252e791SIan Rogers 		/* 0 */
1917945aea22SJiri Olsa 	},
1918378ef0f5SIan Rogers #endif
1919615b8f99SAlexander Yarygin 	{
1920945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1921945aea22SJiri Olsa 		.check = test__group4,
19228252e791SIan Rogers 		/* 1 */
1923945aea22SJiri Olsa 	},
1924615b8f99SAlexander Yarygin 	{
1925945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1926945aea22SJiri Olsa 		.check = test__group5,
19278252e791SIan Rogers 		/* 2 */
1928945aea22SJiri Olsa 	},
1929378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1930615b8f99SAlexander Yarygin 	{
193182ce75d9SJiri Olsa 		.name  = "*:*",
193282ce75d9SJiri Olsa 		.check = test__all_tracepoints,
19338252e791SIan Rogers 		/* 3 */
193482ce75d9SJiri Olsa 	},
1935378ef0f5SIan Rogers #endif
1936615b8f99SAlexander Yarygin 	{
19375a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
19385a30a99fSJiri Olsa 		.check = test__group_gh1,
19398252e791SIan Rogers 		/* 4 */
19405a30a99fSJiri Olsa 	},
1941615b8f99SAlexander Yarygin 	{
19425a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
19435a30a99fSJiri Olsa 		.check = test__group_gh2,
19448252e791SIan Rogers 		/* 5 */
19455a30a99fSJiri Olsa 	},
1946615b8f99SAlexander Yarygin 	{
19475a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
19485a30a99fSJiri Olsa 		.check = test__group_gh3,
19498252e791SIan Rogers 		/* 6 */
19505a30a99fSJiri Olsa 	},
1951615b8f99SAlexander Yarygin 	{
19525a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
19535a30a99fSJiri Olsa 		.check = test__group_gh4,
19548252e791SIan Rogers 		/* 7 */
19555a30a99fSJiri Olsa 	},
1956615b8f99SAlexander Yarygin 	{
1957a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1958a9f93f97SJiri Olsa 		.check = test__leader_sample1,
19598252e791SIan Rogers 		/* 8 */
1960a9f93f97SJiri Olsa 	},
1961615b8f99SAlexander Yarygin 	{
1962a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1963a9f93f97SJiri Olsa 		.check = test__leader_sample2,
19648252e791SIan Rogers 		/* 9 */
1965a9f93f97SJiri Olsa 	},
1966615b8f99SAlexander Yarygin 	{
1967c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1968c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
19698252e791SIan Rogers 		/* 0 */
1970c9ee780fSMichael Ellerman 	},
1971615b8f99SAlexander Yarygin 	{
1972c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1973c9ee780fSMichael Ellerman 		.check = test__pinned_group,
19748252e791SIan Rogers 		/* 1 */
1975c9ee780fSMichael Ellerman 	},
1976ec32398cSJacob Shin 	{
1977ec32398cSJacob Shin 		.name  = "mem:0/1",
1978ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
19798252e791SIan Rogers 		/* 2 */
1980ec32398cSJacob Shin 	},
1981ec32398cSJacob Shin 	{
1982ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1983ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
19848252e791SIan Rogers 		/* 3 */
1985ec32398cSJacob Shin 	},
1986ec32398cSJacob Shin 	{
1987ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1988ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
19898252e791SIan Rogers 		/* 4 */
1990ec32398cSJacob Shin 	},
1991378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT)
1992c0bc8c6dSAlexander Yarygin 	{
1993c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1994c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
199553fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
19968252e791SIan Rogers 		/* 0 */
1997c0bc8c6dSAlexander Yarygin 	},
1998c0bc8c6dSAlexander Yarygin #endif
1999a1e12da4SJiri Olsa 	{
2000a1e12da4SJiri Olsa 		.name  = "instructions:I",
2001a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
20028252e791SIan Rogers 		/* 5 */
2003a1e12da4SJiri Olsa 	},
2004a1e12da4SJiri Olsa 	{
2005a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
2006a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
20078252e791SIan Rogers 		/* 6 */
2008a1e12da4SJiri Olsa 	},
2009ddd83c97SJiri Olsa 	{
2010ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
2011ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
20128252e791SIan Rogers 		/* 7 */
2013ddd83c97SJiri Olsa 	},
201410bf358aSWang Nan 	{
201510bf358aSWang Nan 		.name  = "instructions/name=insn/",
201610bf358aSWang Nan 		.check = test__checkevent_config_symbol,
20178252e791SIan Rogers 		/* 8 */
201810bf358aSWang Nan 	},
201910bf358aSWang Nan 	{
202010bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
202110bf358aSWang Nan 		.check = test__checkevent_config_raw,
20228252e791SIan Rogers 		/* 9 */
202310bf358aSWang Nan 	},
202410bf358aSWang Nan 	{
202510bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
202610bf358aSWang Nan 		.check = test__checkevent_config_num,
20278252e791SIan Rogers 		/* 0 */
202810bf358aSWang Nan 	},
202943d0b978SWang Nan 	{
203043d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
203143d0b978SWang Nan 		.check = test__checkevent_config_cache,
20328252e791SIan Rogers 		/* 1 */
203343d0b978SWang Nan 	},
2034b3f58c8dSArnaldo Carvalho de Melo 	{
2035b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
203616ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
2037b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
20388252e791SIan Rogers 		/* 2 */
2039b3f58c8dSArnaldo Carvalho de Melo 	},
204006dc5bf2SAlexey Budankov 	{
204106dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
204206dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
20438252e791SIan Rogers 		/* 3 */
2044714a92d8SJiri Olsa 	},
2045714a92d8SJiri Olsa 	{
2046714a92d8SJiri Olsa 		.name  = "cycles//u",
2047714a92d8SJiri Olsa 		.check = test__sym_event_slash,
20488252e791SIan Rogers 		/* 4 */
2049714a92d8SJiri Olsa 	},
2050714a92d8SJiri Olsa 	{
2051714a92d8SJiri Olsa 		.name  = "cycles:k",
2052714a92d8SJiri Olsa 		.check = test__sym_event_dc,
20538252e791SIan Rogers 		/* 5 */
20540997a266SAndi Kleen 	},
20550997a266SAndi Kleen 	{
20560997a266SAndi Kleen 		.name  = "instructions:uep",
20570997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
20588252e791SIan Rogers 		/* 6 */
20590997a266SAndi Kleen 	},
20600997a266SAndi Kleen 	{
20610997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
20620997a266SAndi Kleen 		.check = test__exclusive_group,
20638252e791SIan Rogers 		/* 7 */
20640997a266SAndi Kleen 	},
2065e831f3ccSIan Rogers 	{
2066e831f3ccSIan Rogers 		.name  = "cycles/name=name/",
2067e831f3ccSIan Rogers 		.check = test__term_equal_term,
2068e831f3ccSIan Rogers 		/* 8 */
2069e831f3ccSIan Rogers 	},
20702aadca4bSIan Rogers 	{
20712aadca4bSIan Rogers 		.name  = "cycles/name=l1d/",
20722aadca4bSIan Rogers 		.check = test__term_equal_legacy,
20732aadca4bSIan Rogers 		/* 9 */
20742aadca4bSIan Rogers 	},
2075f0617f52SAdrian Hunter 	{
2076f0617f52SAdrian Hunter 		.name  = "mem:0/name=breakpoint/",
2077f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint,
2078f0617f52SAdrian Hunter 		/* 0 */
2079f0617f52SAdrian Hunter 	},
2080f0617f52SAdrian Hunter 	{
2081f0617f52SAdrian Hunter 		.name  = "mem:0:x/name=breakpoint/",
2082f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_x,
2083f0617f52SAdrian Hunter 		/* 1 */
2084f0617f52SAdrian Hunter 	},
2085f0617f52SAdrian Hunter 	{
2086f0617f52SAdrian Hunter 		.name  = "mem:0:r/name=breakpoint/",
2087f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_r,
2088f0617f52SAdrian Hunter 		/* 2 */
2089f0617f52SAdrian Hunter 	},
2090f0617f52SAdrian Hunter 	{
2091f0617f52SAdrian Hunter 		.name  = "mem:0:w/name=breakpoint/",
2092f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_w,
2093f0617f52SAdrian Hunter 		/* 3 */
2094f0617f52SAdrian Hunter 	},
2095f0617f52SAdrian Hunter 	{
2096f0617f52SAdrian Hunter 		.name  = "mem:0/name=breakpoint/u",
2097f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_modifier_name,
2098f0617f52SAdrian Hunter 		/* 4 */
2099f0617f52SAdrian Hunter 	},
2100f0617f52SAdrian Hunter 	{
2101f0617f52SAdrian Hunter 		.name  = "mem:0:x/name=breakpoint/k",
2102f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_x_modifier_name,
2103f0617f52SAdrian Hunter 		/* 5 */
2104f0617f52SAdrian Hunter 	},
2105f0617f52SAdrian Hunter 	{
2106f0617f52SAdrian Hunter 		.name  = "mem:0:r/name=breakpoint/hp",
2107f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_r_modifier_name,
2108f0617f52SAdrian Hunter 		/* 6 */
2109f0617f52SAdrian Hunter 	},
2110f0617f52SAdrian Hunter 	{
2111f0617f52SAdrian Hunter 		.name  = "mem:0:w/name=breakpoint/up",
2112f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_w_modifier_name,
2113f0617f52SAdrian Hunter 		/* 7 */
2114f0617f52SAdrian Hunter 	},
2115f0617f52SAdrian Hunter 	{
2116f0617f52SAdrian Hunter 		.name  = "mem:0:rw/name=breakpoint/",
2117f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_rw,
2118f0617f52SAdrian Hunter 		/* 8 */
2119f0617f52SAdrian Hunter 	},
2120f0617f52SAdrian Hunter 	{
2121f0617f52SAdrian Hunter 		.name  = "mem:0:rw/name=breakpoint/kp",
2122f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_rw_modifier_name,
2123f0617f52SAdrian Hunter 		/* 9 */
2124f0617f52SAdrian Hunter 	},
2125f0617f52SAdrian Hunter 	{
2126f0617f52SAdrian Hunter 		.name  = "mem:0/1/name=breakpoint/",
2127f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_len,
2128f0617f52SAdrian Hunter 		/* 0 */
2129f0617f52SAdrian Hunter 	},
2130f0617f52SAdrian Hunter 	{
2131f0617f52SAdrian Hunter 		.name  = "mem:0/2:w/name=breakpoint/",
2132f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_len_w,
2133f0617f52SAdrian Hunter 		/* 1 */
2134f0617f52SAdrian Hunter 	},
2135f0617f52SAdrian Hunter 	{
2136f0617f52SAdrian Hunter 		.name  = "mem:0/4:rw/name=breakpoint/u",
2137f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_len_rw_modifier,
2138f0617f52SAdrian Hunter 		/* 2 */
2139f0617f52SAdrian Hunter 	},
2140f0617f52SAdrian Hunter 	{
2141f0617f52SAdrian Hunter 		.name  = "mem:0/1/name=breakpoint1/,mem:0/4:rw/name=breakpoint2/",
2142f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_2_events,
2143f0617f52SAdrian Hunter 		/* 3 */
2144f0617f52SAdrian Hunter 	},
2145945aea22SJiri Olsa };
2146945aea22SJiri Olsa 
21478252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
2148615b8f99SAlexander Yarygin 	{
2149945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
21508f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
2151945aea22SJiri Olsa 		.check = test__checkevent_pmu,
21528252e791SIan Rogers 		/* 0 */
2153945aea22SJiri Olsa 	},
2154615b8f99SAlexander Yarygin 	{
2155945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
21568f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
2157945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
21588252e791SIan Rogers 		/* 1 */
2159945aea22SJiri Olsa 	},
216071ef150eSKan Liang 	{
216171ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
21628f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
216371ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
21648252e791SIan Rogers 		/* 2 */
216571ef150eSKan Liang 	},
216606dc5bf2SAlexey Budankov 	{
2167a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
21688f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
216906dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
21708252e791SIan Rogers 		/* 3 */
21713a6c51e4SJiri Olsa 	},
21723a6c51e4SJiri Olsa 	{
21733a6c51e4SJiri Olsa 		.name  = "software/r1a/",
21743a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
21758252e791SIan Rogers 		/* 4 */
21763a6c51e4SJiri Olsa 	},
2177c33cdf54SJiri Olsa 	{
2178c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
2179c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
21808252e791SIan Rogers 		/* 5 */
2181c33cdf54SJiri Olsa 	},
21826fd1e519SIan Rogers 	{
21836fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/",
21846fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
21856fd1e519SIan Rogers 		.check = test__checkevent_genhw,
21866fd1e519SIan Rogers 		/* 6 */
21876fd1e519SIan Rogers 	},
21886fd1e519SIan Rogers 	{
21896fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/kp",
21906fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
21916fd1e519SIan Rogers 		.check = test__checkevent_genhw_modifier,
21926fd1e519SIan Rogers 		/* 7 */
21936fd1e519SIan Rogers 	},
21946fd1e519SIan Rogers 	{
21956fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-misses,name=cachepmu/",
21966fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
21976fd1e519SIan Rogers 		.check = test__checkevent_config_cache,
21986fd1e519SIan Rogers 		/* 8 */
21996fd1e519SIan Rogers 	},
22005ea8f2ccSIan Rogers 	{
22015ea8f2ccSIan Rogers 		.name  = "cpu/instructions/",
22025ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22035ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name,
22045ea8f2ccSIan Rogers 		/* 9 */
22055ea8f2ccSIan Rogers 	},
22065ea8f2ccSIan Rogers 	{
22075ea8f2ccSIan Rogers 		.name  = "cpu/cycles,period=100000,config2/",
22085ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22095ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name_config,
22105ea8f2ccSIan Rogers 		/* 0 */
22115ea8f2ccSIan Rogers 	},
22125ea8f2ccSIan Rogers 	{
22135ea8f2ccSIan Rogers 		.name  = "cpu/instructions/h",
22145ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22155ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name_modifier,
22165ea8f2ccSIan Rogers 		/* 1 */
22175ea8f2ccSIan Rogers 	},
22185ea8f2ccSIan Rogers 	{
22195ea8f2ccSIan Rogers 		.name  = "cpu/instructions/G",
22205ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22215ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_host_modifier,
22225ea8f2ccSIan Rogers 		/* 2 */
22235ea8f2ccSIan Rogers 	},
22245ea8f2ccSIan Rogers 	{
22255ea8f2ccSIan Rogers 		.name  = "cpu/instructions/H",
22265ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22275ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_guest_modifier,
22285ea8f2ccSIan Rogers 		/* 3 */
22295ea8f2ccSIan Rogers 	},
22305ea8f2ccSIan Rogers 	{
22315ea8f2ccSIan Rogers 		.name  = "{cpu/instructions/k,cpu/cycles/upp}",
22325ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22335ea8f2ccSIan Rogers 		.check = test__group1,
22345ea8f2ccSIan Rogers 		/* 4 */
22355ea8f2ccSIan Rogers 	},
22365ea8f2ccSIan Rogers 	{
22375ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/u,cpu/instructions/kp}:p",
22385ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22395ea8f2ccSIan Rogers 		.check = test__group4,
22405ea8f2ccSIan Rogers 		/* 5 */
22415ea8f2ccSIan Rogers 	},
22425ea8f2ccSIan Rogers 	{
22435ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/G}:H",
22445ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22455ea8f2ccSIan Rogers 		.check = test__group_gh1,
22465ea8f2ccSIan Rogers 		/* 6 */
22475ea8f2ccSIan Rogers 	},
22485ea8f2ccSIan Rogers 	{
22495ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/H}:G",
22505ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22515ea8f2ccSIan Rogers 		.check = test__group_gh2,
22525ea8f2ccSIan Rogers 		/* 7 */
22535ea8f2ccSIan Rogers 	},
22545ea8f2ccSIan Rogers 	{
22555ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/G,cpu/cache-misses/H}:u",
22565ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22575ea8f2ccSIan Rogers 		.check = test__group_gh3,
22585ea8f2ccSIan Rogers 		/* 8 */
22595ea8f2ccSIan Rogers 	},
22605ea8f2ccSIan Rogers 	{
22615ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/G,cpu/cache-misses/H}:uG",
22625ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22635ea8f2ccSIan Rogers 		.check = test__group_gh4,
22645ea8f2ccSIan Rogers 		/* 9 */
22655ea8f2ccSIan Rogers 	},
22665ea8f2ccSIan Rogers 	{
22675ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S",
22685ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22695ea8f2ccSIan Rogers 		.check = test__leader_sample1,
22705ea8f2ccSIan Rogers 		/* 0 */
22715ea8f2ccSIan Rogers 	},
22725ea8f2ccSIan Rogers 	{
22735ea8f2ccSIan Rogers 		.name  = "{cpu/instructions/,cpu/branch-misses/}:Su",
22745ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22755ea8f2ccSIan Rogers 		.check = test__leader_sample2,
22765ea8f2ccSIan Rogers 		/* 1 */
22775ea8f2ccSIan Rogers 	},
22785ea8f2ccSIan Rogers 	{
22795ea8f2ccSIan Rogers 		.name  = "cpu/instructions/uDp",
22805ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22815ea8f2ccSIan Rogers 		.check = test__checkevent_pinned_modifier,
22825ea8f2ccSIan Rogers 		/* 2 */
22835ea8f2ccSIan Rogers 	},
22845ea8f2ccSIan Rogers 	{
22855ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D",
22865ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22875ea8f2ccSIan Rogers 		.check = test__pinned_group,
22885ea8f2ccSIan Rogers 		/* 3 */
22895ea8f2ccSIan Rogers 	},
22905ea8f2ccSIan Rogers 	{
22915ea8f2ccSIan Rogers 		.name  = "cpu/instructions/I",
22925ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22935ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_idle_modifier,
22945ea8f2ccSIan Rogers 		/* 4 */
22955ea8f2ccSIan Rogers 	},
22965ea8f2ccSIan Rogers 	{
22975ea8f2ccSIan Rogers 		.name  = "cpu/instructions/kIG",
22985ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22995ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_idle_modifier_1,
23005ea8f2ccSIan Rogers 		/* 5 */
23015ea8f2ccSIan Rogers 	},
23025ea8f2ccSIan Rogers 	{
23035ea8f2ccSIan Rogers 		.name  = "cpu/cycles/u",
23045ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
23055ea8f2ccSIan Rogers 		.check = test__sym_event_slash,
23065ea8f2ccSIan Rogers 		/* 6 */
23075ea8f2ccSIan Rogers 	},
23085ea8f2ccSIan Rogers 	{
23095ea8f2ccSIan Rogers 		.name  = "cpu/cycles/k",
23105ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
23115ea8f2ccSIan Rogers 		.check = test__sym_event_dc,
23125ea8f2ccSIan Rogers 		/* 7 */
23135ea8f2ccSIan Rogers 	},
23145ea8f2ccSIan Rogers 	{
23155ea8f2ccSIan Rogers 		.name  = "cpu/instructions/uep",
23165ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
23175ea8f2ccSIan Rogers 		.check = test__checkevent_exclusive_modifier,
23185ea8f2ccSIan Rogers 		/* 8 */
23195ea8f2ccSIan Rogers 	},
23205ea8f2ccSIan Rogers 	{
23215ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e",
23225ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
23235ea8f2ccSIan Rogers 		.check = test__exclusive_group,
23245ea8f2ccSIan Rogers 		/* 9 */
23255ea8f2ccSIan Rogers 	},
2326e831f3ccSIan Rogers 	{
2327e831f3ccSIan Rogers 		.name  = "cpu/cycles,name=name/",
2328e831f3ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2329e831f3ccSIan Rogers 		.check = test__term_equal_term,
2330e831f3ccSIan Rogers 		/* 0 */
2331e831f3ccSIan Rogers 	},
23322aadca4bSIan Rogers 	{
23332aadca4bSIan Rogers 		.name  = "cpu/cycles,name=l1d/",
23342aadca4bSIan Rogers 		.valid = test__pmu_cpu_valid,
23352aadca4bSIan Rogers 		.check = test__term_equal_legacy,
23362aadca4bSIan Rogers 		/* 1 */
23372aadca4bSIan Rogers 	},
2338945aea22SJiri Olsa };
2339945aea22SJiri Olsa 
234023b6339bSArnaldo Carvalho de Melo struct terms_test {
2341945aea22SJiri Olsa 	const char *str;
2342945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
2343945aea22SJiri Olsa };
2344945aea22SJiri Olsa 
2345b58eca40SIan Rogers static const struct terms_test test__terms[] = {
2346945aea22SJiri Olsa 	[0] = {
2347204e7c49SRob Herring 		.str   = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead",
2348945aea22SJiri Olsa 		.check = test__checkterms_simple,
2349945aea22SJiri Olsa 	},
2350945aea22SJiri Olsa };
2351945aea22SJiri Olsa 
23528252e791SIan Rogers static int test_event(const struct evlist_test *e)
2353945aea22SJiri Olsa {
2354a910e466SIan Rogers 	struct parse_events_error err;
235563503dbaSJiri Olsa 	struct evlist *evlist;
2356945aea22SJiri Olsa 	int ret;
2357945aea22SJiri Olsa 
235816ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
23597741e03eSIan Rogers 		pr_debug("... SKIP\n");
23607741e03eSIan Rogers 		return TEST_OK;
236116ddcfbfSJiri Olsa 	}
236216ddcfbfSJiri Olsa 
23630f98b11cSJiri Olsa 	evlist = evlist__new();
23647741e03eSIan Rogers 	if (evlist == NULL) {
23657741e03eSIan Rogers 		pr_err("Failed allocation");
23667741e03eSIan Rogers 		return TEST_FAIL;
23677741e03eSIan Rogers 	}
236807eafd4eSIan Rogers 	parse_events_error__init(&err);
2369933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
2370945aea22SJiri Olsa 	if (ret) {
2371933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2372933ccf20SJiri Olsa 			 e->name, ret, err.str);
23736c191289SIan Rogers 		parse_events_error__print(&err, e->name);
23747741e03eSIan Rogers 		ret = TEST_FAIL;
2375aefde50aSIan Rogers 		if (err.str && strstr(err.str, "can't access trace events"))
23767741e03eSIan Rogers 			ret = TEST_SKIP;
23772d4352c0SArnaldo Carvalho de Melo 	} else {
23782d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
2379945aea22SJiri Olsa 	}
238007eafd4eSIan Rogers 	parse_events_error__exit(&err);
2381c12995a5SJiri Olsa 	evlist__delete(evlist);
2382945aea22SJiri Olsa 
2383945aea22SJiri Olsa 	return ret;
2384945aea22SJiri Olsa }
2385945aea22SJiri Olsa 
2386b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
2387b4a7276cSJohn Garry {
2388b4a7276cSJohn Garry 	struct parse_events_error err;
2389b4a7276cSJohn Garry 	struct evlist *evlist;
2390b4a7276cSJohn Garry 	int ret;
2391b4a7276cSJohn Garry 
2392b4a7276cSJohn Garry 	evlist = evlist__new();
2393b4a7276cSJohn Garry 	if (!evlist)
2394b4a7276cSJohn Garry 		return -ENOMEM;
2395b4a7276cSJohn Garry 
2396b4a7276cSJohn Garry 	parse_events_error__init(&err);
2397411ad22eSIan Rogers 	ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err,
2398411ad22eSIan Rogers 			     &perf_pmu__fake, /*warn_if_reordered=*/true);
2399b4a7276cSJohn Garry 	if (ret) {
2400b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2401b4a7276cSJohn Garry 			 str, ret, err.str);
2402b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
2403b4a7276cSJohn Garry 	}
2404b4a7276cSJohn Garry 
2405b4a7276cSJohn Garry 	parse_events_error__exit(&err);
2406b4a7276cSJohn Garry 	evlist__delete(evlist);
2407b4a7276cSJohn Garry 
2408b4a7276cSJohn Garry 	return ret;
2409b4a7276cSJohn Garry }
2410b4a7276cSJohn Garry 
24117741e03eSIan Rogers static int combine_test_results(int existing, int latest)
24127741e03eSIan Rogers {
24137741e03eSIan Rogers 	if (existing == TEST_FAIL)
24147741e03eSIan Rogers 		return TEST_FAIL;
24157741e03eSIan Rogers 	if (existing == TEST_SKIP)
24167741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
24177741e03eSIan Rogers 	return latest;
24187741e03eSIan Rogers }
24197741e03eSIan Rogers 
24208252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
2421945aea22SJiri Olsa {
24227741e03eSIan Rogers 	int ret = TEST_OK;
2423945aea22SJiri Olsa 
24248252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
24258252e791SIan Rogers 		const struct evlist_test *e = &events[i];
24267741e03eSIan Rogers 		int test_ret;
2427945aea22SJiri Olsa 
24287741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
24297741e03eSIan Rogers 		test_ret = test_event(e);
24307741e03eSIan Rogers 		if (test_ret != TEST_OK) {
24317741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
24327741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
24337741e03eSIan Rogers 		}
2434945aea22SJiri Olsa 	}
2435945aea22SJiri Olsa 
24367741e03eSIan Rogers 	return ret;
24377741e03eSIan Rogers }
24387741e03eSIan Rogers 
24397741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
24407741e03eSIan Rogers {
24417741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2442945aea22SJiri Olsa }
2443945aea22SJiri Olsa 
2444b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2445945aea22SJiri Olsa {
2446c549aca5SDavid Ahern 	struct list_head terms;
2447945aea22SJiri Olsa 	int ret;
2448945aea22SJiri Olsa 
2449c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2450945aea22SJiri Olsa 
2451c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2452945aea22SJiri Olsa 	if (ret) {
2453945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2454945aea22SJiri Olsa 			 t->str , ret);
2455945aea22SJiri Olsa 		return ret;
2456945aea22SJiri Olsa 	}
2457945aea22SJiri Olsa 
2458c549aca5SDavid Ahern 	ret = t->check(&terms);
2459682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2460945aea22SJiri Olsa 
2461945aea22SJiri Olsa 	return ret;
2462945aea22SJiri Olsa }
2463945aea22SJiri Olsa 
2464b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2465945aea22SJiri Olsa {
2466945aea22SJiri Olsa 	int ret = 0;
2467945aea22SJiri Olsa 
2468b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2469b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2470945aea22SJiri Olsa 
2471945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2472945aea22SJiri Olsa 		ret = test_term(t);
2473945aea22SJiri Olsa 		if (ret)
2474945aea22SJiri Olsa 			break;
2475945aea22SJiri Olsa 	}
2476945aea22SJiri Olsa 
2477945aea22SJiri Olsa 	return ret;
2478945aea22SJiri Olsa }
2479945aea22SJiri Olsa 
24807741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
24817741e03eSIan Rogers {
24827741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
24837741e03eSIan Rogers }
24847741e03eSIan Rogers 
24857741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2486945aea22SJiri Olsa {
2487f24ebe80SIan Rogers 	struct perf_pmu *pmu = NULL;
24885a52817eSIan Rogers 	int ret = TEST_OK;
24895a52817eSIan Rogers 
24901eaf496eSIan Rogers 	while ((pmu = perf_pmus__scan(pmu)) != NULL) {
2491945aea22SJiri Olsa 		struct stat st;
2492945aea22SJiri Olsa 		char path[PATH_MAX];
2493945aea22SJiri Olsa 		struct dirent *ent;
2494945aea22SJiri Olsa 		DIR *dir;
24955a52817eSIan Rogers 		int err;
2496945aea22SJiri Olsa 
24975a52817eSIan Rogers 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/",
24985a52817eSIan Rogers 			sysfs__mountpoint(), pmu->name);
24997741e03eSIan Rogers 
25005a52817eSIan Rogers 		err = stat(path, &st);
25015a52817eSIan Rogers 		if (err) {
25025a52817eSIan Rogers 			pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path);
25035a52817eSIan Rogers 			continue;
2504945aea22SJiri Olsa 		}
2505945aea22SJiri Olsa 
2506945aea22SJiri Olsa 		dir = opendir(path);
2507945aea22SJiri Olsa 		if (!dir) {
25087741e03eSIan Rogers 			pr_debug("can't open pmu event dir: %s\n", path);
25095a52817eSIan Rogers 			ret = combine_test_results(ret, TEST_SKIP);
25105a52817eSIan Rogers 			continue;
2511945aea22SJiri Olsa 		}
2512945aea22SJiri Olsa 
25137741e03eSIan Rogers 		while ((ent = readdir(dir))) {
25148252e791SIan Rogers 			struct evlist_test e = { .name = NULL, };
25152e2bbc03SArnaldo Carvalho de Melo 			char name[2 * NAME_MAX + 1 + 12 + 3];
25167741e03eSIan Rogers 			int test_ret;
2517945aea22SJiri Olsa 
251817a2634bSAndi Kleen 			/* Names containing . are special and cannot be used directly */
251917a2634bSAndi Kleen 			if (strchr(ent->d_name, '.'))
2520945aea22SJiri Olsa 				continue;
2521945aea22SJiri Olsa 
25225a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name);
2523945aea22SJiri Olsa 
2524945aea22SJiri Olsa 			e.name  = name;
2525945aea22SJiri Olsa 			e.check = test__checkevent_pmu_events;
2526945aea22SJiri Olsa 
25277741e03eSIan Rogers 			test_ret = test_event(&e);
25287741e03eSIan Rogers 			if (test_ret != TEST_OK) {
25297741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
25307741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
25317741e03eSIan Rogers 			}
25325a52817eSIan Rogers 
25335a52817eSIan Rogers 			if (!is_pmu_core(pmu->name))
25345a52817eSIan Rogers 				continue;
25355a52817eSIan Rogers 
2536146edff3SIan Rogers 			/*
2537146edff3SIan Rogers 			 * Names containing '-' are recognized as prefixes and suffixes
2538146edff3SIan Rogers 			 * due to '-' being a legacy PMU separator. This fails when the
2539146edff3SIan Rogers 			 * prefix or suffix collides with an existing legacy token. For
2540146edff3SIan Rogers 			 * example, branch-brs has a prefix (branch) that collides with
2541146edff3SIan Rogers 			 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2542146edff3SIan Rogers 			 * isn't expected after this. As event names in the config
2543146edff3SIan Rogers 			 * slashes are allowed a '-' in the name we check this works
2544146edff3SIan Rogers 			 * above.
2545146edff3SIan Rogers 			 */
2546146edff3SIan Rogers 			if (strchr(ent->d_name, '-'))
2547146edff3SIan Rogers 				continue;
2548146edff3SIan Rogers 
25495a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s:u,%s/event=%s/u",
25505a52817eSIan Rogers 				 ent->d_name, pmu->name, ent->d_name);
2551ffe59788SKan Liang 			e.name  = name;
2552ffe59788SKan Liang 			e.check = test__checkevent_pmu_events_mix;
25537741e03eSIan Rogers 			test_ret = test_event(&e);
25547741e03eSIan Rogers 			if (test_ret != TEST_OK) {
25557741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
25567741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
25577741e03eSIan Rogers 			}
2558945aea22SJiri Olsa 		}
2559945aea22SJiri Olsa 
2560945aea22SJiri Olsa 		closedir(dir);
25615a52817eSIan Rogers 	}
2562945aea22SJiri Olsa 	return ret;
2563945aea22SJiri Olsa }
2564945aea22SJiri Olsa 
25657741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
25667741e03eSIan Rogers {
25677741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
25687741e03eSIan Rogers }
25697741e03eSIan Rogers 
2570c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2571c7a3828dSJin Yao {
2572c7a3828dSJin Yao 	char path[PATH_MAX];
2573c7a3828dSJin Yao 	DIR *dir;
2574c7a3828dSJin Yao 	struct dirent *dent;
2575c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2576c7a3828dSJin Yao 	char buf[128];
2577c7a3828dSJin Yao 	FILE *file;
2578c7a3828dSJin Yao 
2579c7a3828dSJin Yao 	if (!sysfs)
2580c7a3828dSJin Yao 		return false;
2581c7a3828dSJin Yao 
2582c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2583c7a3828dSJin Yao 	dir = opendir(path);
2584c7a3828dSJin Yao 	if (!dir)
2585c7a3828dSJin Yao 		return false;
2586c7a3828dSJin Yao 
2587c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2588c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2589c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2590c7a3828dSJin Yao 			continue;
2591c7a3828dSJin Yao 
2592c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2593c7a3828dSJin Yao 			 sysfs, dent->d_name);
2594c7a3828dSJin Yao 
2595c7a3828dSJin Yao 		if (!file_available(path))
2596c7a3828dSJin Yao 			continue;
2597c7a3828dSJin Yao 
2598c7a3828dSJin Yao 		file = fopen(path, "r");
2599c7a3828dSJin Yao 		if (!file)
2600c7a3828dSJin Yao 			continue;
2601c7a3828dSJin Yao 
2602c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2603c7a3828dSJin Yao 			fclose(file);
2604c7a3828dSJin Yao 			continue;
2605c7a3828dSJin Yao 		}
2606c7a3828dSJin Yao 
2607c7a3828dSJin Yao 		/* Remove the last '\n' */
2608c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2609c7a3828dSJin Yao 
2610c7a3828dSJin Yao 		fclose(file);
2611c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2612c7a3828dSJin Yao 		*alias = strdup(buf);
2613c7a3828dSJin Yao 		closedir(dir);
2614c7a3828dSJin Yao 
2615c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2616c7a3828dSJin Yao 			free(*event);
2617c7a3828dSJin Yao 			free(*alias);
2618c7a3828dSJin Yao 			return false;
2619c7a3828dSJin Yao 		}
2620c7a3828dSJin Yao 
2621c7a3828dSJin Yao 		return true;
2622c7a3828dSJin Yao 	}
2623c7a3828dSJin Yao 
2624c7a3828dSJin Yao 	closedir(dir);
2625c7a3828dSJin Yao 	return false;
2626c7a3828dSJin Yao }
2627c7a3828dSJin Yao 
2628c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2629c7a3828dSJin Yao {
2630c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2631c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2632c7a3828dSJin Yao 
2633c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2634c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
26357741e03eSIan Rogers 	return TEST_OK;
2636c7a3828dSJin Yao }
2637c7a3828dSJin Yao 
26387741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2639c7a3828dSJin Yao {
26408252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2641c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2642c7a3828dSJin Yao 
2643c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2644c7a3828dSJin Yao 		 event, alias);
2645c7a3828dSJin Yao 
2646c7a3828dSJin Yao 	e.name  = name;
2647c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2648c7a3828dSJin Yao 	return test_event(&e);
2649c7a3828dSJin Yao }
2650c7a3828dSJin Yao 
26517741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
26527741e03eSIan Rogers {
26537741e03eSIan Rogers 	char *event, *alias;
26547741e03eSIan Rogers 	int ret;
26557741e03eSIan Rogers 
26567741e03eSIan Rogers 	if (!test_alias(&event, &alias))
26577741e03eSIan Rogers 		return TEST_SKIP;
26587741e03eSIan Rogers 
26597741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
26607741e03eSIan Rogers 
26617741e03eSIan Rogers 	free(event);
26627741e03eSIan Rogers 	free(alias);
26637741e03eSIan Rogers 	return ret;
26647741e03eSIan Rogers }
26657741e03eSIan Rogers 
26667741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
26677741e03eSIan Rogers 				   int subtest __maybe_unused)
2668b4a7276cSJohn Garry {
2669b4a7276cSJohn Garry 	static const char events[][30] = {
2670b4a7276cSJohn Garry 			"event-hyphen",
2671b4a7276cSJohn Garry 			"event-two-hyph",
2672b4a7276cSJohn Garry 	};
26737741e03eSIan Rogers 	int ret = TEST_OK;
2674b4a7276cSJohn Garry 
26757741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
26767741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
26777741e03eSIan Rogers 
26787741e03eSIan Rogers 		if (test_ret != TEST_OK) {
26797741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
26807741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2681b4a7276cSJohn Garry 		}
2682b4a7276cSJohn Garry 	}
2683b4a7276cSJohn Garry 
2684b4a7276cSJohn Garry 	return ret;
2685b4a7276cSJohn Garry }
2686b4a7276cSJohn Garry 
26877741e03eSIan Rogers static struct test_case tests__parse_events[] = {
26887741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
26897741e03eSIan Rogers 			 events2,
26907741e03eSIan Rogers 			 "permissions"),
26917741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
26927741e03eSIan Rogers 			 pmu_events,
26937741e03eSIan Rogers 			 "permissions"),
26947741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
26957741e03eSIan Rogers 			 pmu_events2,
26967741e03eSIan Rogers 			 "permissions"),
26977741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
26987741e03eSIan Rogers 			 "no aliases in sysfs"),
26997741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
27007741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
27017741e03eSIan Rogers 	{	.name = NULL, }
27027741e03eSIan Rogers };
2703945aea22SJiri Olsa 
27047741e03eSIan Rogers struct test_suite suite__parse_events = {
27057741e03eSIan Rogers 	.desc = "Parse event definition strings",
27067741e03eSIan Rogers 	.test_cases = tests__parse_events,
27077741e03eSIan Rogers };
2708