xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision f0617f526cb0c482dd46ed798db28d3991f6f872)
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) {
111f24ebe80SIan Rogers 		struct perf_pmu *pmu = NULL;
112aefde50aSIan Rogers 		bool type_matched = false;
113aefde50aSIan Rogers 
114aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 0x1a));
1151eaf496eSIan Rogers 		while ((pmu = perf_pmus__scan(pmu)) != NULL) {
116aefde50aSIan Rogers 			if (pmu->type == evsel->attr.type) {
117aefde50aSIan Rogers 				TEST_ASSERT_VAL("PMU type expected once", !type_matched);
118aefde50aSIan Rogers 				type_matched = true;
119aefde50aSIan Rogers 				if (pmu->type == PERF_TYPE_RAW)
120aefde50aSIan Rogers 					raw_type_match = true;
121aefde50aSIan Rogers 			}
122aefde50aSIan Rogers 		}
123aefde50aSIan Rogers 		TEST_ASSERT_VAL("No PMU found for type", type_matched);
124aefde50aSIan Rogers 	}
125aefde50aSIan Rogers 	TEST_ASSERT_VAL("Raw PMU not matched", raw_type_match);
1267741e03eSIan Rogers 	return TEST_OK;
127945aea22SJiri Olsa }
128945aea22SJiri Olsa 
12963503dbaSJiri Olsa static int test__checkevent_numeric(struct evlist *evlist)
130945aea22SJiri Olsa {
131515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
132945aea22SJiri Olsa 
1336484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
1359854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
1367741e03eSIan Rogers 	return TEST_OK;
137945aea22SJiri Olsa }
138945aea22SJiri Olsa 
13963503dbaSJiri Olsa static int test__checkevent_symbolic_name(struct evlist *evlist)
140945aea22SJiri Olsa {
141aefde50aSIan Rogers 	struct perf_evsel *evsel;
142945aea22SJiri Olsa 
143aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
144aefde50aSIan Rogers 
145aefde50aSIan Rogers 	perf_evlist__for_each_evsel(&evlist->core, evsel) {
146aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
147aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config",
148aefde50aSIan Rogers 				test_perf_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
149aefde50aSIan Rogers 	}
1507741e03eSIan Rogers 	return TEST_OK;
151945aea22SJiri Olsa }
152945aea22SJiri Olsa 
15363503dbaSJiri Olsa static int test__checkevent_symbolic_name_config(struct evlist *evlist)
154945aea22SJiri Olsa {
155aefde50aSIan Rogers 	struct perf_evsel *evsel;
156945aea22SJiri Olsa 
157aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
158aefde50aSIan Rogers 
159aefde50aSIan Rogers 	perf_evlist__for_each_evsel(&evlist->core, evsel) {
160aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
161aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
162ee4c7588SJiri Olsa 		/*
16378e1bc25SArnaldo Carvalho de Melo 		 * The period value gets configured within evlist__config,
164ee4c7588SJiri Olsa 		 * while this test executes only parse events method.
165ee4c7588SJiri Olsa 		 */
166aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period);
167aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1);
168aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config2", 1 == evsel->attr.config2);
169aefde50aSIan Rogers 	}
1707741e03eSIan Rogers 	return TEST_OK;
171945aea22SJiri Olsa }
172945aea22SJiri Olsa 
17363503dbaSJiri Olsa static int test__checkevent_symbolic_alias(struct evlist *evlist)
174945aea22SJiri Olsa {
175515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
176945aea22SJiri Olsa 
1776484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
1781fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
1799854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS));
1807741e03eSIan Rogers 	return TEST_OK;
181945aea22SJiri Olsa }
182945aea22SJiri Olsa 
18363503dbaSJiri Olsa static int test__checkevent_genhw(struct evlist *evlist)
184945aea22SJiri Olsa {
185aefde50aSIan Rogers 	struct perf_evsel *evsel;
186945aea22SJiri Olsa 
187aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 0 != evlist->core.nr_entries);
188aefde50aSIan Rogers 
189aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
190aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type);
191aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_perf_config(evsel, 1 << 16));
192aefde50aSIan Rogers 	}
1937741e03eSIan Rogers 	return TEST_OK;
194945aea22SJiri Olsa }
195945aea22SJiri Olsa 
19663503dbaSJiri Olsa static int test__checkevent_breakpoint(struct evlist *evlist)
197945aea22SJiri Olsa {
198515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
199945aea22SJiri Olsa 
2006484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
2011fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2029854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
203945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
2041fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
205945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
2061fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
2077741e03eSIan Rogers 	return TEST_OK;
208945aea22SJiri Olsa }
209945aea22SJiri Olsa 
21063503dbaSJiri Olsa static int test__checkevent_breakpoint_x(struct evlist *evlist)
211945aea22SJiri Olsa {
212515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
213945aea22SJiri Olsa 
2146484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
2151fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2169854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
217945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2181fc632ceSJiri Olsa 			HW_BREAKPOINT_X == evsel->core.attr.bp_type);
2191fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->core.attr.bp_len);
2207741e03eSIan Rogers 	return TEST_OK;
221945aea22SJiri Olsa }
222945aea22SJiri Olsa 
22363503dbaSJiri Olsa static int test__checkevent_breakpoint_r(struct evlist *evlist)
224945aea22SJiri Olsa {
225515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
226945aea22SJiri Olsa 
2276484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
228945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2291fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2309854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
231945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2321fc632ceSJiri Olsa 			HW_BREAKPOINT_R == evsel->core.attr.bp_type);
233945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2341fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2357741e03eSIan Rogers 	return TEST_OK;
236945aea22SJiri Olsa }
237945aea22SJiri Olsa 
23863503dbaSJiri Olsa static int test__checkevent_breakpoint_w(struct evlist *evlist)
239945aea22SJiri Olsa {
240515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
241945aea22SJiri Olsa 
2426484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
243945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2441fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2459854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
246945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2471fc632ceSJiri Olsa 			HW_BREAKPOINT_W == evsel->core.attr.bp_type);
248945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2491fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2507741e03eSIan Rogers 	return TEST_OK;
251945aea22SJiri Olsa }
252945aea22SJiri Olsa 
25363503dbaSJiri Olsa static int test__checkevent_breakpoint_rw(struct evlist *evlist)
254945aea22SJiri Olsa {
255515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
256945aea22SJiri Olsa 
2576484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
258945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
2591fc632ceSJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
2609854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
261945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
2621fc632ceSJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->core.attr.bp_type);
263945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
2641fc632ceSJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->core.attr.bp_len);
2657741e03eSIan Rogers 	return TEST_OK;
266945aea22SJiri Olsa }
267945aea22SJiri Olsa 
268378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
26963503dbaSJiri Olsa static int test__checkevent_tracepoint_modifier(struct evlist *evlist)
270945aea22SJiri Olsa {
271515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
272945aea22SJiri Olsa 
2731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
2741fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
2751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
2761fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
277945aea22SJiri Olsa 
278945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
279945aea22SJiri Olsa }
280945aea22SJiri Olsa 
281945aea22SJiri Olsa static int
28263503dbaSJiri Olsa test__checkevent_tracepoint_multi_modifier(struct evlist *evlist)
283945aea22SJiri Olsa {
284aefde50aSIan Rogers 	struct perf_evsel *evsel;
285945aea22SJiri Olsa 
2866484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1);
287945aea22SJiri Olsa 
288aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
289aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
290aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
291aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
292aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
293945aea22SJiri Olsa 	}
294945aea22SJiri Olsa 
295945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
296945aea22SJiri Olsa }
297378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEEVENT */
298945aea22SJiri Olsa 
29963503dbaSJiri Olsa static int test__checkevent_raw_modifier(struct evlist *evlist)
300945aea22SJiri Olsa {
301aefde50aSIan Rogers 	struct perf_evsel *evsel;
302945aea22SJiri Olsa 
303aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
304aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
305aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
306aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
307aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
308aefde50aSIan Rogers 	}
309945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
310945aea22SJiri Olsa }
311945aea22SJiri Olsa 
31263503dbaSJiri Olsa static int test__checkevent_numeric_modifier(struct evlist *evlist)
313945aea22SJiri Olsa {
314aefde50aSIan Rogers 	struct perf_evsel *evsel;
315945aea22SJiri Olsa 
316aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
317aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
318aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
319aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
320aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
321aefde50aSIan Rogers 	}
322945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
323945aea22SJiri Olsa }
324945aea22SJiri Olsa 
32563503dbaSJiri Olsa static int test__checkevent_symbolic_name_modifier(struct evlist *evlist)
326945aea22SJiri Olsa {
32727c9fcfcSIan Rogers 	struct perf_evsel *evsel;
328945aea22SJiri Olsa 
32927c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
33027c9fcfcSIan Rogers 			evlist->core.nr_entries == perf_pmus__num_core_pmus());
331945aea22SJiri Olsa 
33227c9fcfcSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
33327c9fcfcSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
33427c9fcfcSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
33527c9fcfcSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
33627c9fcfcSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
33727c9fcfcSIan Rogers 	}
338945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
339945aea22SJiri Olsa }
340945aea22SJiri Olsa 
34163503dbaSJiri Olsa static int test__checkevent_exclude_host_modifier(struct evlist *evlist)
342945aea22SJiri Olsa {
343aefde50aSIan Rogers 	struct perf_evsel *evsel;
344945aea22SJiri Olsa 
345aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
346aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
347aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
348aefde50aSIan Rogers 	}
349945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
350945aea22SJiri Olsa }
351945aea22SJiri Olsa 
35263503dbaSJiri Olsa static int test__checkevent_exclude_guest_modifier(struct evlist *evlist)
353945aea22SJiri Olsa {
354aefde50aSIan Rogers 	struct perf_evsel *evsel;
355945aea22SJiri Olsa 
356aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
357aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
358aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
359aefde50aSIan Rogers 	}
360945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
361945aea22SJiri Olsa }
362945aea22SJiri Olsa 
36363503dbaSJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct evlist *evlist)
364945aea22SJiri Olsa {
365515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
366945aea22SJiri Olsa 
3671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
3691fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
3701fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
371945aea22SJiri Olsa 
372945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
373945aea22SJiri Olsa }
374945aea22SJiri Olsa 
37563503dbaSJiri Olsa static int test__checkevent_genhw_modifier(struct evlist *evlist)
376945aea22SJiri Olsa {
377aefde50aSIan Rogers 	struct perf_evsel *evsel;
378945aea22SJiri Olsa 
379aefde50aSIan Rogers 	perf_evlist__for_each_entry(&evlist->core, evsel) {
380aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
381aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
382aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
383aefde50aSIan Rogers 		TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
384aefde50aSIan Rogers 	}
385945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
386945aea22SJiri Olsa }
387945aea22SJiri Olsa 
38863503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier(struct evlist *evlist)
389a1e12da4SJiri Olsa {
390515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
391a1e12da4SJiri Olsa 
3921fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
3931fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
3941fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
3951fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
3961fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
3971fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
3981fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
399a1e12da4SJiri Olsa 
400a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
401a1e12da4SJiri Olsa }
402a1e12da4SJiri Olsa 
40363503dbaSJiri Olsa static int test__checkevent_exclude_idle_modifier_1(struct evlist *evlist)
404a1e12da4SJiri Olsa {
405515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
406a1e12da4SJiri Olsa 
4071fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude idle", evsel->core.attr.exclude_idle);
4081fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
4091fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
4101fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4111fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4121fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4131fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
414a1e12da4SJiri Olsa 
415a1e12da4SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
416a1e12da4SJiri Olsa }
417a1e12da4SJiri Olsa 
41863503dbaSJiri Olsa static int test__checkevent_breakpoint_modifier(struct evlist *evlist)
419945aea22SJiri Olsa {
420515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
421945aea22SJiri Olsa 
422945aea22SJiri Olsa 
4231fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4241fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4251fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4261fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
427945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4288ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:u"));
429945aea22SJiri Olsa 
430945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
431945aea22SJiri Olsa }
432945aea22SJiri Olsa 
43363503dbaSJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct evlist *evlist)
434945aea22SJiri Olsa {
435515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
436945aea22SJiri Olsa 
4371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4381fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4391fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4401fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
441945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4428ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:x:k"));
443945aea22SJiri Olsa 
444945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
445945aea22SJiri Olsa }
446945aea22SJiri Olsa 
44763503dbaSJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct evlist *evlist)
448945aea22SJiri Olsa {
449515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
450945aea22SJiri Olsa 
4511fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
4541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
455945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4568ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:r:hp"));
457945aea22SJiri Olsa 
458945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
459945aea22SJiri Olsa }
460945aea22SJiri Olsa 
46163503dbaSJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct evlist *evlist)
462945aea22SJiri Olsa {
463515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
464945aea22SJiri Olsa 
4651fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
4661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
4671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4681fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
469945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4708ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:w:up"));
471945aea22SJiri Olsa 
472945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
473945aea22SJiri Olsa }
474945aea22SJiri Olsa 
47563503dbaSJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct evlist *evlist)
476945aea22SJiri Olsa {
477515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
478945aea22SJiri Olsa 
4791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
4801fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
4811fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
4821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
483945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
4848ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "mem:0:rw:kp"));
485945aea22SJiri Olsa 
486945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
487945aea22SJiri Olsa }
488945aea22SJiri Olsa 
489*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_modifier_name(struct evlist *evlist)
490*f0617f52SAdrian Hunter {
491*f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
492*f0617f52SAdrian Hunter 
493*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
494*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
495*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
496*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
497*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
498*f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
499*f0617f52SAdrian Hunter 
500*f0617f52SAdrian Hunter 	return test__checkevent_breakpoint(evlist);
501*f0617f52SAdrian Hunter }
502*f0617f52SAdrian Hunter 
503*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_x_modifier_name(struct evlist *evlist)
504*f0617f52SAdrian Hunter {
505*f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
506*f0617f52SAdrian Hunter 
507*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
508*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
509*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
510*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
511*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
512*f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
513*f0617f52SAdrian Hunter 
514*f0617f52SAdrian Hunter 	return test__checkevent_breakpoint_x(evlist);
515*f0617f52SAdrian Hunter }
516*f0617f52SAdrian Hunter 
517*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_r_modifier_name(struct evlist *evlist)
518*f0617f52SAdrian Hunter {
519*f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
520*f0617f52SAdrian Hunter 
521*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
522*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
523*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
524*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
525*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
526*f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
527*f0617f52SAdrian Hunter 
528*f0617f52SAdrian Hunter 	return test__checkevent_breakpoint_r(evlist);
529*f0617f52SAdrian Hunter }
530*f0617f52SAdrian Hunter 
531*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_w_modifier_name(struct evlist *evlist)
532*f0617f52SAdrian Hunter {
533*f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
534*f0617f52SAdrian Hunter 
535*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
536*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
537*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
538*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
539*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
540*f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
541*f0617f52SAdrian Hunter 
542*f0617f52SAdrian Hunter 	return test__checkevent_breakpoint_w(evlist);
543*f0617f52SAdrian Hunter }
544*f0617f52SAdrian Hunter 
545*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_rw_modifier_name(struct evlist *evlist)
546*f0617f52SAdrian Hunter {
547*f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
548*f0617f52SAdrian Hunter 
549*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
550*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
551*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
552*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
553*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name",
554*f0617f52SAdrian Hunter 			!strcmp(evsel__name(evsel), "breakpoint"));
555*f0617f52SAdrian Hunter 
556*f0617f52SAdrian Hunter 	return test__checkevent_breakpoint_rw(evlist);
557*f0617f52SAdrian Hunter }
558*f0617f52SAdrian Hunter 
559*f0617f52SAdrian Hunter static int test__checkevent_breakpoint_2_events(struct evlist *evlist)
560*f0617f52SAdrian Hunter {
561*f0617f52SAdrian Hunter 	struct evsel *evsel = evlist__first(evlist);
562*f0617f52SAdrian Hunter 
563*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
564*f0617f52SAdrian Hunter 
565*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
566*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint1"));
567*f0617f52SAdrian Hunter 
568*f0617f52SAdrian Hunter 	evsel = evsel__next(evsel);
569*f0617f52SAdrian Hunter 
570*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
571*f0617f52SAdrian Hunter 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "breakpoint2"));
572*f0617f52SAdrian Hunter 
573*f0617f52SAdrian Hunter 	return TEST_OK;
574*f0617f52SAdrian Hunter }
575*f0617f52SAdrian Hunter 
57663503dbaSJiri Olsa static int test__checkevent_pmu(struct evlist *evlist)
577945aea22SJiri Olsa {
578945aea22SJiri Olsa 
579515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
580945aea22SJiri Olsa 
5816484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
5821fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
5839854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config",    test_config(evsel, 10));
5841fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->core.attr.config1);
5851fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->core.attr.config2);
586204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config3",    0 == evsel->core.attr.config3);
587ee4c7588SJiri Olsa 	/*
58878e1bc25SArnaldo Carvalho de Melo 	 * The period value gets configured within evlist__config,
589ee4c7588SJiri Olsa 	 * while this test executes only parse events method.
590ee4c7588SJiri Olsa 	 */
5911fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
592945aea22SJiri Olsa 
5937741e03eSIan Rogers 	return TEST_OK;
594945aea22SJiri Olsa }
595945aea22SJiri Olsa 
596378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
59763503dbaSJiri Olsa static int test__checkevent_list(struct evlist *evlist)
598945aea22SJiri Olsa {
599515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
600945aea22SJiri Olsa 
601aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", 3 <= evlist->core.nr_entries);
602945aea22SJiri Olsa 
603945aea22SJiri Olsa 	/* r1 */
604aefde50aSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT != evsel->core.attr.type);
605aefde50aSIan Rogers 	while (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) {
6069854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
6071fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong config1", 0 == evsel->core.attr.config1);
6081fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong config2", 0 == evsel->core.attr.config2);
609204e7c49SRob Herring 		TEST_ASSERT_VAL("wrong config3", 0 == evsel->core.attr.config3);
6101fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
6111fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
6121fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
6131fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
614aefde50aSIan Rogers 		evsel = evsel__next(evsel);
615aefde50aSIan Rogers 	}
616945aea22SJiri Olsa 
61743f322b4SRiku Voipio 	/* syscalls:sys_enter_openat:k */
6181fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type);
619945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
6201fc632ceSJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type);
6211fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
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);
626945aea22SJiri Olsa 
627945aea22SJiri Olsa 	/* 1:1:hp */
628e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6291fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->core.attr.type);
6309854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
6311fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
6321fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
6331fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
6341fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
635945aea22SJiri Olsa 
6367741e03eSIan Rogers 	return TEST_OK;
637945aea22SJiri Olsa }
638378ef0f5SIan Rogers #endif
639945aea22SJiri Olsa 
64063503dbaSJiri Olsa static int test__checkevent_pmu_name(struct evlist *evlist)
641945aea22SJiri Olsa {
642515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
643945aea22SJiri Olsa 
644945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
6456484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6461fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
6479854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
6488ab2e96dSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name", !strcmp(evsel__name(evsel), "krava"));
649945aea22SJiri Olsa 
650945aea22SJiri Olsa 	/* cpu/config=2/u" */
651e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6526484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
6549854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 2));
655945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
6568ab2e96dSArnaldo Carvalho de Melo 			!strcmp(evsel__name(evsel), "cpu/config=2/u"));
657945aea22SJiri Olsa 
6587741e03eSIan Rogers 	return TEST_OK;
659945aea22SJiri Olsa }
660945aea22SJiri Olsa 
66163503dbaSJiri Olsa static int test__checkevent_pmu_partial_time_callgraph(struct evlist *evlist)
66271ef150eSKan Liang {
663515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
66471ef150eSKan Liang 
66571ef150eSKan Liang 	/* cpu/config=1,call-graph=fp,time,period=100000/ */
6666484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries);
6671fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
6689854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 1));
66971ef150eSKan Liang 	/*
67078e1bc25SArnaldo Carvalho de Melo 	 * The period, time and callgraph value gets configured within evlist__config,
67171ef150eSKan Liang 	 * while this test executes only parse events method.
67271ef150eSKan Liang 	 */
6731fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong period",     0 == evsel->core.attr.sample_period);
67427de9b2bSArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong callgraph",  !evsel__has_callchain(evsel));
6751fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong time",  !(PERF_SAMPLE_TIME & evsel->core.attr.sample_type));
67671ef150eSKan Liang 
67771ef150eSKan Liang 	/* cpu/config=2,call-graph=no,time=0,period=2000/ */
678e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
6791fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type);
6809854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 2));
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 
6897741e03eSIan Rogers 	return TEST_OK;
69071ef150eSKan Liang }
69171ef150eSKan Liang 
69263503dbaSJiri Olsa static int test__checkevent_pmu_events(struct evlist *evlist)
693945aea22SJiri Olsa {
694515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
695945aea22SJiri Olsa 
6966484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
6975a52817eSIan Rogers 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->core.attr.type ||
6985a52817eSIan Rogers 				      strcmp(evsel->pmu_name, "cpu"));
699945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
7001fc632ceSJiri Olsa 			!evsel->core.attr.exclude_user);
701945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
7021fc632ceSJiri Olsa 			evsel->core.attr.exclude_kernel);
7031fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7041fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
7051fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
7060997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
707945aea22SJiri Olsa 
7087741e03eSIan Rogers 	return TEST_OK;
709945aea22SJiri Olsa }
710945aea22SJiri Olsa 
711ffe59788SKan Liang 
71263503dbaSJiri Olsa static int test__checkevent_pmu_events_mix(struct evlist *evlist)
713ffe59788SKan Liang {
71427c9fcfcSIan Rogers 	struct evsel *evsel = NULL;
715ffe59788SKan Liang 
71627c9fcfcSIan Rogers 	/*
71727c9fcfcSIan Rogers 	 * The wild card event will be opened at least once, but it may be
71827c9fcfcSIan Rogers 	 * opened on each core PMU.
71927c9fcfcSIan Rogers 	 */
72027c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries >= 2);
72127c9fcfcSIan Rogers 	for (int i = 0; i < evlist->core.nr_entries - 1; i++) {
72227c9fcfcSIan Rogers 		evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
723ffe59788SKan Liang 		/* pmu-event:u */
724ffe59788SKan Liang 		TEST_ASSERT_VAL("wrong exclude_user",
7251fc632ceSJiri Olsa 				!evsel->core.attr.exclude_user);
726ffe59788SKan Liang 		TEST_ASSERT_VAL("wrong exclude_kernel",
7271fc632ceSJiri Olsa 				evsel->core.attr.exclude_kernel);
7281fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
7291fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
7301fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
7310997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
73227c9fcfcSIan Rogers 	}
733ffe59788SKan Liang 	/* cpu/pmu-event/u*/
734e470daeaSArnaldo Carvalho de Melo 	evsel = evsel__next(evsel);
73527c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong type", evsel__find_pmu(evsel)->is_core);
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.pinned);
744ffe59788SKan Liang 
7457741e03eSIan Rogers 	return TEST_OK;
746ffe59788SKan Liang }
747ffe59788SKan Liang 
748945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
749945aea22SJiri Olsa {
7506cee6cd3SArnaldo Carvalho de Melo 	struct parse_events_term *term;
751945aea22SJiri Olsa 
752945aea22SJiri Olsa 	/* config=10 */
7536cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(terms->next, struct parse_events_term, list);
754945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
755945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
756945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
757945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
758945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
7594f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config"));
760945aea22SJiri Olsa 
761945aea22SJiri Olsa 	/* config1 */
7626cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
763945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
764945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
765945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
766945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
767945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
7684f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config1"));
769945aea22SJiri Olsa 
770945aea22SJiri Olsa 	/* config2=3 */
7716cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
772945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
773945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
774945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
775945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
776945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
7774f9d4f8aSJohn Garry 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config2"));
778945aea22SJiri Olsa 
779204e7c49SRob Herring 	/* config3=4 */
780204e7c49SRob Herring 	term = list_entry(term->list.next, struct parse_events_term, list);
781204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type term",
782204e7c49SRob Herring 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG3);
783204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong type val",
784204e7c49SRob Herring 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
785204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong val", term->val.num == 4);
786204e7c49SRob Herring 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "config3"));
787204e7c49SRob Herring 
788945aea22SJiri Olsa 	/* umask=1*/
7896cee6cd3SArnaldo Carvalho de Melo 	term = list_entry(term->list.next, struct parse_events_term, list);
790945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
791945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
792945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
793945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
794945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
795945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
796945aea22SJiri Olsa 
7974929e95aSJiri Olsa 	/*
7984929e95aSJiri Olsa 	 * read
7994929e95aSJiri Olsa 	 *
8004929e95aSJiri Olsa 	 * The perf_pmu__test_parse_init injects 'read' term into
8014929e95aSJiri Olsa 	 * perf_pmu_events_list, so 'read' is evaluated as read term
8024929e95aSJiri Olsa 	 * and not as raw event with 'ead' hex value.
8034929e95aSJiri Olsa 	 */
8044929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
8054929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
80670c90e4aSIan Rogers 			term->type_term == PARSE_EVENTS__TERM_TYPE_RAW);
8074929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
80870c90e4aSIan Rogers 			term->type_val == PARSE_EVENTS__TERM_TYPE_STR);
80970c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "read"));
81070c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw"));
8114929e95aSJiri Olsa 
8124929e95aSJiri Olsa 	/*
8134929e95aSJiri Olsa 	 * r0xead
8144929e95aSJiri Olsa 	 *
8154929e95aSJiri Olsa 	 * To be still able to pass 'ead' value with 'r' syntax,
8164929e95aSJiri Olsa 	 * we added support to parse 'r0xHEX' event.
8174929e95aSJiri Olsa 	 */
8184929e95aSJiri Olsa 	term = list_entry(term->list.next, struct parse_events_term, list);
8194929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
82070c90e4aSIan Rogers 			term->type_term == PARSE_EVENTS__TERM_TYPE_RAW);
8214929e95aSJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
82270c90e4aSIan Rogers 			term->type_val == PARSE_EVENTS__TERM_TYPE_STR);
82370c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong val", !strcmp(term->val.str, "r0xead"));
82470c90e4aSIan Rogers 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "raw"));
8257741e03eSIan Rogers 	return TEST_OK;
826945aea22SJiri Olsa }
827945aea22SJiri Olsa 
82863503dbaSJiri Olsa static int test__group1(struct evlist *evlist)
829945aea22SJiri Olsa {
83032dcd021SJiri Olsa 	struct evsel *evsel, *leader;
831945aea22SJiri Olsa 
83227c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
83327c9fcfcSIan Rogers 			evlist->core.nr_entries == (perf_pmus__num_core_pmus() * 2));
83427c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
83527c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
836945aea22SJiri Olsa 
83727c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
838945aea22SJiri Olsa 		/* instructions:k */
83927c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
8401fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8419854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
8421fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
8431fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8441fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
8451fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
8461fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8471fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
848c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
8495643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8502bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
851a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
852945aea22SJiri Olsa 
853945aea22SJiri Olsa 		/* cycles:upp */
854e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
8551fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
8569854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
8571fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8581fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
8591fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
860945aea22SJiri Olsa 		/* use of precise requires exclude_guest */
8611fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8621fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8631fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
864fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
8652bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
866a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
86727c9fcfcSIan Rogers 	}
8687741e03eSIan Rogers 	return TEST_OK;
869945aea22SJiri Olsa }
870945aea22SJiri Olsa 
87163503dbaSJiri Olsa static int test__group2(struct evlist *evlist)
872945aea22SJiri Olsa {
87327c9fcfcSIan Rogers 	struct evsel *evsel, *leader = NULL;
874945aea22SJiri Olsa 
87527c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
87627c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus() + 1));
87727c9fcfcSIan Rogers 	/*
87827c9fcfcSIan Rogers 	 * TODO: Currently the software event won't be grouped with the hardware
87927c9fcfcSIan Rogers 	 * event except for 1 PMU.
88027c9fcfcSIan Rogers 	 */
8819d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist));
882945aea22SJiri Olsa 
88327c9fcfcSIan Rogers 	evlist__for_each_entry(evlist, evsel) {
88427c9fcfcSIan Rogers 		if (evsel->core.attr.type == PERF_TYPE_SOFTWARE) {
885945aea22SJiri Olsa 			/* faults + :ku modifier */
88627c9fcfcSIan Rogers 			leader = evsel;
88727c9fcfcSIan Rogers 			TEST_ASSERT_VAL("wrong config",
88827c9fcfcSIan Rogers 					test_config(evsel, PERF_COUNT_SW_PAGE_FAULTS));
8891fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
8901fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
8911fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
892943b69acSJin Yao 			TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
8931fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
8941fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
895c754c382SArnaldo Carvalho de Melo 			TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
8965643b1a5SJiri Olsa 			TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
8972bb72dbbSArnaldo Carvalho de Melo 			TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
898a9f93f97SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
89927c9fcfcSIan Rogers 			continue;
90027c9fcfcSIan Rogers 		}
90127c9fcfcSIan Rogers 		if (evsel->core.attr.type == PERF_TYPE_HARDWARE &&
90227c9fcfcSIan Rogers 		    test_config(evsel, PERF_COUNT_HW_CACHE_REFERENCES)) {
903945aea22SJiri Olsa 			/* cache-references + :u modifier */
9041fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9051fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
9061fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
9071fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9081fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9091fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
91027c9fcfcSIan Rogers 			if (evsel__has_leader(evsel, leader))
9112bb72dbbSArnaldo Carvalho de Melo 				TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
912a9f93f97SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
91327c9fcfcSIan Rogers 			continue;
91427c9fcfcSIan Rogers 		}
915945aea22SJiri Olsa 		/* cycles:k */
9161fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
9179854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
9181fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
9191fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9201fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
9211fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
9221fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9231fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
924c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
925a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
92627c9fcfcSIan Rogers 	}
9277741e03eSIan Rogers 	return TEST_OK;
928945aea22SJiri Olsa }
929945aea22SJiri Olsa 
930378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
93163503dbaSJiri Olsa static int test__group3(struct evlist *evlist __maybe_unused)
932945aea22SJiri Olsa {
93327c9fcfcSIan Rogers 	struct evsel *evsel, *group1_leader = NULL, *group2_leader = NULL;
934945aea22SJiri Olsa 
93527c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
93627c9fcfcSIan Rogers 			evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus() + 2));
93727c9fcfcSIan Rogers 	/*
93827c9fcfcSIan Rogers 	 * Currently the software event won't be grouped with the hardware event
93927c9fcfcSIan Rogers 	 * except for 1 PMU. This means there are always just 2 groups
94027c9fcfcSIan Rogers 	 * regardless of the number of core PMUs.
94127c9fcfcSIan Rogers 	 */
9429d2dc632SIan Rogers 	TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist));
943945aea22SJiri Olsa 
94427c9fcfcSIan Rogers 	evlist__for_each_entry(evlist, evsel) {
94527c9fcfcSIan Rogers 		if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT) {
94643f322b4SRiku Voipio 			/* group1 syscalls:sys_enter_openat:H */
94727c9fcfcSIan Rogers 			group1_leader = evsel;
948945aea22SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_type",
94927c9fcfcSIan Rogers 					evsel->core.attr.sample_type == PERF_TP_SAMPLE_TYPE);
9501fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->core.attr.sample_period);
9511fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
9521fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
9531fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
9541fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
9551fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
9561fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
957c754c382SArnaldo Carvalho de Melo 			TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
95827c9fcfcSIan Rogers 			TEST_ASSERT_VAL("wrong group name", !strcmp(evsel->group_name, "group1"));
9595643b1a5SJiri Olsa 			TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
9602bb72dbbSArnaldo Carvalho de Melo 			TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
961a9f93f97SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
96227c9fcfcSIan Rogers 			continue;
96327c9fcfcSIan Rogers 		}
96427c9fcfcSIan Rogers 		if (evsel->core.attr.type == PERF_TYPE_HARDWARE &&
96527c9fcfcSIan Rogers 		    test_config(evsel, PERF_COUNT_HW_CPU_CYCLES)) {
96627c9fcfcSIan Rogers 			if (evsel->core.attr.exclude_user) {
967945aea22SJiri Olsa 				/* group1 cycles:kppp */
96827c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude_user",
96927c9fcfcSIan Rogers 						evsel->core.attr.exclude_user);
97027c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude_kernel",
97127c9fcfcSIan Rogers 						!evsel->core.attr.exclude_kernel);
9721fc632ceSJiri Olsa 				TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
973945aea22SJiri Olsa 				/* use of precise requires exclude_guest */
97427c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude guest",
97527c9fcfcSIan Rogers 						evsel->core.attr.exclude_guest);
97627c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude host",
97727c9fcfcSIan Rogers 						!evsel->core.attr.exclude_host);
97827c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong precise_ip",
97927c9fcfcSIan Rogers 						evsel->core.attr.precise_ip == 3);
98027c9fcfcSIan Rogers 				if (evsel__has_leader(evsel, group1_leader)) {
981945aea22SJiri Olsa 					TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
98227c9fcfcSIan Rogers 					TEST_ASSERT_VAL("wrong group_idx",
98327c9fcfcSIan Rogers 							evsel__group_idx(evsel) == 1);
98427c9fcfcSIan Rogers 				}
985a9f93f97SJiri Olsa 				TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
98627c9fcfcSIan Rogers 			} else {
987945aea22SJiri Olsa 				/* group2 cycles + G modifier */
98827c9fcfcSIan Rogers 				group2_leader = evsel;
98927c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude_kernel",
99027c9fcfcSIan Rogers 						!evsel->core.attr.exclude_kernel);
99127c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude_hv",
99227c9fcfcSIan Rogers 						!evsel->core.attr.exclude_hv);
99327c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude guest",
99427c9fcfcSIan Rogers 						!evsel->core.attr.exclude_guest);
99527c9fcfcSIan Rogers 				TEST_ASSERT_VAL("wrong exclude host",
99627c9fcfcSIan Rogers 						evsel->core.attr.exclude_host);
9971fc632ceSJiri Olsa 				TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
998c754c382SArnaldo Carvalho de Melo 				TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
99927c9fcfcSIan Rogers 				if (evsel->core.nr_members == 2) {
100027c9fcfcSIan Rogers 					TEST_ASSERT_VAL("wrong group_idx",
100127c9fcfcSIan Rogers 							evsel__group_idx(evsel) == 0);
100227c9fcfcSIan Rogers 				}
1003a9f93f97SJiri Olsa 				TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
100427c9fcfcSIan Rogers 			}
100527c9fcfcSIan Rogers 			continue;
100627c9fcfcSIan Rogers 		}
100727c9fcfcSIan Rogers 		if (evsel->core.attr.type == 1) {
1008945aea22SJiri Olsa 			/* group2 1:3 + G modifier */
10099854934bSIan Rogers 			TEST_ASSERT_VAL("wrong config", test_config(evsel, 3));
10101fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10111fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10121fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10131fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
10141fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
10151fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
101627c9fcfcSIan Rogers 			if (evsel__has_leader(evsel, group2_leader))
10172bb72dbbSArnaldo Carvalho de Melo 				TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
1018a9f93f97SJiri Olsa 			TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
101927c9fcfcSIan Rogers 			continue;
102027c9fcfcSIan Rogers 		}
1021945aea22SJiri Olsa 		/* instructions:u */
10221fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10239854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
10241fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10251fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10261fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
1027943b69acSJin Yao 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10281fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10291fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1030c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
1031a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
103227c9fcfcSIan Rogers 	}
10337741e03eSIan Rogers 	return TEST_OK;
1034945aea22SJiri Olsa }
1035378ef0f5SIan Rogers #endif
1036945aea22SJiri Olsa 
103763503dbaSJiri Olsa static int test__group4(struct evlist *evlist __maybe_unused)
1038945aea22SJiri Olsa {
103932dcd021SJiri Olsa 	struct evsel *evsel, *leader;
1040945aea22SJiri Olsa 
104127c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
104227c9fcfcSIan Rogers 			evlist->core.nr_entries == (perf_pmus__num_core_pmus() * 2));
104327c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
104427c9fcfcSIan Rogers 			perf_pmus__num_core_pmus() == evlist__nr_groups(evlist));
1045945aea22SJiri Olsa 
104627c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1047945aea22SJiri Olsa 		/* cycles:u + p */
104827c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
10491fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10509854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10511fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10521fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
10531fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
1054945aea22SJiri Olsa 		/* use of precise requires exclude_guest */
10551fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10561fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10571fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 1);
1058945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1059c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
10605643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
10612bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
1062a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
1063945aea22SJiri Olsa 
1064945aea22SJiri Olsa 		/* instructions:kp + p */
1065e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
10661fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10679854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
10681fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
10691fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10701fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
1071945aea22SJiri Olsa 		/* use of precise requires exclude_guest */
10721fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
10731fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
10741fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip == 2);
1075fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
10762bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
1077a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
107827c9fcfcSIan Rogers 	}
10797741e03eSIan Rogers 	return TEST_OK;
1080945aea22SJiri Olsa }
1081945aea22SJiri Olsa 
108263503dbaSJiri Olsa static int test__group5(struct evlist *evlist __maybe_unused)
1083945aea22SJiri Olsa {
108427c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
1085945aea22SJiri Olsa 
108627c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
108727c9fcfcSIan Rogers 			evlist->core.nr_entries == (5 * perf_pmus__num_core_pmus()));
108827c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
108927c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == (2 * perf_pmus__num_core_pmus()));
1090945aea22SJiri Olsa 
109127c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1092945aea22SJiri Olsa 		/* cycles + G */
109327c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
10941fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
10959854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
10961fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
10971fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
10981fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
10991fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11001fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11011fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1102945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1103c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11045643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11052bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
1106a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
1107945aea22SJiri Olsa 
1108945aea22SJiri Olsa 		/* instructions + G */
1109e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
11101fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11119854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
11121fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11131fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11141fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11151fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11161fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11171fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1118fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11192bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
1120a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
112127c9fcfcSIan Rogers 	}
112227c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1123945aea22SJiri Olsa 		/* cycles:G */
1124e470daeaSArnaldo Carvalho de Melo 		evsel = leader = evsel__next(evsel);
11251fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11269854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11271fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11281fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11291fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11301fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11311fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11321fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1133945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1134c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11355643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11362bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
1137a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
1138945aea22SJiri Olsa 
1139945aea22SJiri Olsa 		/* instructions:G */
1140e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
11411fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11429854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
11431fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11441fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11451fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11461fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
11471fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
11481fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1149fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
11502bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
115127c9fcfcSIan Rogers 	}
115227c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1153945aea22SJiri Olsa 		/* cycles */
1154e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
11551fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11569854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11571fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11581fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11591fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11601fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11611fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11621fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1163c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
116427c9fcfcSIan Rogers 	}
11657741e03eSIan Rogers 	return TEST_OK;
1166945aea22SJiri Olsa }
1167945aea22SJiri Olsa 
116863503dbaSJiri Olsa static int test__group_gh1(struct evlist *evlist)
11695a30a99fSJiri Olsa {
117027c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
11715a30a99fSJiri Olsa 
117227c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
117327c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
117427c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
117527c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
11765a30a99fSJiri Olsa 
117727c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
11785a30a99fSJiri Olsa 		/* cycles + :H group modifier */
117927c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
11801fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11819854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
11821fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11831fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11841fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
11851fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
11861fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
11871fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
11885a30a99fSJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1189c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
11905643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
11912bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
11925a30a99fSJiri Olsa 
11935a30a99fSJiri Olsa 		/* cache-misses:G + :H group modifier */
1194e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
11951fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
11969854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
11971fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
11981fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
11991fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12001fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
12011fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12021fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1203fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12042bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
120527c9fcfcSIan Rogers 	}
12067741e03eSIan Rogers 	return TEST_OK;
12075a30a99fSJiri Olsa }
12085a30a99fSJiri Olsa 
120963503dbaSJiri Olsa static int test__group_gh2(struct evlist *evlist)
12105a30a99fSJiri Olsa {
121127c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
12125a30a99fSJiri Olsa 
121327c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
121427c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
121527c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
121627c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
12175a30a99fSJiri Olsa 
121827c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
12195a30a99fSJiri Olsa 		/* cycles + :G group modifier */
122027c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
12211fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12229854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
12231fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12241fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12251fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12261fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
12271fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
12281fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
12295a30a99fSJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1230c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
12315643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
12322bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
12335a30a99fSJiri Olsa 
12345a30a99fSJiri Olsa 		/* cache-misses:H + :G group modifier */
1235e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
12361fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12379854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
12381fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12391fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
12401fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
12411fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
12421fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12431fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1244fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12452bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
124627c9fcfcSIan Rogers 	}
12477741e03eSIan Rogers 	return TEST_OK;
12485a30a99fSJiri Olsa }
12495a30a99fSJiri Olsa 
125063503dbaSJiri Olsa static int test__group_gh3(struct evlist *evlist)
12515a30a99fSJiri Olsa {
125227c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
12535a30a99fSJiri Olsa 
125427c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
125527c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
125627c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
125727c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
12585a30a99fSJiri Olsa 
125927c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
12605a30a99fSJiri Olsa 		/* cycles:G + :u group modifier */
126127c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
12621fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12639854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
12641fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12651fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12661fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12671fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
12681fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
12691fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
12705a30a99fSJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1271c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
12725643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
12732bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
12745a30a99fSJiri Olsa 
12755a30a99fSJiri Olsa 		/* cache-misses:H + :u group modifier */
1276e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
12771fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
12789854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
12791fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
12801fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
12811fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
12821fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
12831fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
12841fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1285fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
12862bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
128727c9fcfcSIan Rogers 	}
12887741e03eSIan Rogers 	return TEST_OK;
12895a30a99fSJiri Olsa }
12905a30a99fSJiri Olsa 
129163503dbaSJiri Olsa static int test__group_gh4(struct evlist *evlist)
12925a30a99fSJiri Olsa {
129327c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
12945a30a99fSJiri Olsa 
129527c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
129627c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
129727c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of groups",
129827c9fcfcSIan Rogers 			evlist__nr_groups(evlist) == perf_pmus__num_core_pmus());
12995a30a99fSJiri Olsa 
130027c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
13015a30a99fSJiri Olsa 		/* cycles:G + :uG group modifier */
130227c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
13031fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13049854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
13051fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13061fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13071fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13081fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
13091fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", evsel->core.attr.exclude_host);
13101fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
13115a30a99fSJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1312c754c382SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong leader", evsel__is_group_leader(evsel));
13135643b1a5SJiri Olsa 		TEST_ASSERT_VAL("wrong core.nr_members", evsel->core.nr_members == 2);
13142bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 0);
13155a30a99fSJiri Olsa 
13165a30a99fSJiri Olsa 		/* cache-misses:H + :uG group modifier */
1317e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
13181fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13199854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
13201fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13211fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13221fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13231fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", !evsel->core.attr.exclude_guest);
13241fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
13251fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1326fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
13272bb72dbbSArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("wrong group_idx", evsel__group_idx(evsel) == 1);
132827c9fcfcSIan Rogers 	}
13297741e03eSIan Rogers 	return TEST_OK;
13305a30a99fSJiri Olsa }
13315a30a99fSJiri Olsa 
133263503dbaSJiri Olsa static int test__leader_sample1(struct evlist *evlist)
1333a9f93f97SJiri Olsa {
133427c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
1335a9f93f97SJiri Olsa 
133627c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
133727c9fcfcSIan Rogers 			evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus()));
1338a9f93f97SJiri Olsa 
133927c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1340a9f93f97SJiri Olsa 		/* cycles - sampling group leader */
134127c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
13421fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13439854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
13441fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13451fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
13461fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
13471fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
13481fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
13491fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1350a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1351fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1352a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1353a9f93f97SJiri Olsa 
1354a9f93f97SJiri Olsa 		/* cache-misses - not sampling */
1355e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
13561fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13579854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
13581fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13591fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
13601fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
13611fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
13621fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
13631fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1364fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1365a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1366a9f93f97SJiri Olsa 
1367a9f93f97SJiri Olsa 		/* branch-misses - not sampling */
1368e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
13691fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13709854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
13711fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13721fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->core.attr.exclude_kernel);
13731fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", !evsel->core.attr.exclude_hv);
13741fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
13751fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
13761fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1377a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1378fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1379a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
138027c9fcfcSIan Rogers 	}
13817741e03eSIan Rogers 	return TEST_OK;
1382a9f93f97SJiri Olsa }
1383a9f93f97SJiri Olsa 
138463503dbaSJiri Olsa static int test__leader_sample2(struct evlist *evlist __maybe_unused)
1385a9f93f97SJiri Olsa {
138627c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
1387a9f93f97SJiri Olsa 
138827c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
138927c9fcfcSIan Rogers 			evlist->core.nr_entries == (2 * perf_pmus__num_core_pmus()));
1390a9f93f97SJiri Olsa 
139127c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1392a9f93f97SJiri Olsa 		/* instructions - sampling group leader */
139327c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
13941fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
13959854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_INSTRUCTIONS));
13961fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
13971fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
13981fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
13991fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
14001fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
14011fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1402a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1403fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1404a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1405a9f93f97SJiri Olsa 
1406a9f93f97SJiri Olsa 		/* branch-misses - not sampling */
1407e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
14081fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
14099854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
14101fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
14111fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14121fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
14131fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude guest", evsel->core.attr.exclude_guest);
14141fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude host", !evsel->core.attr.exclude_host);
14151fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1416a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1417fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
1418a9f93f97SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
141927c9fcfcSIan Rogers 	}
14207741e03eSIan Rogers 	return TEST_OK;
1421a9f93f97SJiri Olsa }
1422a9f93f97SJiri Olsa 
142363503dbaSJiri Olsa static int test__checkevent_pinned_modifier(struct evlist *evlist)
1424c9ee780fSMichael Ellerman {
142527c9fcfcSIan Rogers 	struct evsel *evsel = NULL;
1426c9ee780fSMichael Ellerman 
142727c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
142827c9fcfcSIan Rogers 			evlist->core.nr_entries == perf_pmus__num_core_pmus());
142927c9fcfcSIan Rogers 
143027c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
143127c9fcfcSIan Rogers 		evsel = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
14321fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
14331fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14341fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
14351fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
14361fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
143727c9fcfcSIan Rogers 	}
1438c9ee780fSMichael Ellerman 	return test__checkevent_symbolic_name(evlist);
1439c9ee780fSMichael Ellerman }
1440c9ee780fSMichael Ellerman 
144163503dbaSJiri Olsa static int test__pinned_group(struct evlist *evlist)
1442c9ee780fSMichael Ellerman {
144327c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
1444c9ee780fSMichael Ellerman 
144527c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
144627c9fcfcSIan Rogers 			evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus()));
1447c9ee780fSMichael Ellerman 
144827c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
1449c9ee780fSMichael Ellerman 		/* cycles - group leader */
145027c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
14511fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
14529854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
1453c9ee780fSMichael Ellerman 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1454fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
145527c9fcfcSIan Rogers 		/* TODO: The group modifier is not copied to the split group leader. */
145627c9fcfcSIan Rogers 		if (perf_pmus__num_core_pmus() == 1)
14571fc632ceSJiri Olsa 			TEST_ASSERT_VAL("wrong pinned", evsel->core.attr.pinned);
1458c9ee780fSMichael Ellerman 
1459c9ee780fSMichael Ellerman 		/* cache-misses - can not be pinned, but will go on with the leader */
1460e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
14611fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
14629854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
14631fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
1464c9ee780fSMichael Ellerman 
1465c9ee780fSMichael Ellerman 		/* branch-misses - ditto */
1466e470daeaSArnaldo Carvalho de Melo 		evsel = evsel__next(evsel);
14679854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
14681fc632ceSJiri Olsa 		TEST_ASSERT_VAL("wrong pinned", !evsel->core.attr.pinned);
146927c9fcfcSIan Rogers 	}
14707741e03eSIan Rogers 	return TEST_OK;
1471c9ee780fSMichael Ellerman }
1472c9ee780fSMichael Ellerman 
14730997a266SAndi Kleen static int test__checkevent_exclusive_modifier(struct evlist *evlist)
14740997a266SAndi Kleen {
14750997a266SAndi Kleen 	struct evsel *evsel = evlist__first(evlist);
14760997a266SAndi Kleen 
14770997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
14780997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
14790997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
14800997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong precise_ip", evsel->core.attr.precise_ip);
14810997a266SAndi Kleen 	TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
14820997a266SAndi Kleen 
14830997a266SAndi Kleen 	return test__checkevent_symbolic_name(evlist);
14840997a266SAndi Kleen }
14850997a266SAndi Kleen 
14860997a266SAndi Kleen static int test__exclusive_group(struct evlist *evlist)
14870997a266SAndi Kleen {
148827c9fcfcSIan Rogers 	struct evsel *evsel = NULL, *leader;
14890997a266SAndi Kleen 
149027c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
149127c9fcfcSIan Rogers 			evlist->core.nr_entries == (3 * perf_pmus__num_core_pmus()));
14920997a266SAndi Kleen 
149327c9fcfcSIan Rogers 	for (int i = 0; i < perf_pmus__num_core_pmus(); i++) {
14940997a266SAndi Kleen 		/* cycles - group leader */
149527c9fcfcSIan Rogers 		evsel = leader = (i == 0 ? evlist__first(evlist) : evsel__next(evsel));
14960997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
14979854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
14980997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1499fba7c866SJiri Olsa 		TEST_ASSERT_VAL("wrong leader", evsel__has_leader(evsel, leader));
150027c9fcfcSIan Rogers 		/* TODO: The group modifier is not copied to the split group leader. */
150127c9fcfcSIan Rogers 		if (perf_pmus__num_core_pmus() == 1)
15020997a266SAndi Kleen 			TEST_ASSERT_VAL("wrong exclusive", evsel->core.attr.exclusive);
15030997a266SAndi Kleen 
15040997a266SAndi Kleen 		/* cache-misses - can not be pinned, but will go on with the leader */
15050997a266SAndi Kleen 		evsel = evsel__next(evsel);
15060997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->core.attr.type);
15079854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CACHE_MISSES));
15080997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
15090997a266SAndi Kleen 
15100997a266SAndi Kleen 		/* branch-misses - ditto */
15110997a266SAndi Kleen 		evsel = evsel__next(evsel);
15129854934bSIan Rogers 		TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_BRANCH_MISSES));
15130997a266SAndi Kleen 		TEST_ASSERT_VAL("wrong exclusive", !evsel->core.attr.exclusive);
151427c9fcfcSIan Rogers 	}
15157741e03eSIan Rogers 	return TEST_OK;
15160997a266SAndi Kleen }
151763503dbaSJiri Olsa static int test__checkevent_breakpoint_len(struct evlist *evlist)
1518ec32398cSJacob Shin {
1519515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1520ec32398cSJacob Shin 
15216484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
15221fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
15239854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
1524ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
15251fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1526ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
15271fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1528ec32398cSJacob Shin 
15297741e03eSIan Rogers 	return TEST_OK;
1530ec32398cSJacob Shin }
1531ec32398cSJacob Shin 
153263503dbaSJiri Olsa static int test__checkevent_breakpoint_len_w(struct evlist *evlist)
1533ec32398cSJacob Shin {
1534515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1535ec32398cSJacob Shin 
15366484d2f9SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
15371fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->core.attr.type);
15389854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0));
1539ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
15401fc632ceSJiri Olsa 					 evsel->core.attr.bp_type);
1541ec32398cSJacob Shin 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
15421fc632ceSJiri Olsa 					evsel->core.attr.bp_len);
1543ec32398cSJacob Shin 
15447741e03eSIan Rogers 	return TEST_OK;
1545ec32398cSJacob Shin }
1546ec32398cSJacob Shin 
1547ec32398cSJacob Shin static int
154863503dbaSJiri Olsa test__checkevent_breakpoint_len_rw_modifier(struct evlist *evlist)
1549ec32398cSJacob Shin {
1550515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1551ec32398cSJacob Shin 
15521fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->core.attr.exclude_user);
15531fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
15541fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->core.attr.exclude_hv);
15551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->core.attr.precise_ip);
1556ec32398cSJacob Shin 
1557ec32398cSJacob Shin 	return test__checkevent_breakpoint_rw(evlist);
1558ec32398cSJacob Shin }
1559ec32398cSJacob Shin 
156063503dbaSJiri Olsa static int test__checkevent_precise_max_modifier(struct evlist *evlist)
1561ddd83c97SJiri Olsa {
1562515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1563ddd83c97SJiri Olsa 
156427c9fcfcSIan Rogers 	TEST_ASSERT_VAL("wrong number of entries",
156527c9fcfcSIan Rogers 			evlist->core.nr_entries == (1 + perf_pmus__num_core_pmus()));
15661fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
15679854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_SW_TASK_CLOCK));
15687741e03eSIan Rogers 	return TEST_OK;
1569ddd83c97SJiri Olsa }
1570ddd83c97SJiri Olsa 
157163503dbaSJiri Olsa static int test__checkevent_config_symbol(struct evlist *evlist)
157210bf358aSWang Nan {
1573515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
157410bf358aSWang Nan 
1575ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "insn"));
15767741e03eSIan Rogers 	return TEST_OK;
157710bf358aSWang Nan }
157810bf358aSWang Nan 
157963503dbaSJiri Olsa static int test__checkevent_config_raw(struct evlist *evlist)
158010bf358aSWang Nan {
1581515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
158210bf358aSWang Nan 
1583ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "rawpmu"));
15847741e03eSIan Rogers 	return TEST_OK;
158510bf358aSWang Nan }
158610bf358aSWang Nan 
158763503dbaSJiri Olsa static int test__checkevent_config_num(struct evlist *evlist)
158810bf358aSWang Nan {
1589515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
159010bf358aSWang Nan 
1591ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "numpmu"));
15927741e03eSIan Rogers 	return TEST_OK;
159310bf358aSWang Nan }
159410bf358aSWang Nan 
159563503dbaSJiri Olsa static int test__checkevent_config_cache(struct evlist *evlist)
159643d0b978SWang Nan {
1597515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
159843d0b978SWang Nan 
1599ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "cachepmu"));
16004a7c4eafSIan Rogers 	return test__checkevent_genhw(evlist);
160143d0b978SWang Nan }
160210bf358aSWang Nan 
16038f8c1068SIan Rogers static bool test__pmu_cpu_valid(void)
16048f8c1068SIan Rogers {
16051eaf496eSIan Rogers 	return !!perf_pmus__find("cpu");
16068f8c1068SIan Rogers }
16078f8c1068SIan Rogers 
160816ddcfbfSJiri Olsa static bool test__intel_pt_valid(void)
160916ddcfbfSJiri Olsa {
16101eaf496eSIan Rogers 	return !!perf_pmus__find("intel_pt");
161116ddcfbfSJiri Olsa }
161216ddcfbfSJiri Olsa 
161363503dbaSJiri Olsa static int test__intel_pt(struct evlist *evlist)
1614b3f58c8dSArnaldo Carvalho de Melo {
1615515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1616b3f58c8dSArnaldo Carvalho de Melo 
1617ce1d3bc2SArnaldo Carvalho de Melo 	TEST_ASSERT_VAL("wrong name setting", evsel__name_is(evsel, "intel_pt//u"));
16187741e03eSIan Rogers 	return TEST_OK;
1619b3f58c8dSArnaldo Carvalho de Melo }
1620b3f58c8dSArnaldo Carvalho de Melo 
162163503dbaSJiri Olsa static int test__checkevent_complex_name(struct evlist *evlist)
162206dc5bf2SAlexey Budankov {
1623515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
162406dc5bf2SAlexey Budankov 
16259854934bSIan Rogers 	TEST_ASSERT_VAL("wrong complex name parsing",
16269854934bSIan Rogers 			evsel__name_is(evsel,
16279854934bSIan Rogers 				       "COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks"));
16287741e03eSIan Rogers 	return TEST_OK;
162906dc5bf2SAlexey Budankov }
163006dc5bf2SAlexey Budankov 
16313a6c51e4SJiri Olsa static int test__checkevent_raw_pmu(struct evlist *evlist)
16323a6c51e4SJiri Olsa {
16333a6c51e4SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
16343a6c51e4SJiri Olsa 
16353a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries);
16363a6c51e4SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->core.attr.type);
16379854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, 0x1a));
16387741e03eSIan Rogers 	return TEST_OK;
16393a6c51e4SJiri Olsa }
16403a6c51e4SJiri Olsa 
164163503dbaSJiri Olsa static int test__sym_event_slash(struct evlist *evlist)
1642714a92d8SJiri Olsa {
1643515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1644714a92d8SJiri Olsa 
16451fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
16469854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
16471fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->core.attr.exclude_kernel);
16487741e03eSIan Rogers 	return TEST_OK;
1649714a92d8SJiri Olsa }
1650714a92d8SJiri Olsa 
165163503dbaSJiri Olsa static int test__sym_event_dc(struct evlist *evlist)
1652714a92d8SJiri Olsa {
1653515dbe48SJiri Olsa 	struct evsel *evsel = evlist__first(evlist);
1654714a92d8SJiri Olsa 
16551fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
16569854934bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
16571fc632ceSJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->core.attr.exclude_user);
16587741e03eSIan Rogers 	return TEST_OK;
1659714a92d8SJiri Olsa }
1660714a92d8SJiri Olsa 
1661e831f3ccSIan Rogers static int test__term_equal_term(struct evlist *evlist)
1662e831f3ccSIan Rogers {
1663e831f3ccSIan Rogers 	struct evsel *evsel = evlist__first(evlist);
1664e831f3ccSIan Rogers 
1665e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
1666e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
1667e831f3ccSIan Rogers 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "name") == 0);
1668e831f3ccSIan Rogers 	return TEST_OK;
1669e831f3ccSIan Rogers }
1670e831f3ccSIan Rogers 
16712aadca4bSIan Rogers static int test__term_equal_legacy(struct evlist *evlist)
16722aadca4bSIan Rogers {
16732aadca4bSIan Rogers 	struct evsel *evsel = evlist__first(evlist);
16742aadca4bSIan Rogers 
16752aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong type", evsel->core.attr.type == PERF_TYPE_HARDWARE);
16762aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong config", test_config(evsel, PERF_COUNT_HW_CPU_CYCLES));
16772aadca4bSIan Rogers 	TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "l1d") == 0);
16782aadca4bSIan Rogers 	return TEST_OK;
16792aadca4bSIan Rogers }
16802aadca4bSIan Rogers 
1681378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
168282ce75d9SJiri Olsa static int count_tracepoints(void)
168382ce75d9SJiri Olsa {
168482ce75d9SJiri Olsa 	struct dirent *events_ent;
168582ce75d9SJiri Olsa 	DIR *events_dir;
168682ce75d9SJiri Olsa 	int cnt = 0;
168782ce75d9SJiri Olsa 
16887014e0e3SArnaldo Carvalho de Melo 	events_dir = tracing_events__opendir();
168982ce75d9SJiri Olsa 
169082ce75d9SJiri Olsa 	TEST_ASSERT_VAL("Can't open events dir", events_dir);
169182ce75d9SJiri Olsa 
169282ce75d9SJiri Olsa 	while ((events_ent = readdir(events_dir))) {
169325a7d914SArnaldo Carvalho de Melo 		char *sys_path;
169482ce75d9SJiri Olsa 		struct dirent *sys_ent;
169582ce75d9SJiri Olsa 		DIR *sys_dir;
169682ce75d9SJiri Olsa 
169782ce75d9SJiri Olsa 		if (!strcmp(events_ent->d_name, ".")
169882ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "..")
169982ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "enable")
170082ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_event")
170182ce75d9SJiri Olsa 		    || !strcmp(events_ent->d_name, "header_page"))
170282ce75d9SJiri Olsa 			continue;
170382ce75d9SJiri Olsa 
170425a7d914SArnaldo Carvalho de Melo 		sys_path = get_events_file(events_ent->d_name);
170525a7d914SArnaldo Carvalho de Melo 		TEST_ASSERT_VAL("Can't get sys path", sys_path);
170682ce75d9SJiri Olsa 
170782ce75d9SJiri Olsa 		sys_dir = opendir(sys_path);
170882ce75d9SJiri Olsa 		TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
170982ce75d9SJiri Olsa 
171082ce75d9SJiri Olsa 		while ((sys_ent = readdir(sys_dir))) {
171182ce75d9SJiri Olsa 			if (!strcmp(sys_ent->d_name, ".")
171282ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "..")
171382ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "enable")
171482ce75d9SJiri Olsa 			    || !strcmp(sys_ent->d_name, "filter"))
171582ce75d9SJiri Olsa 				continue;
171682ce75d9SJiri Olsa 
171782ce75d9SJiri Olsa 			cnt++;
171882ce75d9SJiri Olsa 		}
171982ce75d9SJiri Olsa 
172082ce75d9SJiri Olsa 		closedir(sys_dir);
172125a7d914SArnaldo Carvalho de Melo 		put_events_file(sys_path);
172282ce75d9SJiri Olsa 	}
172382ce75d9SJiri Olsa 
172482ce75d9SJiri Olsa 	closedir(events_dir);
172582ce75d9SJiri Olsa 	return cnt;
172682ce75d9SJiri Olsa }
172782ce75d9SJiri Olsa 
172863503dbaSJiri Olsa static int test__all_tracepoints(struct evlist *evlist)
172982ce75d9SJiri Olsa {
173082ce75d9SJiri Olsa 	TEST_ASSERT_VAL("wrong events count",
17316484d2f9SJiri Olsa 			count_tracepoints() == evlist->core.nr_entries);
173282ce75d9SJiri Olsa 
173382ce75d9SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
173482ce75d9SJiri Olsa }
1735378ef0f5SIan Rogers #endif /* HAVE_LIBTRACEVENT */
173682ce75d9SJiri Olsa 
173723b6339bSArnaldo Carvalho de Melo struct evlist_test {
1738945aea22SJiri Olsa 	const char *name;
173916ddcfbfSJiri Olsa 	bool (*valid)(void);
174063503dbaSJiri Olsa 	int (*check)(struct evlist *evlist);
1741945aea22SJiri Olsa };
1742945aea22SJiri Olsa 
17438252e791SIan Rogers static const struct evlist_test test__events[] = {
1744378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1745615b8f99SAlexander Yarygin 	{
174643f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat",
1747945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
17488252e791SIan Rogers 		/* 0 */
1749945aea22SJiri Olsa 	},
1750615b8f99SAlexander Yarygin 	{
1751945aea22SJiri Olsa 		.name  = "syscalls:*",
1752945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
17538252e791SIan Rogers 		/* 1 */
1754945aea22SJiri Olsa 	},
1755378ef0f5SIan Rogers #endif
1756615b8f99SAlexander Yarygin 	{
1757945aea22SJiri Olsa 		.name  = "r1a",
1758945aea22SJiri Olsa 		.check = test__checkevent_raw,
17598252e791SIan Rogers 		/* 2 */
1760945aea22SJiri Olsa 	},
1761615b8f99SAlexander Yarygin 	{
1762945aea22SJiri Olsa 		.name  = "1:1",
1763945aea22SJiri Olsa 		.check = test__checkevent_numeric,
17648252e791SIan Rogers 		/* 3 */
1765945aea22SJiri Olsa 	},
1766615b8f99SAlexander Yarygin 	{
1767945aea22SJiri Olsa 		.name  = "instructions",
1768945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
17698252e791SIan Rogers 		/* 4 */
1770945aea22SJiri Olsa 	},
1771615b8f99SAlexander Yarygin 	{
1772945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
1773945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
17748252e791SIan Rogers 		/* 5 */
1775945aea22SJiri Olsa 	},
1776615b8f99SAlexander Yarygin 	{
1777945aea22SJiri Olsa 		.name  = "faults",
1778945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
17798252e791SIan Rogers 		/* 6 */
1780945aea22SJiri Olsa 	},
1781615b8f99SAlexander Yarygin 	{
1782945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
1783945aea22SJiri Olsa 		.check = test__checkevent_genhw,
17848252e791SIan Rogers 		/* 7 */
1785945aea22SJiri Olsa 	},
1786615b8f99SAlexander Yarygin 	{
1787945aea22SJiri Olsa 		.name  = "mem:0",
1788945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
17898252e791SIan Rogers 		/* 8 */
1790945aea22SJiri Olsa 	},
1791615b8f99SAlexander Yarygin 	{
1792945aea22SJiri Olsa 		.name  = "mem:0:x",
1793945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
17948252e791SIan Rogers 		/* 9 */
1795945aea22SJiri Olsa 	},
1796615b8f99SAlexander Yarygin 	{
1797945aea22SJiri Olsa 		.name  = "mem:0:r",
1798945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
17998252e791SIan Rogers 		/* 0 */
1800945aea22SJiri Olsa 	},
1801615b8f99SAlexander Yarygin 	{
1802945aea22SJiri Olsa 		.name  = "mem:0:w",
1803945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
18048252e791SIan Rogers 		/* 1 */
1805945aea22SJiri Olsa 	},
1806378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1807615b8f99SAlexander Yarygin 	{
180843f322b4SRiku Voipio 		.name  = "syscalls:sys_enter_openat:k",
1809945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
18108252e791SIan Rogers 		/* 2 */
1811945aea22SJiri Olsa 	},
1812615b8f99SAlexander Yarygin 	{
1813945aea22SJiri Olsa 		.name  = "syscalls:*:u",
1814945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
18158252e791SIan Rogers 		/* 3 */
1816945aea22SJiri Olsa 	},
1817378ef0f5SIan Rogers #endif
1818615b8f99SAlexander Yarygin 	{
1819945aea22SJiri Olsa 		.name  = "r1a:kp",
1820945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
18218252e791SIan Rogers 		/* 4 */
1822945aea22SJiri Olsa 	},
1823615b8f99SAlexander Yarygin 	{
1824945aea22SJiri Olsa 		.name  = "1:1:hp",
1825945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
18268252e791SIan Rogers 		/* 5 */
1827945aea22SJiri Olsa 	},
1828615b8f99SAlexander Yarygin 	{
1829945aea22SJiri Olsa 		.name  = "instructions:h",
1830945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
18318252e791SIan Rogers 		/* 6 */
1832945aea22SJiri Olsa 	},
1833615b8f99SAlexander Yarygin 	{
1834945aea22SJiri Olsa 		.name  = "faults:u",
1835945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
18368252e791SIan Rogers 		/* 7 */
1837945aea22SJiri Olsa 	},
1838615b8f99SAlexander Yarygin 	{
1839945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
1840945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
18418252e791SIan Rogers 		/* 8 */
1842945aea22SJiri Olsa 	},
1843615b8f99SAlexander Yarygin 	{
1844945aea22SJiri Olsa 		.name  = "mem:0:u",
1845945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
18468252e791SIan Rogers 		/* 9 */
1847945aea22SJiri Olsa 	},
1848615b8f99SAlexander Yarygin 	{
1849945aea22SJiri Olsa 		.name  = "mem:0:x:k",
1850945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
18518252e791SIan Rogers 		/* 0 */
1852945aea22SJiri Olsa 	},
1853615b8f99SAlexander Yarygin 	{
1854945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
1855945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
18568252e791SIan Rogers 		/* 1 */
1857945aea22SJiri Olsa 	},
1858615b8f99SAlexander Yarygin 	{
1859945aea22SJiri Olsa 		.name  = "mem:0:w:up",
1860945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
18618252e791SIan Rogers 		/* 2 */
1862945aea22SJiri Olsa 	},
1863378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1864615b8f99SAlexander Yarygin 	{
186543f322b4SRiku Voipio 		.name  = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1866945aea22SJiri Olsa 		.check = test__checkevent_list,
18678252e791SIan Rogers 		/* 3 */
1868945aea22SJiri Olsa 	},
1869378ef0f5SIan Rogers #endif
1870615b8f99SAlexander Yarygin 	{
1871945aea22SJiri Olsa 		.name  = "instructions:G",
1872945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
18738252e791SIan Rogers 		/* 4 */
1874945aea22SJiri Olsa 	},
1875615b8f99SAlexander Yarygin 	{
1876945aea22SJiri Olsa 		.name  = "instructions:H",
1877945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
18788252e791SIan Rogers 		/* 5 */
1879945aea22SJiri Olsa 	},
1880615b8f99SAlexander Yarygin 	{
1881945aea22SJiri Olsa 		.name  = "mem:0:rw",
1882945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
18838252e791SIan Rogers 		/* 6 */
1884945aea22SJiri Olsa 	},
1885615b8f99SAlexander Yarygin 	{
1886945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
1887945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
18888252e791SIan Rogers 		/* 7 */
1889945aea22SJiri Olsa 	},
1890615b8f99SAlexander Yarygin 	{
1891945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
1892945aea22SJiri Olsa 		.check = test__group1,
18938252e791SIan Rogers 		/* 8 */
1894945aea22SJiri Olsa 	},
1895615b8f99SAlexander Yarygin 	{
1896945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
1897945aea22SJiri Olsa 		.check = test__group2,
18988252e791SIan Rogers 		/* 9 */
1899945aea22SJiri Olsa 	},
1900378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1901615b8f99SAlexander Yarygin 	{
190243f322b4SRiku Voipio 		.name  = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1903945aea22SJiri Olsa 		.check = test__group3,
19048252e791SIan Rogers 		/* 0 */
1905945aea22SJiri Olsa 	},
1906378ef0f5SIan Rogers #endif
1907615b8f99SAlexander Yarygin 	{
1908945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
1909945aea22SJiri Olsa 		.check = test__group4,
19108252e791SIan Rogers 		/* 1 */
1911945aea22SJiri Olsa 	},
1912615b8f99SAlexander Yarygin 	{
1913945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1914945aea22SJiri Olsa 		.check = test__group5,
19158252e791SIan Rogers 		/* 2 */
1916945aea22SJiri Olsa 	},
1917378ef0f5SIan Rogers #ifdef HAVE_LIBTRACEEVENT
1918615b8f99SAlexander Yarygin 	{
191982ce75d9SJiri Olsa 		.name  = "*:*",
192082ce75d9SJiri Olsa 		.check = test__all_tracepoints,
19218252e791SIan Rogers 		/* 3 */
192282ce75d9SJiri Olsa 	},
1923378ef0f5SIan Rogers #endif
1924615b8f99SAlexander Yarygin 	{
19255a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:G}:H",
19265a30a99fSJiri Olsa 		.check = test__group_gh1,
19278252e791SIan Rogers 		/* 4 */
19285a30a99fSJiri Olsa 	},
1929615b8f99SAlexander Yarygin 	{
19305a30a99fSJiri Olsa 		.name  = "{cycles,cache-misses:H}:G",
19315a30a99fSJiri Olsa 		.check = test__group_gh2,
19328252e791SIan Rogers 		/* 5 */
19335a30a99fSJiri Olsa 	},
1934615b8f99SAlexander Yarygin 	{
19355a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:u",
19365a30a99fSJiri Olsa 		.check = test__group_gh3,
19378252e791SIan Rogers 		/* 6 */
19385a30a99fSJiri Olsa 	},
1939615b8f99SAlexander Yarygin 	{
19405a30a99fSJiri Olsa 		.name  = "{cycles:G,cache-misses:H}:uG",
19415a30a99fSJiri Olsa 		.check = test__group_gh4,
19428252e791SIan Rogers 		/* 7 */
19435a30a99fSJiri Olsa 	},
1944615b8f99SAlexander Yarygin 	{
1945a9f93f97SJiri Olsa 		.name  = "{cycles,cache-misses,branch-misses}:S",
1946a9f93f97SJiri Olsa 		.check = test__leader_sample1,
19478252e791SIan Rogers 		/* 8 */
1948a9f93f97SJiri Olsa 	},
1949615b8f99SAlexander Yarygin 	{
1950a9f93f97SJiri Olsa 		.name  = "{instructions,branch-misses}:Su",
1951a9f93f97SJiri Olsa 		.check = test__leader_sample2,
19528252e791SIan Rogers 		/* 9 */
1953a9f93f97SJiri Olsa 	},
1954615b8f99SAlexander Yarygin 	{
1955c9ee780fSMichael Ellerman 		.name  = "instructions:uDp",
1956c9ee780fSMichael Ellerman 		.check = test__checkevent_pinned_modifier,
19578252e791SIan Rogers 		/* 0 */
1958c9ee780fSMichael Ellerman 	},
1959615b8f99SAlexander Yarygin 	{
1960c9ee780fSMichael Ellerman 		.name  = "{cycles,cache-misses,branch-misses}:D",
1961c9ee780fSMichael Ellerman 		.check = test__pinned_group,
19628252e791SIan Rogers 		/* 1 */
1963c9ee780fSMichael Ellerman 	},
1964ec32398cSJacob Shin 	{
1965ec32398cSJacob Shin 		.name  = "mem:0/1",
1966ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len,
19678252e791SIan Rogers 		/* 2 */
1968ec32398cSJacob Shin 	},
1969ec32398cSJacob Shin 	{
1970ec32398cSJacob Shin 		.name  = "mem:0/2:w",
1971ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_w,
19728252e791SIan Rogers 		/* 3 */
1973ec32398cSJacob Shin 	},
1974ec32398cSJacob Shin 	{
1975ec32398cSJacob Shin 		.name  = "mem:0/4:rw:u",
1976ec32398cSJacob Shin 		.check = test__checkevent_breakpoint_len_rw_modifier,
19778252e791SIan Rogers 		/* 4 */
1978ec32398cSJacob Shin 	},
1979378ef0f5SIan Rogers #if defined(__s390x__) && defined(HAVE_LIBTRACEEVENT)
1980c0bc8c6dSAlexander Yarygin 	{
1981c0bc8c6dSAlexander Yarygin 		.name  = "kvm-s390:kvm_s390_create_vm",
1982c0bc8c6dSAlexander Yarygin 		.check = test__checkevent_tracepoint,
198353fe307dSThomas Richter 		.valid = kvm_s390_create_vm_valid,
19848252e791SIan Rogers 		/* 0 */
1985c0bc8c6dSAlexander Yarygin 	},
1986c0bc8c6dSAlexander Yarygin #endif
1987a1e12da4SJiri Olsa 	{
1988a1e12da4SJiri Olsa 		.name  = "instructions:I",
1989a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier,
19908252e791SIan Rogers 		/* 5 */
1991a1e12da4SJiri Olsa 	},
1992a1e12da4SJiri Olsa 	{
1993a1e12da4SJiri Olsa 		.name  = "instructions:kIG",
1994a1e12da4SJiri Olsa 		.check = test__checkevent_exclude_idle_modifier_1,
19958252e791SIan Rogers 		/* 6 */
1996a1e12da4SJiri Olsa 	},
1997ddd83c97SJiri Olsa 	{
1998ddd83c97SJiri Olsa 		.name  = "task-clock:P,cycles",
1999ddd83c97SJiri Olsa 		.check = test__checkevent_precise_max_modifier,
20008252e791SIan Rogers 		/* 7 */
2001ddd83c97SJiri Olsa 	},
200210bf358aSWang Nan 	{
200310bf358aSWang Nan 		.name  = "instructions/name=insn/",
200410bf358aSWang Nan 		.check = test__checkevent_config_symbol,
20058252e791SIan Rogers 		/* 8 */
200610bf358aSWang Nan 	},
200710bf358aSWang Nan 	{
200810bf358aSWang Nan 		.name  = "r1234/name=rawpmu/",
200910bf358aSWang Nan 		.check = test__checkevent_config_raw,
20108252e791SIan Rogers 		/* 9 */
201110bf358aSWang Nan 	},
201210bf358aSWang Nan 	{
201310bf358aSWang Nan 		.name  = "4:0x6530160/name=numpmu/",
201410bf358aSWang Nan 		.check = test__checkevent_config_num,
20158252e791SIan Rogers 		/* 0 */
201610bf358aSWang Nan 	},
201743d0b978SWang Nan 	{
201843d0b978SWang Nan 		.name  = "L1-dcache-misses/name=cachepmu/",
201943d0b978SWang Nan 		.check = test__checkevent_config_cache,
20208252e791SIan Rogers 		/* 1 */
202143d0b978SWang Nan 	},
2022b3f58c8dSArnaldo Carvalho de Melo 	{
2023b3f58c8dSArnaldo Carvalho de Melo 		.name  = "intel_pt//u",
202416ddcfbfSJiri Olsa 		.valid = test__intel_pt_valid,
2025b3f58c8dSArnaldo Carvalho de Melo 		.check = test__intel_pt,
20268252e791SIan Rogers 		/* 2 */
2027b3f58c8dSArnaldo Carvalho de Melo 	},
202806dc5bf2SAlexey Budankov 	{
202906dc5bf2SAlexey Budankov 		.name  = "cycles/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks'/Duk",
203006dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
20318252e791SIan Rogers 		/* 3 */
2032714a92d8SJiri Olsa 	},
2033714a92d8SJiri Olsa 	{
2034714a92d8SJiri Olsa 		.name  = "cycles//u",
2035714a92d8SJiri Olsa 		.check = test__sym_event_slash,
20368252e791SIan Rogers 		/* 4 */
2037714a92d8SJiri Olsa 	},
2038714a92d8SJiri Olsa 	{
2039714a92d8SJiri Olsa 		.name  = "cycles:k",
2040714a92d8SJiri Olsa 		.check = test__sym_event_dc,
20418252e791SIan Rogers 		/* 5 */
20420997a266SAndi Kleen 	},
20430997a266SAndi Kleen 	{
20440997a266SAndi Kleen 		.name  = "instructions:uep",
20450997a266SAndi Kleen 		.check = test__checkevent_exclusive_modifier,
20468252e791SIan Rogers 		/* 6 */
20470997a266SAndi Kleen 	},
20480997a266SAndi Kleen 	{
20490997a266SAndi Kleen 		.name  = "{cycles,cache-misses,branch-misses}:e",
20500997a266SAndi Kleen 		.check = test__exclusive_group,
20518252e791SIan Rogers 		/* 7 */
20520997a266SAndi Kleen 	},
2053e831f3ccSIan Rogers 	{
2054e831f3ccSIan Rogers 		.name  = "cycles/name=name/",
2055e831f3ccSIan Rogers 		.check = test__term_equal_term,
2056e831f3ccSIan Rogers 		/* 8 */
2057e831f3ccSIan Rogers 	},
20582aadca4bSIan Rogers 	{
20592aadca4bSIan Rogers 		.name  = "cycles/name=l1d/",
20602aadca4bSIan Rogers 		.check = test__term_equal_legacy,
20612aadca4bSIan Rogers 		/* 9 */
20622aadca4bSIan Rogers 	},
2063*f0617f52SAdrian Hunter 	{
2064*f0617f52SAdrian Hunter 		.name  = "mem:0/name=breakpoint/",
2065*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint,
2066*f0617f52SAdrian Hunter 		/* 0 */
2067*f0617f52SAdrian Hunter 	},
2068*f0617f52SAdrian Hunter 	{
2069*f0617f52SAdrian Hunter 		.name  = "mem:0:x/name=breakpoint/",
2070*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_x,
2071*f0617f52SAdrian Hunter 		/* 1 */
2072*f0617f52SAdrian Hunter 	},
2073*f0617f52SAdrian Hunter 	{
2074*f0617f52SAdrian Hunter 		.name  = "mem:0:r/name=breakpoint/",
2075*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_r,
2076*f0617f52SAdrian Hunter 		/* 2 */
2077*f0617f52SAdrian Hunter 	},
2078*f0617f52SAdrian Hunter 	{
2079*f0617f52SAdrian Hunter 		.name  = "mem:0:w/name=breakpoint/",
2080*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_w,
2081*f0617f52SAdrian Hunter 		/* 3 */
2082*f0617f52SAdrian Hunter 	},
2083*f0617f52SAdrian Hunter 	{
2084*f0617f52SAdrian Hunter 		.name  = "mem:0/name=breakpoint/u",
2085*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_modifier_name,
2086*f0617f52SAdrian Hunter 		/* 4 */
2087*f0617f52SAdrian Hunter 	},
2088*f0617f52SAdrian Hunter 	{
2089*f0617f52SAdrian Hunter 		.name  = "mem:0:x/name=breakpoint/k",
2090*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_x_modifier_name,
2091*f0617f52SAdrian Hunter 		/* 5 */
2092*f0617f52SAdrian Hunter 	},
2093*f0617f52SAdrian Hunter 	{
2094*f0617f52SAdrian Hunter 		.name  = "mem:0:r/name=breakpoint/hp",
2095*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_r_modifier_name,
2096*f0617f52SAdrian Hunter 		/* 6 */
2097*f0617f52SAdrian Hunter 	},
2098*f0617f52SAdrian Hunter 	{
2099*f0617f52SAdrian Hunter 		.name  = "mem:0:w/name=breakpoint/up",
2100*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_w_modifier_name,
2101*f0617f52SAdrian Hunter 		/* 7 */
2102*f0617f52SAdrian Hunter 	},
2103*f0617f52SAdrian Hunter 	{
2104*f0617f52SAdrian Hunter 		.name  = "mem:0:rw/name=breakpoint/",
2105*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_rw,
2106*f0617f52SAdrian Hunter 		/* 8 */
2107*f0617f52SAdrian Hunter 	},
2108*f0617f52SAdrian Hunter 	{
2109*f0617f52SAdrian Hunter 		.name  = "mem:0:rw/name=breakpoint/kp",
2110*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_rw_modifier_name,
2111*f0617f52SAdrian Hunter 		/* 9 */
2112*f0617f52SAdrian Hunter 	},
2113*f0617f52SAdrian Hunter 	{
2114*f0617f52SAdrian Hunter 		.name  = "mem:0/1/name=breakpoint/",
2115*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_len,
2116*f0617f52SAdrian Hunter 		/* 0 */
2117*f0617f52SAdrian Hunter 	},
2118*f0617f52SAdrian Hunter 	{
2119*f0617f52SAdrian Hunter 		.name  = "mem:0/2:w/name=breakpoint/",
2120*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_len_w,
2121*f0617f52SAdrian Hunter 		/* 1 */
2122*f0617f52SAdrian Hunter 	},
2123*f0617f52SAdrian Hunter 	{
2124*f0617f52SAdrian Hunter 		.name  = "mem:0/4:rw/name=breakpoint/u",
2125*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_len_rw_modifier,
2126*f0617f52SAdrian Hunter 		/* 2 */
2127*f0617f52SAdrian Hunter 	},
2128*f0617f52SAdrian Hunter 	{
2129*f0617f52SAdrian Hunter 		.name  = "mem:0/1/name=breakpoint1/,mem:0/4:rw/name=breakpoint2/",
2130*f0617f52SAdrian Hunter 		.check = test__checkevent_breakpoint_2_events,
2131*f0617f52SAdrian Hunter 		/* 3 */
2132*f0617f52SAdrian Hunter 	},
2133945aea22SJiri Olsa };
2134945aea22SJiri Olsa 
21358252e791SIan Rogers static const struct evlist_test test__events_pmu[] = {
2136615b8f99SAlexander Yarygin 	{
2137945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
21388f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
2139945aea22SJiri Olsa 		.check = test__checkevent_pmu,
21408252e791SIan Rogers 		/* 0 */
2141945aea22SJiri Olsa 	},
2142615b8f99SAlexander Yarygin 	{
2143945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
21448f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
2145945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
21468252e791SIan Rogers 		/* 1 */
2147945aea22SJiri Olsa 	},
214871ef150eSKan Liang 	{
214971ef150eSKan Liang 		.name  = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
21508f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
215171ef150eSKan Liang 		.check = test__checkevent_pmu_partial_time_callgraph,
21528252e791SIan Rogers 		/* 2 */
215371ef150eSKan Liang 	},
215406dc5bf2SAlexey Budankov 	{
2155a6f39cecSSandipan Das 		.name  = "cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp",
21568f8c1068SIan Rogers 		.valid = test__pmu_cpu_valid,
215706dc5bf2SAlexey Budankov 		.check = test__checkevent_complex_name,
21588252e791SIan Rogers 		/* 3 */
21593a6c51e4SJiri Olsa 	},
21603a6c51e4SJiri Olsa 	{
21613a6c51e4SJiri Olsa 		.name  = "software/r1a/",
21623a6c51e4SJiri Olsa 		.check = test__checkevent_raw_pmu,
21638252e791SIan Rogers 		/* 4 */
21643a6c51e4SJiri Olsa 	},
2165c33cdf54SJiri Olsa 	{
2166c33cdf54SJiri Olsa 		.name  = "software/r0x1a/",
2167c33cdf54SJiri Olsa 		.check = test__checkevent_raw_pmu,
21688252e791SIan Rogers 		/* 5 */
2169c33cdf54SJiri Olsa 	},
21706fd1e519SIan Rogers 	{
21716fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/",
21726fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
21736fd1e519SIan Rogers 		.check = test__checkevent_genhw,
21746fd1e519SIan Rogers 		/* 6 */
21756fd1e519SIan Rogers 	},
21766fd1e519SIan Rogers 	{
21776fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-load-miss/kp",
21786fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
21796fd1e519SIan Rogers 		.check = test__checkevent_genhw_modifier,
21806fd1e519SIan Rogers 		/* 7 */
21816fd1e519SIan Rogers 	},
21826fd1e519SIan Rogers 	{
21836fd1e519SIan Rogers 		.name  = "cpu/L1-dcache-misses,name=cachepmu/",
21846fd1e519SIan Rogers 		.valid = test__pmu_cpu_valid,
21856fd1e519SIan Rogers 		.check = test__checkevent_config_cache,
21866fd1e519SIan Rogers 		/* 8 */
21876fd1e519SIan Rogers 	},
21885ea8f2ccSIan Rogers 	{
21895ea8f2ccSIan Rogers 		.name  = "cpu/instructions/",
21905ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
21915ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name,
21925ea8f2ccSIan Rogers 		/* 9 */
21935ea8f2ccSIan Rogers 	},
21945ea8f2ccSIan Rogers 	{
21955ea8f2ccSIan Rogers 		.name  = "cpu/cycles,period=100000,config2/",
21965ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
21975ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name_config,
21985ea8f2ccSIan Rogers 		/* 0 */
21995ea8f2ccSIan Rogers 	},
22005ea8f2ccSIan Rogers 	{
22015ea8f2ccSIan Rogers 		.name  = "cpu/instructions/h",
22025ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22035ea8f2ccSIan Rogers 		.check = test__checkevent_symbolic_name_modifier,
22045ea8f2ccSIan Rogers 		/* 1 */
22055ea8f2ccSIan Rogers 	},
22065ea8f2ccSIan Rogers 	{
22075ea8f2ccSIan Rogers 		.name  = "cpu/instructions/G",
22085ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22095ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_host_modifier,
22105ea8f2ccSIan Rogers 		/* 2 */
22115ea8f2ccSIan Rogers 	},
22125ea8f2ccSIan Rogers 	{
22135ea8f2ccSIan Rogers 		.name  = "cpu/instructions/H",
22145ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22155ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_guest_modifier,
22165ea8f2ccSIan Rogers 		/* 3 */
22175ea8f2ccSIan Rogers 	},
22185ea8f2ccSIan Rogers 	{
22195ea8f2ccSIan Rogers 		.name  = "{cpu/instructions/k,cpu/cycles/upp}",
22205ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22215ea8f2ccSIan Rogers 		.check = test__group1,
22225ea8f2ccSIan Rogers 		/* 4 */
22235ea8f2ccSIan Rogers 	},
22245ea8f2ccSIan Rogers 	{
22255ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/u,cpu/instructions/kp}:p",
22265ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22275ea8f2ccSIan Rogers 		.check = test__group4,
22285ea8f2ccSIan Rogers 		/* 5 */
22295ea8f2ccSIan Rogers 	},
22305ea8f2ccSIan Rogers 	{
22315ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/G}:H",
22325ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22335ea8f2ccSIan Rogers 		.check = test__group_gh1,
22345ea8f2ccSIan Rogers 		/* 6 */
22355ea8f2ccSIan Rogers 	},
22365ea8f2ccSIan Rogers 	{
22375ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/H}:G",
22385ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22395ea8f2ccSIan Rogers 		.check = test__group_gh2,
22405ea8f2ccSIan Rogers 		/* 7 */
22415ea8f2ccSIan Rogers 	},
22425ea8f2ccSIan Rogers 	{
22435ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/G,cpu/cache-misses/H}:u",
22445ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22455ea8f2ccSIan Rogers 		.check = test__group_gh3,
22465ea8f2ccSIan Rogers 		/* 8 */
22475ea8f2ccSIan Rogers 	},
22485ea8f2ccSIan Rogers 	{
22495ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/G,cpu/cache-misses/H}:uG",
22505ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22515ea8f2ccSIan Rogers 		.check = test__group_gh4,
22525ea8f2ccSIan Rogers 		/* 9 */
22535ea8f2ccSIan Rogers 	},
22545ea8f2ccSIan Rogers 	{
22555ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:S",
22565ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22575ea8f2ccSIan Rogers 		.check = test__leader_sample1,
22585ea8f2ccSIan Rogers 		/* 0 */
22595ea8f2ccSIan Rogers 	},
22605ea8f2ccSIan Rogers 	{
22615ea8f2ccSIan Rogers 		.name  = "{cpu/instructions/,cpu/branch-misses/}:Su",
22625ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22635ea8f2ccSIan Rogers 		.check = test__leader_sample2,
22645ea8f2ccSIan Rogers 		/* 1 */
22655ea8f2ccSIan Rogers 	},
22665ea8f2ccSIan Rogers 	{
22675ea8f2ccSIan Rogers 		.name  = "cpu/instructions/uDp",
22685ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22695ea8f2ccSIan Rogers 		.check = test__checkevent_pinned_modifier,
22705ea8f2ccSIan Rogers 		/* 2 */
22715ea8f2ccSIan Rogers 	},
22725ea8f2ccSIan Rogers 	{
22735ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:D",
22745ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22755ea8f2ccSIan Rogers 		.check = test__pinned_group,
22765ea8f2ccSIan Rogers 		/* 3 */
22775ea8f2ccSIan Rogers 	},
22785ea8f2ccSIan Rogers 	{
22795ea8f2ccSIan Rogers 		.name  = "cpu/instructions/I",
22805ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22815ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_idle_modifier,
22825ea8f2ccSIan Rogers 		/* 4 */
22835ea8f2ccSIan Rogers 	},
22845ea8f2ccSIan Rogers 	{
22855ea8f2ccSIan Rogers 		.name  = "cpu/instructions/kIG",
22865ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22875ea8f2ccSIan Rogers 		.check = test__checkevent_exclude_idle_modifier_1,
22885ea8f2ccSIan Rogers 		/* 5 */
22895ea8f2ccSIan Rogers 	},
22905ea8f2ccSIan Rogers 	{
22915ea8f2ccSIan Rogers 		.name  = "cpu/cycles/u",
22925ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22935ea8f2ccSIan Rogers 		.check = test__sym_event_slash,
22945ea8f2ccSIan Rogers 		/* 6 */
22955ea8f2ccSIan Rogers 	},
22965ea8f2ccSIan Rogers 	{
22975ea8f2ccSIan Rogers 		.name  = "cpu/cycles/k",
22985ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
22995ea8f2ccSIan Rogers 		.check = test__sym_event_dc,
23005ea8f2ccSIan Rogers 		/* 7 */
23015ea8f2ccSIan Rogers 	},
23025ea8f2ccSIan Rogers 	{
23035ea8f2ccSIan Rogers 		.name  = "cpu/instructions/uep",
23045ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
23055ea8f2ccSIan Rogers 		.check = test__checkevent_exclusive_modifier,
23065ea8f2ccSIan Rogers 		/* 8 */
23075ea8f2ccSIan Rogers 	},
23085ea8f2ccSIan Rogers 	{
23095ea8f2ccSIan Rogers 		.name  = "{cpu/cycles/,cpu/cache-misses/,cpu/branch-misses/}:e",
23105ea8f2ccSIan Rogers 		.valid = test__pmu_cpu_valid,
23115ea8f2ccSIan Rogers 		.check = test__exclusive_group,
23125ea8f2ccSIan Rogers 		/* 9 */
23135ea8f2ccSIan Rogers 	},
2314e831f3ccSIan Rogers 	{
2315e831f3ccSIan Rogers 		.name  = "cpu/cycles,name=name/",
2316e831f3ccSIan Rogers 		.valid = test__pmu_cpu_valid,
2317e831f3ccSIan Rogers 		.check = test__term_equal_term,
2318e831f3ccSIan Rogers 		/* 0 */
2319e831f3ccSIan Rogers 	},
23202aadca4bSIan Rogers 	{
23212aadca4bSIan Rogers 		.name  = "cpu/cycles,name=l1d/",
23222aadca4bSIan Rogers 		.valid = test__pmu_cpu_valid,
23232aadca4bSIan Rogers 		.check = test__term_equal_legacy,
23242aadca4bSIan Rogers 		/* 1 */
23252aadca4bSIan Rogers 	},
2326945aea22SJiri Olsa };
2327945aea22SJiri Olsa 
232823b6339bSArnaldo Carvalho de Melo struct terms_test {
2329945aea22SJiri Olsa 	const char *str;
2330945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
2331945aea22SJiri Olsa };
2332945aea22SJiri Olsa 
2333b58eca40SIan Rogers static const struct terms_test test__terms[] = {
2334945aea22SJiri Olsa 	[0] = {
2335204e7c49SRob Herring 		.str   = "config=10,config1,config2=3,config3=4,umask=1,read,r0xead",
2336945aea22SJiri Olsa 		.check = test__checkterms_simple,
2337945aea22SJiri Olsa 	},
2338945aea22SJiri Olsa };
2339945aea22SJiri Olsa 
23408252e791SIan Rogers static int test_event(const struct evlist_test *e)
2341945aea22SJiri Olsa {
2342a910e466SIan Rogers 	struct parse_events_error err;
234363503dbaSJiri Olsa 	struct evlist *evlist;
2344945aea22SJiri Olsa 	int ret;
2345945aea22SJiri Olsa 
234616ddcfbfSJiri Olsa 	if (e->valid && !e->valid()) {
23477741e03eSIan Rogers 		pr_debug("... SKIP\n");
23487741e03eSIan Rogers 		return TEST_OK;
234916ddcfbfSJiri Olsa 	}
235016ddcfbfSJiri Olsa 
23510f98b11cSJiri Olsa 	evlist = evlist__new();
23527741e03eSIan Rogers 	if (evlist == NULL) {
23537741e03eSIan Rogers 		pr_err("Failed allocation");
23547741e03eSIan Rogers 		return TEST_FAIL;
23557741e03eSIan Rogers 	}
235607eafd4eSIan Rogers 	parse_events_error__init(&err);
2357933ccf20SJiri Olsa 	ret = parse_events(evlist, e->name, &err);
2358945aea22SJiri Olsa 	if (ret) {
2359933ccf20SJiri Olsa 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2360933ccf20SJiri Olsa 			 e->name, ret, err.str);
23616c191289SIan Rogers 		parse_events_error__print(&err, e->name);
23627741e03eSIan Rogers 		ret = TEST_FAIL;
2363aefde50aSIan Rogers 		if (err.str && strstr(err.str, "can't access trace events"))
23647741e03eSIan Rogers 			ret = TEST_SKIP;
23652d4352c0SArnaldo Carvalho de Melo 	} else {
23662d4352c0SArnaldo Carvalho de Melo 		ret = e->check(evlist);
2367945aea22SJiri Olsa 	}
236807eafd4eSIan Rogers 	parse_events_error__exit(&err);
2369c12995a5SJiri Olsa 	evlist__delete(evlist);
2370945aea22SJiri Olsa 
2371945aea22SJiri Olsa 	return ret;
2372945aea22SJiri Olsa }
2373945aea22SJiri Olsa 
2374b4a7276cSJohn Garry static int test_event_fake_pmu(const char *str)
2375b4a7276cSJohn Garry {
2376b4a7276cSJohn Garry 	struct parse_events_error err;
2377b4a7276cSJohn Garry 	struct evlist *evlist;
2378b4a7276cSJohn Garry 	int ret;
2379b4a7276cSJohn Garry 
2380b4a7276cSJohn Garry 	evlist = evlist__new();
2381b4a7276cSJohn Garry 	if (!evlist)
2382b4a7276cSJohn Garry 		return -ENOMEM;
2383b4a7276cSJohn Garry 
2384b4a7276cSJohn Garry 	parse_events_error__init(&err);
2385411ad22eSIan Rogers 	ret = __parse_events(evlist, str, /*pmu_filter=*/NULL, &err,
2386411ad22eSIan Rogers 			     &perf_pmu__fake, /*warn_if_reordered=*/true);
2387b4a7276cSJohn Garry 	if (ret) {
2388b4a7276cSJohn Garry 		pr_debug("failed to parse event '%s', err %d, str '%s'\n",
2389b4a7276cSJohn Garry 			 str, ret, err.str);
2390b4a7276cSJohn Garry 		parse_events_error__print(&err, str);
2391b4a7276cSJohn Garry 	}
2392b4a7276cSJohn Garry 
2393b4a7276cSJohn Garry 	parse_events_error__exit(&err);
2394b4a7276cSJohn Garry 	evlist__delete(evlist);
2395b4a7276cSJohn Garry 
2396b4a7276cSJohn Garry 	return ret;
2397b4a7276cSJohn Garry }
2398b4a7276cSJohn Garry 
23997741e03eSIan Rogers static int combine_test_results(int existing, int latest)
24007741e03eSIan Rogers {
24017741e03eSIan Rogers 	if (existing == TEST_FAIL)
24027741e03eSIan Rogers 		return TEST_FAIL;
24037741e03eSIan Rogers 	if (existing == TEST_SKIP)
24047741e03eSIan Rogers 		return latest == TEST_OK ? TEST_SKIP : latest;
24057741e03eSIan Rogers 	return latest;
24067741e03eSIan Rogers }
24077741e03eSIan Rogers 
24088252e791SIan Rogers static int test_events(const struct evlist_test *events, int cnt)
2409945aea22SJiri Olsa {
24107741e03eSIan Rogers 	int ret = TEST_OK;
2411945aea22SJiri Olsa 
24128252e791SIan Rogers 	for (int i = 0; i < cnt; i++) {
24138252e791SIan Rogers 		const struct evlist_test *e = &events[i];
24147741e03eSIan Rogers 		int test_ret;
2415945aea22SJiri Olsa 
24167741e03eSIan Rogers 		pr_debug("running test %d '%s'\n", i, e->name);
24177741e03eSIan Rogers 		test_ret = test_event(e);
24187741e03eSIan Rogers 		if (test_ret != TEST_OK) {
24197741e03eSIan Rogers 			pr_debug("Event test failure: test %d '%s'", i, e->name);
24207741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
24217741e03eSIan Rogers 		}
2422945aea22SJiri Olsa 	}
2423945aea22SJiri Olsa 
24247741e03eSIan Rogers 	return ret;
24257741e03eSIan Rogers }
24267741e03eSIan Rogers 
24277741e03eSIan Rogers static int test__events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
24287741e03eSIan Rogers {
24297741e03eSIan Rogers 	return test_events(test__events, ARRAY_SIZE(test__events));
2430945aea22SJiri Olsa }
2431945aea22SJiri Olsa 
2432b58eca40SIan Rogers static int test_term(const struct terms_test *t)
2433945aea22SJiri Olsa {
2434c549aca5SDavid Ahern 	struct list_head terms;
2435945aea22SJiri Olsa 	int ret;
2436945aea22SJiri Olsa 
2437c549aca5SDavid Ahern 	INIT_LIST_HEAD(&terms);
2438945aea22SJiri Olsa 
2439c549aca5SDavid Ahern 	ret = parse_events_terms(&terms, t->str);
2440945aea22SJiri Olsa 	if (ret) {
2441945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
2442945aea22SJiri Olsa 			 t->str , ret);
2443945aea22SJiri Olsa 		return ret;
2444945aea22SJiri Olsa 	}
2445945aea22SJiri Olsa 
2446c549aca5SDavid Ahern 	ret = t->check(&terms);
2447682dc24cSArnaldo Carvalho de Melo 	parse_events_terms__purge(&terms);
2448945aea22SJiri Olsa 
2449945aea22SJiri Olsa 	return ret;
2450945aea22SJiri Olsa }
2451945aea22SJiri Olsa 
2452b58eca40SIan Rogers static int test_terms(const struct terms_test *terms, int cnt)
2453945aea22SJiri Olsa {
2454945aea22SJiri Olsa 	int ret = 0;
2455945aea22SJiri Olsa 
2456b58eca40SIan Rogers 	for (int i = 0; i < cnt; i++) {
2457b58eca40SIan Rogers 		const struct terms_test *t = &terms[i];
2458945aea22SJiri Olsa 
2459945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
2460945aea22SJiri Olsa 		ret = test_term(t);
2461945aea22SJiri Olsa 		if (ret)
2462945aea22SJiri Olsa 			break;
2463945aea22SJiri Olsa 	}
2464945aea22SJiri Olsa 
2465945aea22SJiri Olsa 	return ret;
2466945aea22SJiri Olsa }
2467945aea22SJiri Olsa 
24687741e03eSIan Rogers static int test__terms2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
24697741e03eSIan Rogers {
24707741e03eSIan Rogers 	return test_terms(test__terms, ARRAY_SIZE(test__terms));
24717741e03eSIan Rogers }
24727741e03eSIan Rogers 
24737741e03eSIan Rogers static int test__pmu_events(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
2474945aea22SJiri Olsa {
2475f24ebe80SIan Rogers 	struct perf_pmu *pmu = NULL;
24765a52817eSIan Rogers 	int ret = TEST_OK;
24775a52817eSIan Rogers 
24781eaf496eSIan Rogers 	while ((pmu = perf_pmus__scan(pmu)) != NULL) {
2479945aea22SJiri Olsa 		struct stat st;
2480945aea22SJiri Olsa 		char path[PATH_MAX];
2481945aea22SJiri Olsa 		struct dirent *ent;
2482945aea22SJiri Olsa 		DIR *dir;
24835a52817eSIan Rogers 		int err;
2484945aea22SJiri Olsa 
24855a52817eSIan Rogers 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/events/",
24865a52817eSIan Rogers 			sysfs__mountpoint(), pmu->name);
24877741e03eSIan Rogers 
24885a52817eSIan Rogers 		err = stat(path, &st);
24895a52817eSIan Rogers 		if (err) {
24905a52817eSIan Rogers 			pr_debug("skipping PMU %s events tests: %s\n", pmu->name, path);
24915a52817eSIan Rogers 			continue;
2492945aea22SJiri Olsa 		}
2493945aea22SJiri Olsa 
2494945aea22SJiri Olsa 		dir = opendir(path);
2495945aea22SJiri Olsa 		if (!dir) {
24967741e03eSIan Rogers 			pr_debug("can't open pmu event dir: %s\n", path);
24975a52817eSIan Rogers 			ret = combine_test_results(ret, TEST_SKIP);
24985a52817eSIan Rogers 			continue;
2499945aea22SJiri Olsa 		}
2500945aea22SJiri Olsa 
25017741e03eSIan Rogers 		while ((ent = readdir(dir))) {
25028252e791SIan Rogers 			struct evlist_test e = { .name = NULL, };
25032e2bbc03SArnaldo Carvalho de Melo 			char name[2 * NAME_MAX + 1 + 12 + 3];
25047741e03eSIan Rogers 			int test_ret;
2505945aea22SJiri Olsa 
250617a2634bSAndi Kleen 			/* Names containing . are special and cannot be used directly */
250717a2634bSAndi Kleen 			if (strchr(ent->d_name, '.'))
2508945aea22SJiri Olsa 				continue;
2509945aea22SJiri Olsa 
25105a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s/event=%s/u", pmu->name, ent->d_name);
2511945aea22SJiri Olsa 
2512945aea22SJiri Olsa 			e.name  = name;
2513945aea22SJiri Olsa 			e.check = test__checkevent_pmu_events;
2514945aea22SJiri Olsa 
25157741e03eSIan Rogers 			test_ret = test_event(&e);
25167741e03eSIan Rogers 			if (test_ret != TEST_OK) {
25177741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
25187741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
25197741e03eSIan Rogers 			}
25205a52817eSIan Rogers 
25215a52817eSIan Rogers 			if (!is_pmu_core(pmu->name))
25225a52817eSIan Rogers 				continue;
25235a52817eSIan Rogers 
2524146edff3SIan Rogers 			/*
2525146edff3SIan Rogers 			 * Names containing '-' are recognized as prefixes and suffixes
2526146edff3SIan Rogers 			 * due to '-' being a legacy PMU separator. This fails when the
2527146edff3SIan Rogers 			 * prefix or suffix collides with an existing legacy token. For
2528146edff3SIan Rogers 			 * example, branch-brs has a prefix (branch) that collides with
2529146edff3SIan Rogers 			 * a PE_NAME_CACHE_TYPE token causing a parse error as a suffix
2530146edff3SIan Rogers 			 * isn't expected after this. As event names in the config
2531146edff3SIan Rogers 			 * slashes are allowed a '-' in the name we check this works
2532146edff3SIan Rogers 			 * above.
2533146edff3SIan Rogers 			 */
2534146edff3SIan Rogers 			if (strchr(ent->d_name, '-'))
2535146edff3SIan Rogers 				continue;
2536146edff3SIan Rogers 
25375a52817eSIan Rogers 			snprintf(name, sizeof(name), "%s:u,%s/event=%s/u",
25385a52817eSIan Rogers 				 ent->d_name, pmu->name, ent->d_name);
2539ffe59788SKan Liang 			e.name  = name;
2540ffe59788SKan Liang 			e.check = test__checkevent_pmu_events_mix;
25417741e03eSIan Rogers 			test_ret = test_event(&e);
25427741e03eSIan Rogers 			if (test_ret != TEST_OK) {
25437741e03eSIan Rogers 				pr_debug("Test PMU event failed for '%s'", name);
25447741e03eSIan Rogers 				ret = combine_test_results(ret, test_ret);
25457741e03eSIan Rogers 			}
2546945aea22SJiri Olsa 		}
2547945aea22SJiri Olsa 
2548945aea22SJiri Olsa 		closedir(dir);
25495a52817eSIan Rogers 	}
2550945aea22SJiri Olsa 	return ret;
2551945aea22SJiri Olsa }
2552945aea22SJiri Olsa 
25537741e03eSIan Rogers static int test__pmu_events2(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
25547741e03eSIan Rogers {
25557741e03eSIan Rogers 	return test_events(test__events_pmu, ARRAY_SIZE(test__events_pmu));
25567741e03eSIan Rogers }
25577741e03eSIan Rogers 
2558c7a3828dSJin Yao static bool test_alias(char **event, char **alias)
2559c7a3828dSJin Yao {
2560c7a3828dSJin Yao 	char path[PATH_MAX];
2561c7a3828dSJin Yao 	DIR *dir;
2562c7a3828dSJin Yao 	struct dirent *dent;
2563c7a3828dSJin Yao 	const char *sysfs = sysfs__mountpoint();
2564c7a3828dSJin Yao 	char buf[128];
2565c7a3828dSJin Yao 	FILE *file;
2566c7a3828dSJin Yao 
2567c7a3828dSJin Yao 	if (!sysfs)
2568c7a3828dSJin Yao 		return false;
2569c7a3828dSJin Yao 
2570c7a3828dSJin Yao 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/", sysfs);
2571c7a3828dSJin Yao 	dir = opendir(path);
2572c7a3828dSJin Yao 	if (!dir)
2573c7a3828dSJin Yao 		return false;
2574c7a3828dSJin Yao 
2575c7a3828dSJin Yao 	while ((dent = readdir(dir))) {
2576c7a3828dSJin Yao 		if (!strcmp(dent->d_name, ".") ||
2577c7a3828dSJin Yao 		    !strcmp(dent->d_name, ".."))
2578c7a3828dSJin Yao 			continue;
2579c7a3828dSJin Yao 
2580c7a3828dSJin Yao 		snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/alias",
2581c7a3828dSJin Yao 			 sysfs, dent->d_name);
2582c7a3828dSJin Yao 
2583c7a3828dSJin Yao 		if (!file_available(path))
2584c7a3828dSJin Yao 			continue;
2585c7a3828dSJin Yao 
2586c7a3828dSJin Yao 		file = fopen(path, "r");
2587c7a3828dSJin Yao 		if (!file)
2588c7a3828dSJin Yao 			continue;
2589c7a3828dSJin Yao 
2590c7a3828dSJin Yao 		if (!fgets(buf, sizeof(buf), file)) {
2591c7a3828dSJin Yao 			fclose(file);
2592c7a3828dSJin Yao 			continue;
2593c7a3828dSJin Yao 		}
2594c7a3828dSJin Yao 
2595c7a3828dSJin Yao 		/* Remove the last '\n' */
2596c7a3828dSJin Yao 		buf[strlen(buf) - 1] = 0;
2597c7a3828dSJin Yao 
2598c7a3828dSJin Yao 		fclose(file);
2599c7a3828dSJin Yao 		*event = strdup(dent->d_name);
2600c7a3828dSJin Yao 		*alias = strdup(buf);
2601c7a3828dSJin Yao 		closedir(dir);
2602c7a3828dSJin Yao 
2603c7a3828dSJin Yao 		if (*event == NULL || *alias == NULL) {
2604c7a3828dSJin Yao 			free(*event);
2605c7a3828dSJin Yao 			free(*alias);
2606c7a3828dSJin Yao 			return false;
2607c7a3828dSJin Yao 		}
2608c7a3828dSJin Yao 
2609c7a3828dSJin Yao 		return true;
2610c7a3828dSJin Yao 	}
2611c7a3828dSJin Yao 
2612c7a3828dSJin Yao 	closedir(dir);
2613c7a3828dSJin Yao 	return false;
2614c7a3828dSJin Yao }
2615c7a3828dSJin Yao 
2616c7a3828dSJin Yao static int test__checkevent_pmu_events_alias(struct evlist *evlist)
2617c7a3828dSJin Yao {
2618c7a3828dSJin Yao 	struct evsel *evsel1 = evlist__first(evlist);
2619c7a3828dSJin Yao 	struct evsel *evsel2 = evlist__last(evlist);
2620c7a3828dSJin Yao 
2621c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong type", evsel1->core.attr.type == evsel2->core.attr.type);
2622c7a3828dSJin Yao 	TEST_ASSERT_VAL("wrong config", evsel1->core.attr.config == evsel2->core.attr.config);
26237741e03eSIan Rogers 	return TEST_OK;
2624c7a3828dSJin Yao }
2625c7a3828dSJin Yao 
26267741e03eSIan Rogers static int test__pmu_events_alias(char *event, char *alias)
2627c7a3828dSJin Yao {
26288252e791SIan Rogers 	struct evlist_test e = { .name = NULL, };
2629c7a3828dSJin Yao 	char name[2 * NAME_MAX + 20];
2630c7a3828dSJin Yao 
2631c7a3828dSJin Yao 	snprintf(name, sizeof(name), "%s/event=1/,%s/event=1/",
2632c7a3828dSJin Yao 		 event, alias);
2633c7a3828dSJin Yao 
2634c7a3828dSJin Yao 	e.name  = name;
2635c7a3828dSJin Yao 	e.check = test__checkevent_pmu_events_alias;
2636c7a3828dSJin Yao 	return test_event(&e);
2637c7a3828dSJin Yao }
2638c7a3828dSJin Yao 
26397741e03eSIan Rogers static int test__alias(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
26407741e03eSIan Rogers {
26417741e03eSIan Rogers 	char *event, *alias;
26427741e03eSIan Rogers 	int ret;
26437741e03eSIan Rogers 
26447741e03eSIan Rogers 	if (!test_alias(&event, &alias))
26457741e03eSIan Rogers 		return TEST_SKIP;
26467741e03eSIan Rogers 
26477741e03eSIan Rogers 	ret = test__pmu_events_alias(event, alias);
26487741e03eSIan Rogers 
26497741e03eSIan Rogers 	free(event);
26507741e03eSIan Rogers 	free(alias);
26517741e03eSIan Rogers 	return ret;
26527741e03eSIan Rogers }
26537741e03eSIan Rogers 
26547741e03eSIan Rogers static int test__pmu_events_alias2(struct test_suite *test __maybe_unused,
26557741e03eSIan Rogers 				   int subtest __maybe_unused)
2656b4a7276cSJohn Garry {
2657b4a7276cSJohn Garry 	static const char events[][30] = {
2658b4a7276cSJohn Garry 			"event-hyphen",
2659b4a7276cSJohn Garry 			"event-two-hyph",
2660b4a7276cSJohn Garry 	};
26617741e03eSIan Rogers 	int ret = TEST_OK;
2662b4a7276cSJohn Garry 
26637741e03eSIan Rogers 	for (unsigned int i = 0; i < ARRAY_SIZE(events); i++) {
26647741e03eSIan Rogers 		int test_ret = test_event_fake_pmu(&events[i][0]);
26657741e03eSIan Rogers 
26667741e03eSIan Rogers 		if (test_ret != TEST_OK) {
26677741e03eSIan Rogers 			pr_debug("check_parse_fake %s failed\n", &events[i][0]);
26687741e03eSIan Rogers 			ret = combine_test_results(ret, test_ret);
2669b4a7276cSJohn Garry 		}
2670b4a7276cSJohn Garry 	}
2671b4a7276cSJohn Garry 
2672b4a7276cSJohn Garry 	return ret;
2673b4a7276cSJohn Garry }
2674b4a7276cSJohn Garry 
26757741e03eSIan Rogers static struct test_case tests__parse_events[] = {
26767741e03eSIan Rogers 	TEST_CASE_REASON("Test event parsing",
26777741e03eSIan Rogers 			 events2,
26787741e03eSIan Rogers 			 "permissions"),
26797741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of all PMU events from sysfs",
26807741e03eSIan Rogers 			 pmu_events,
26817741e03eSIan Rogers 			 "permissions"),
26827741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of given PMU events from sysfs",
26837741e03eSIan Rogers 			 pmu_events2,
26847741e03eSIan Rogers 			 "permissions"),
26857741e03eSIan Rogers 	TEST_CASE_REASON("Parsing of aliased events from sysfs", alias,
26867741e03eSIan Rogers 			 "no aliases in sysfs"),
26877741e03eSIan Rogers 	TEST_CASE("Parsing of aliased events", pmu_events_alias2),
26887741e03eSIan Rogers 	TEST_CASE("Parsing of terms (event modifiers)", terms2),
26897741e03eSIan Rogers 	{	.name = NULL, }
26907741e03eSIan Rogers };
2691945aea22SJiri Olsa 
26927741e03eSIan Rogers struct test_suite suite__parse_events = {
26937741e03eSIan Rogers 	.desc = "Parse event definition strings",
26947741e03eSIan Rogers 	.test_cases = tests__parse_events,
26957741e03eSIan Rogers };
2696