xref: /openbmc/linux/tools/perf/tests/parse-events.c (revision 945aea220bb8f4bb37950549cc0b93bbec24c460)
1*945aea22SJiri Olsa 
2*945aea22SJiri Olsa #include "parse-events.h"
3*945aea22SJiri Olsa #include "evsel.h"
4*945aea22SJiri Olsa #include "evlist.h"
5*945aea22SJiri Olsa #include "sysfs.h"
6*945aea22SJiri Olsa #include "../../../include/linux/hw_breakpoint.h"
7*945aea22SJiri Olsa 
8*945aea22SJiri Olsa #define TEST_ASSERT_VAL(text, cond) \
9*945aea22SJiri Olsa do { \
10*945aea22SJiri Olsa 	if (!(cond)) { \
11*945aea22SJiri Olsa 		pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \
12*945aea22SJiri Olsa 		return -1; \
13*945aea22SJiri Olsa 	} \
14*945aea22SJiri Olsa } while (0)
15*945aea22SJiri Olsa 
16*945aea22SJiri Olsa #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
17*945aea22SJiri Olsa 			     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
18*945aea22SJiri Olsa 
19*945aea22SJiri Olsa static int test__checkevent_tracepoint(struct perf_evlist *evlist)
20*945aea22SJiri Olsa {
21*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
22*945aea22SJiri Olsa 
23*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
24*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
25*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
26*945aea22SJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
27*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
28*945aea22SJiri Olsa 	return 0;
29*945aea22SJiri Olsa }
30*945aea22SJiri Olsa 
31*945aea22SJiri Olsa static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist)
32*945aea22SJiri Olsa {
33*945aea22SJiri Olsa 	struct perf_evsel *evsel;
34*945aea22SJiri Olsa 
35*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1);
36*945aea22SJiri Olsa 
37*945aea22SJiri Olsa 	list_for_each_entry(evsel, &evlist->entries, node) {
38*945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong type",
39*945aea22SJiri Olsa 			PERF_TYPE_TRACEPOINT == evsel->attr.type);
40*945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_type",
41*945aea22SJiri Olsa 			PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
42*945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong sample_period",
43*945aea22SJiri Olsa 			1 == evsel->attr.sample_period);
44*945aea22SJiri Olsa 	}
45*945aea22SJiri Olsa 	return 0;
46*945aea22SJiri Olsa }
47*945aea22SJiri Olsa 
48*945aea22SJiri Olsa static int test__checkevent_raw(struct perf_evlist *evlist)
49*945aea22SJiri Olsa {
50*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
51*945aea22SJiri Olsa 
52*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
53*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
54*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config);
55*945aea22SJiri Olsa 	return 0;
56*945aea22SJiri Olsa }
57*945aea22SJiri Olsa 
58*945aea22SJiri Olsa static int test__checkevent_numeric(struct perf_evlist *evlist)
59*945aea22SJiri Olsa {
60*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
61*945aea22SJiri Olsa 
62*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
63*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
64*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
65*945aea22SJiri Olsa 	return 0;
66*945aea22SJiri Olsa }
67*945aea22SJiri Olsa 
68*945aea22SJiri Olsa static int test__checkevent_symbolic_name(struct perf_evlist *evlist)
69*945aea22SJiri Olsa {
70*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
71*945aea22SJiri Olsa 
72*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
73*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
74*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
75*945aea22SJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
76*945aea22SJiri Olsa 	return 0;
77*945aea22SJiri Olsa }
78*945aea22SJiri Olsa 
79*945aea22SJiri Olsa static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist)
80*945aea22SJiri Olsa {
81*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
82*945aea22SJiri Olsa 
83*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
84*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
85*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
86*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
87*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong period",
88*945aea22SJiri Olsa 			100000 == evsel->attr.sample_period);
89*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1",
90*945aea22SJiri Olsa 			0 == evsel->attr.config1);
91*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2",
92*945aea22SJiri Olsa 			1 == evsel->attr.config2);
93*945aea22SJiri Olsa 	return 0;
94*945aea22SJiri Olsa }
95*945aea22SJiri Olsa 
96*945aea22SJiri Olsa static int test__checkevent_symbolic_alias(struct perf_evlist *evlist)
97*945aea22SJiri Olsa {
98*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
99*945aea22SJiri Olsa 
100*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
101*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type);
102*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
103*945aea22SJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config);
104*945aea22SJiri Olsa 	return 0;
105*945aea22SJiri Olsa }
106*945aea22SJiri Olsa 
107*945aea22SJiri Olsa static int test__checkevent_genhw(struct perf_evlist *evlist)
108*945aea22SJiri Olsa {
109*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
110*945aea22SJiri Olsa 
111*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
112*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type);
113*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config);
114*945aea22SJiri Olsa 	return 0;
115*945aea22SJiri Olsa }
116*945aea22SJiri Olsa 
117*945aea22SJiri Olsa static int test__checkevent_breakpoint(struct perf_evlist *evlist)
118*945aea22SJiri Olsa {
119*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
120*945aea22SJiri Olsa 
121*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
122*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type);
123*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
124*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
125*945aea22SJiri Olsa 					 evsel->attr.bp_type);
126*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
127*945aea22SJiri Olsa 					evsel->attr.bp_len);
128*945aea22SJiri Olsa 	return 0;
129*945aea22SJiri Olsa }
130*945aea22SJiri Olsa 
131*945aea22SJiri Olsa static int test__checkevent_breakpoint_x(struct perf_evlist *evlist)
132*945aea22SJiri Olsa {
133*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
134*945aea22SJiri Olsa 
135*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
136*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type);
137*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
138*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
139*945aea22SJiri Olsa 			HW_BREAKPOINT_X == evsel->attr.bp_type);
140*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len);
141*945aea22SJiri Olsa 	return 0;
142*945aea22SJiri Olsa }
143*945aea22SJiri Olsa 
144*945aea22SJiri Olsa static int test__checkevent_breakpoint_r(struct perf_evlist *evlist)
145*945aea22SJiri Olsa {
146*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
147*945aea22SJiri Olsa 
148*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
149*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
150*945aea22SJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->attr.type);
151*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
152*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
153*945aea22SJiri Olsa 			HW_BREAKPOINT_R == evsel->attr.bp_type);
154*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
155*945aea22SJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
156*945aea22SJiri Olsa 	return 0;
157*945aea22SJiri Olsa }
158*945aea22SJiri Olsa 
159*945aea22SJiri Olsa static int test__checkevent_breakpoint_w(struct perf_evlist *evlist)
160*945aea22SJiri Olsa {
161*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
162*945aea22SJiri Olsa 
163*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
164*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
165*945aea22SJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->attr.type);
166*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
167*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
168*945aea22SJiri Olsa 			HW_BREAKPOINT_W == evsel->attr.bp_type);
169*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
170*945aea22SJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
171*945aea22SJiri Olsa 	return 0;
172*945aea22SJiri Olsa }
173*945aea22SJiri Olsa 
174*945aea22SJiri Olsa static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist)
175*945aea22SJiri Olsa {
176*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
177*945aea22SJiri Olsa 
178*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
179*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type",
180*945aea22SJiri Olsa 			PERF_TYPE_BREAKPOINT == evsel->attr.type);
181*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
182*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_type",
183*945aea22SJiri Olsa 		(HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type);
184*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong bp_len",
185*945aea22SJiri Olsa 			HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
186*945aea22SJiri Olsa 	return 0;
187*945aea22SJiri Olsa }
188*945aea22SJiri Olsa 
189*945aea22SJiri Olsa static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist)
190*945aea22SJiri Olsa {
191*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
192*945aea22SJiri Olsa 
193*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
194*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
195*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
196*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
197*945aea22SJiri Olsa 
198*945aea22SJiri Olsa 	return test__checkevent_tracepoint(evlist);
199*945aea22SJiri Olsa }
200*945aea22SJiri Olsa 
201*945aea22SJiri Olsa static int
202*945aea22SJiri Olsa test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist)
203*945aea22SJiri Olsa {
204*945aea22SJiri Olsa 	struct perf_evsel *evsel;
205*945aea22SJiri Olsa 
206*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1);
207*945aea22SJiri Olsa 
208*945aea22SJiri Olsa 	list_for_each_entry(evsel, &evlist->entries, node) {
209*945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_user",
210*945aea22SJiri Olsa 				!evsel->attr.exclude_user);
211*945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_kernel",
212*945aea22SJiri Olsa 				evsel->attr.exclude_kernel);
213*945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
214*945aea22SJiri Olsa 		TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
215*945aea22SJiri Olsa 	}
216*945aea22SJiri Olsa 
217*945aea22SJiri Olsa 	return test__checkevent_tracepoint_multi(evlist);
218*945aea22SJiri Olsa }
219*945aea22SJiri Olsa 
220*945aea22SJiri Olsa static int test__checkevent_raw_modifier(struct perf_evlist *evlist)
221*945aea22SJiri Olsa {
222*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
223*945aea22SJiri Olsa 
224*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
225*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
226*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
227*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
228*945aea22SJiri Olsa 
229*945aea22SJiri Olsa 	return test__checkevent_raw(evlist);
230*945aea22SJiri Olsa }
231*945aea22SJiri Olsa 
232*945aea22SJiri Olsa static int test__checkevent_numeric_modifier(struct perf_evlist *evlist)
233*945aea22SJiri Olsa {
234*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
235*945aea22SJiri Olsa 
236*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
237*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
238*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
239*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
240*945aea22SJiri Olsa 
241*945aea22SJiri Olsa 	return test__checkevent_numeric(evlist);
242*945aea22SJiri Olsa }
243*945aea22SJiri Olsa 
244*945aea22SJiri Olsa static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist)
245*945aea22SJiri Olsa {
246*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
247*945aea22SJiri Olsa 
248*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
249*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
250*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
251*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
252*945aea22SJiri Olsa 
253*945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
254*945aea22SJiri Olsa }
255*945aea22SJiri Olsa 
256*945aea22SJiri Olsa static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist)
257*945aea22SJiri Olsa {
258*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
259*945aea22SJiri Olsa 
260*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
261*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
262*945aea22SJiri Olsa 
263*945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
264*945aea22SJiri Olsa }
265*945aea22SJiri Olsa 
266*945aea22SJiri Olsa static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist)
267*945aea22SJiri Olsa {
268*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
269*945aea22SJiri Olsa 
270*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
271*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
272*945aea22SJiri Olsa 
273*945aea22SJiri Olsa 	return test__checkevent_symbolic_name(evlist);
274*945aea22SJiri Olsa }
275*945aea22SJiri Olsa 
276*945aea22SJiri Olsa static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist)
277*945aea22SJiri Olsa {
278*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
279*945aea22SJiri Olsa 
280*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
281*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
282*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
283*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
284*945aea22SJiri Olsa 
285*945aea22SJiri Olsa 	return test__checkevent_symbolic_alias(evlist);
286*945aea22SJiri Olsa }
287*945aea22SJiri Olsa 
288*945aea22SJiri Olsa static int test__checkevent_genhw_modifier(struct perf_evlist *evlist)
289*945aea22SJiri Olsa {
290*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
291*945aea22SJiri Olsa 
292*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
293*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
294*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
295*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
296*945aea22SJiri Olsa 
297*945aea22SJiri Olsa 	return test__checkevent_genhw(evlist);
298*945aea22SJiri Olsa }
299*945aea22SJiri Olsa 
300*945aea22SJiri Olsa static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist)
301*945aea22SJiri Olsa {
302*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
303*945aea22SJiri Olsa 
304*945aea22SJiri Olsa 
305*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
306*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
307*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
308*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
309*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
310*945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:u"));
311*945aea22SJiri Olsa 
312*945aea22SJiri Olsa 	return test__checkevent_breakpoint(evlist);
313*945aea22SJiri Olsa }
314*945aea22SJiri Olsa 
315*945aea22SJiri Olsa static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist)
316*945aea22SJiri Olsa {
317*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
318*945aea22SJiri Olsa 
319*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
320*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
321*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
322*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
323*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
324*945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:x:k"));
325*945aea22SJiri Olsa 
326*945aea22SJiri Olsa 	return test__checkevent_breakpoint_x(evlist);
327*945aea22SJiri Olsa }
328*945aea22SJiri Olsa 
329*945aea22SJiri Olsa static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist)
330*945aea22SJiri Olsa {
331*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
332*945aea22SJiri Olsa 
333*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
334*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
335*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
336*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
337*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
338*945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:r:hp"));
339*945aea22SJiri Olsa 
340*945aea22SJiri Olsa 	return test__checkevent_breakpoint_r(evlist);
341*945aea22SJiri Olsa }
342*945aea22SJiri Olsa 
343*945aea22SJiri Olsa static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist)
344*945aea22SJiri Olsa {
345*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
346*945aea22SJiri Olsa 
347*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
348*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
349*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
350*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
351*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
352*945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:w:up"));
353*945aea22SJiri Olsa 
354*945aea22SJiri Olsa 	return test__checkevent_breakpoint_w(evlist);
355*945aea22SJiri Olsa }
356*945aea22SJiri Olsa 
357*945aea22SJiri Olsa static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist)
358*945aea22SJiri Olsa {
359*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
360*945aea22SJiri Olsa 
361*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
362*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
363*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
364*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
365*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
366*945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "mem:0:rw:kp"));
367*945aea22SJiri Olsa 
368*945aea22SJiri Olsa 	return test__checkevent_breakpoint_rw(evlist);
369*945aea22SJiri Olsa }
370*945aea22SJiri Olsa 
371*945aea22SJiri Olsa static int test__checkevent_pmu(struct perf_evlist *evlist)
372*945aea22SJiri Olsa {
373*945aea22SJiri Olsa 
374*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
375*945aea22SJiri Olsa 
376*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
377*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
378*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",    10 == evsel->attr.config);
379*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1",    1 == evsel->attr.config1);
380*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2",    3 == evsel->attr.config2);
381*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong period",  1000 == evsel->attr.sample_period);
382*945aea22SJiri Olsa 
383*945aea22SJiri Olsa 	return 0;
384*945aea22SJiri Olsa }
385*945aea22SJiri Olsa 
386*945aea22SJiri Olsa static int test__checkevent_list(struct perf_evlist *evlist)
387*945aea22SJiri Olsa {
388*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
389*945aea22SJiri Olsa 
390*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
391*945aea22SJiri Olsa 
392*945aea22SJiri Olsa 	/* r1 */
393*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
394*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
395*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1);
396*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2);
397*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
398*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
399*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
400*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
401*945aea22SJiri Olsa 
402*945aea22SJiri Olsa 	/* syscalls:sys_enter_open:k */
403*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
404*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
405*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
406*945aea22SJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
407*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
408*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
409*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
410*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
411*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
412*945aea22SJiri Olsa 
413*945aea22SJiri Olsa 	/* 1:1:hp */
414*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
415*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
416*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
417*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
418*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
419*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
420*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
421*945aea22SJiri Olsa 
422*945aea22SJiri Olsa 	return 0;
423*945aea22SJiri Olsa }
424*945aea22SJiri Olsa 
425*945aea22SJiri Olsa static int test__checkevent_pmu_name(struct perf_evlist *evlist)
426*945aea22SJiri Olsa {
427*945aea22SJiri Olsa 	struct perf_evsel *evsel = perf_evlist__first(evlist);
428*945aea22SJiri Olsa 
429*945aea22SJiri Olsa 	/* cpu/config=1,name=krava/u */
430*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
431*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
432*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",  1 == evsel->attr.config);
433*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava"));
434*945aea22SJiri Olsa 
435*945aea22SJiri Olsa 	/* cpu/config=2/u" */
436*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
437*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
438*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
439*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",  2 == evsel->attr.config);
440*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong name",
441*945aea22SJiri Olsa 			!strcmp(perf_evsel__name(evsel), "cpu/config=2/u"));
442*945aea22SJiri Olsa 
443*945aea22SJiri Olsa 	return 0;
444*945aea22SJiri Olsa }
445*945aea22SJiri Olsa 
446*945aea22SJiri Olsa static int test__checkevent_pmu_events(struct perf_evlist *evlist)
447*945aea22SJiri Olsa {
448*945aea22SJiri Olsa 	struct perf_evsel *evsel;
449*945aea22SJiri Olsa 
450*945aea22SJiri Olsa 	evsel = list_entry(evlist->entries.next, struct perf_evsel, node);
451*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
452*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
453*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user",
454*945aea22SJiri Olsa 			!evsel->attr.exclude_user);
455*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel",
456*945aea22SJiri Olsa 			evsel->attr.exclude_kernel);
457*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
458*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
459*945aea22SJiri Olsa 
460*945aea22SJiri Olsa 	return 0;
461*945aea22SJiri Olsa }
462*945aea22SJiri Olsa 
463*945aea22SJiri Olsa static int test__checkterms_simple(struct list_head *terms)
464*945aea22SJiri Olsa {
465*945aea22SJiri Olsa 	struct parse_events__term *term;
466*945aea22SJiri Olsa 
467*945aea22SJiri Olsa 	/* config=10 */
468*945aea22SJiri Olsa 	term = list_entry(terms->next, struct parse_events__term, list);
469*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
470*945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG);
471*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
472*945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
473*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 10);
474*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
475*945aea22SJiri Olsa 
476*945aea22SJiri Olsa 	/* config1 */
477*945aea22SJiri Olsa 	term = list_entry(term->list.next, struct parse_events__term, list);
478*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
479*945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1);
480*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
481*945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
482*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
483*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
484*945aea22SJiri Olsa 
485*945aea22SJiri Olsa 	/* config2=3 */
486*945aea22SJiri Olsa 	term = list_entry(term->list.next, struct parse_events__term, list);
487*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
488*945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2);
489*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
490*945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
491*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 3);
492*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !term->config);
493*945aea22SJiri Olsa 
494*945aea22SJiri Olsa 	/* umask=1*/
495*945aea22SJiri Olsa 	term = list_entry(term->list.next, struct parse_events__term, list);
496*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type term",
497*945aea22SJiri Olsa 			term->type_term == PARSE_EVENTS__TERM_TYPE_USER);
498*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type val",
499*945aea22SJiri Olsa 			term->type_val == PARSE_EVENTS__TERM_TYPE_NUM);
500*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong val", term->val.num == 1);
501*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
502*945aea22SJiri Olsa 
503*945aea22SJiri Olsa 	return 0;
504*945aea22SJiri Olsa }
505*945aea22SJiri Olsa 
506*945aea22SJiri Olsa static int test__group1(struct perf_evlist *evlist)
507*945aea22SJiri Olsa {
508*945aea22SJiri Olsa 	struct perf_evsel *evsel, *leader;
509*945aea22SJiri Olsa 
510*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
511*945aea22SJiri Olsa 
512*945aea22SJiri Olsa 	/* instructions:k */
513*945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
514*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
515*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
516*945aea22SJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
517*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
518*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
519*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
520*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
521*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
522*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
523*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
524*945aea22SJiri Olsa 
525*945aea22SJiri Olsa 	/* cycles:upp */
526*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
527*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
528*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
529*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
530*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
531*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
532*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
533*945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
534*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
535*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
536*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2);
537*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
538*945aea22SJiri Olsa 
539*945aea22SJiri Olsa 	return 0;
540*945aea22SJiri Olsa }
541*945aea22SJiri Olsa 
542*945aea22SJiri Olsa static int test__group2(struct perf_evlist *evlist)
543*945aea22SJiri Olsa {
544*945aea22SJiri Olsa 	struct perf_evsel *evsel, *leader;
545*945aea22SJiri Olsa 
546*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
547*945aea22SJiri Olsa 
548*945aea22SJiri Olsa 	/* faults + :ku modifier */
549*945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
550*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type);
551*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
552*945aea22SJiri Olsa 			PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config);
553*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
554*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
555*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
556*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
557*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
558*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
559*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
560*945aea22SJiri Olsa 
561*945aea22SJiri Olsa 	/* cache-references + :u modifier */
562*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
563*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
564*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
565*945aea22SJiri Olsa 			PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config);
566*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
567*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
568*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
569*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
570*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
571*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
572*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
573*945aea22SJiri Olsa 
574*945aea22SJiri Olsa 	/* cycles:k */
575*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
576*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
577*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
578*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
579*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
580*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
581*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
582*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
583*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
584*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
585*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
586*945aea22SJiri Olsa 
587*945aea22SJiri Olsa 	return 0;
588*945aea22SJiri Olsa }
589*945aea22SJiri Olsa 
590*945aea22SJiri Olsa static int test__group3(struct perf_evlist *evlist __maybe_unused)
591*945aea22SJiri Olsa {
592*945aea22SJiri Olsa 	struct perf_evsel *evsel, *leader;
593*945aea22SJiri Olsa 
594*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries);
595*945aea22SJiri Olsa 
596*945aea22SJiri Olsa 	/* group1 syscalls:sys_enter_open:H */
597*945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
598*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
599*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_type",
600*945aea22SJiri Olsa 		PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
601*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
602*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
603*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
604*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
605*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
606*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
607*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
608*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
609*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
610*945aea22SJiri Olsa 		!strcmp(leader->group_name, "group1"));
611*945aea22SJiri Olsa 
612*945aea22SJiri Olsa 	/* group1 cycles:kppp */
613*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
614*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
615*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
616*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
617*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
618*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
619*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
620*945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
621*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
622*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
623*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3);
624*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
625*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
626*945aea22SJiri Olsa 
627*945aea22SJiri Olsa 	/* group2 cycles + G modifier */
628*945aea22SJiri Olsa 	evsel = leader = perf_evsel__next(evsel);
629*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
630*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
631*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
632*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
633*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
634*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
635*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
636*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
637*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
638*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
639*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name",
640*945aea22SJiri Olsa 		!strcmp(leader->group_name, "group2"));
641*945aea22SJiri Olsa 
642*945aea22SJiri Olsa 	/* group2 1:3 + G modifier */
643*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
644*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
645*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config);
646*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
647*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
648*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
649*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
650*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
651*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
652*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
653*945aea22SJiri Olsa 
654*945aea22SJiri Olsa 	/* instructions:u */
655*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
656*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
657*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
658*945aea22SJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
659*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
660*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
661*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
662*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
663*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
664*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
665*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
666*945aea22SJiri Olsa 
667*945aea22SJiri Olsa 	return 0;
668*945aea22SJiri Olsa }
669*945aea22SJiri Olsa 
670*945aea22SJiri Olsa static int test__group4(struct perf_evlist *evlist __maybe_unused)
671*945aea22SJiri Olsa {
672*945aea22SJiri Olsa 	struct perf_evsel *evsel, *leader;
673*945aea22SJiri Olsa 
674*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
675*945aea22SJiri Olsa 
676*945aea22SJiri Olsa 	/* cycles:u + p */
677*945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
678*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
679*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
680*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
681*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
682*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
683*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
684*945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
685*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
686*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
687*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1);
688*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
689*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
690*945aea22SJiri Olsa 
691*945aea22SJiri Olsa 	/* instructions:kp + p */
692*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
693*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
694*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
695*945aea22SJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
696*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
697*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
698*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
699*945aea22SJiri Olsa 	/* use of precise requires exclude_guest */
700*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
701*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
702*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2);
703*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
704*945aea22SJiri Olsa 
705*945aea22SJiri Olsa 	return 0;
706*945aea22SJiri Olsa }
707*945aea22SJiri Olsa 
708*945aea22SJiri Olsa static int test__group5(struct perf_evlist *evlist __maybe_unused)
709*945aea22SJiri Olsa {
710*945aea22SJiri Olsa 	struct perf_evsel *evsel, *leader;
711*945aea22SJiri Olsa 
712*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries);
713*945aea22SJiri Olsa 
714*945aea22SJiri Olsa 	/* cycles + G */
715*945aea22SJiri Olsa 	evsel = leader = perf_evlist__first(evlist);
716*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
717*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
718*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
719*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
720*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
721*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
722*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
723*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
724*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
725*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
726*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
727*945aea22SJiri Olsa 
728*945aea22SJiri Olsa 	/* instructions + G */
729*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
730*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
731*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
732*945aea22SJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
733*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
734*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
735*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
736*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
737*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
738*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
739*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
740*945aea22SJiri Olsa 
741*945aea22SJiri Olsa 	/* cycles:G */
742*945aea22SJiri Olsa 	evsel = leader = perf_evsel__next(evsel);
743*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
744*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
745*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
746*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
747*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
748*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
749*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
750*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
751*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
752*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
753*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
754*945aea22SJiri Olsa 
755*945aea22SJiri Olsa 	/* instructions:G */
756*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
757*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
758*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
759*945aea22SJiri Olsa 			PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
760*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
761*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
762*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
763*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
764*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
765*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
766*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
767*945aea22SJiri Olsa 
768*945aea22SJiri Olsa 	/* cycles */
769*945aea22SJiri Olsa 	evsel = perf_evsel__next(evsel);
770*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
771*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong config",
772*945aea22SJiri Olsa 			PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
773*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
774*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
775*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
776*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
777*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
778*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
779*945aea22SJiri Olsa 	TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL);
780*945aea22SJiri Olsa 
781*945aea22SJiri Olsa 	return 0;
782*945aea22SJiri Olsa }
783*945aea22SJiri Olsa 
784*945aea22SJiri Olsa struct test__event_st {
785*945aea22SJiri Olsa 	const char *name;
786*945aea22SJiri Olsa 	__u32 type;
787*945aea22SJiri Olsa 	int (*check)(struct perf_evlist *evlist);
788*945aea22SJiri Olsa };
789*945aea22SJiri Olsa 
790*945aea22SJiri Olsa static struct test__event_st test__events[] = {
791*945aea22SJiri Olsa 	[0] = {
792*945aea22SJiri Olsa 		.name  = "syscalls:sys_enter_open",
793*945aea22SJiri Olsa 		.check = test__checkevent_tracepoint,
794*945aea22SJiri Olsa 	},
795*945aea22SJiri Olsa 	[1] = {
796*945aea22SJiri Olsa 		.name  = "syscalls:*",
797*945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi,
798*945aea22SJiri Olsa 	},
799*945aea22SJiri Olsa 	[2] = {
800*945aea22SJiri Olsa 		.name  = "r1a",
801*945aea22SJiri Olsa 		.check = test__checkevent_raw,
802*945aea22SJiri Olsa 	},
803*945aea22SJiri Olsa 	[3] = {
804*945aea22SJiri Olsa 		.name  = "1:1",
805*945aea22SJiri Olsa 		.check = test__checkevent_numeric,
806*945aea22SJiri Olsa 	},
807*945aea22SJiri Olsa 	[4] = {
808*945aea22SJiri Olsa 		.name  = "instructions",
809*945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name,
810*945aea22SJiri Olsa 	},
811*945aea22SJiri Olsa 	[5] = {
812*945aea22SJiri Olsa 		.name  = "cycles/period=100000,config2/",
813*945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_config,
814*945aea22SJiri Olsa 	},
815*945aea22SJiri Olsa 	[6] = {
816*945aea22SJiri Olsa 		.name  = "faults",
817*945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias,
818*945aea22SJiri Olsa 	},
819*945aea22SJiri Olsa 	[7] = {
820*945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss",
821*945aea22SJiri Olsa 		.check = test__checkevent_genhw,
822*945aea22SJiri Olsa 	},
823*945aea22SJiri Olsa 	[8] = {
824*945aea22SJiri Olsa 		.name  = "mem:0",
825*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint,
826*945aea22SJiri Olsa 	},
827*945aea22SJiri Olsa 	[9] = {
828*945aea22SJiri Olsa 		.name  = "mem:0:x",
829*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x,
830*945aea22SJiri Olsa 	},
831*945aea22SJiri Olsa 	[10] = {
832*945aea22SJiri Olsa 		.name  = "mem:0:r",
833*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r,
834*945aea22SJiri Olsa 	},
835*945aea22SJiri Olsa 	[11] = {
836*945aea22SJiri Olsa 		.name  = "mem:0:w",
837*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w,
838*945aea22SJiri Olsa 	},
839*945aea22SJiri Olsa 	[12] = {
840*945aea22SJiri Olsa 		.name  = "syscalls:sys_enter_open:k",
841*945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_modifier,
842*945aea22SJiri Olsa 	},
843*945aea22SJiri Olsa 	[13] = {
844*945aea22SJiri Olsa 		.name  = "syscalls:*:u",
845*945aea22SJiri Olsa 		.check = test__checkevent_tracepoint_multi_modifier,
846*945aea22SJiri Olsa 	},
847*945aea22SJiri Olsa 	[14] = {
848*945aea22SJiri Olsa 		.name  = "r1a:kp",
849*945aea22SJiri Olsa 		.check = test__checkevent_raw_modifier,
850*945aea22SJiri Olsa 	},
851*945aea22SJiri Olsa 	[15] = {
852*945aea22SJiri Olsa 		.name  = "1:1:hp",
853*945aea22SJiri Olsa 		.check = test__checkevent_numeric_modifier,
854*945aea22SJiri Olsa 	},
855*945aea22SJiri Olsa 	[16] = {
856*945aea22SJiri Olsa 		.name  = "instructions:h",
857*945aea22SJiri Olsa 		.check = test__checkevent_symbolic_name_modifier,
858*945aea22SJiri Olsa 	},
859*945aea22SJiri Olsa 	[17] = {
860*945aea22SJiri Olsa 		.name  = "faults:u",
861*945aea22SJiri Olsa 		.check = test__checkevent_symbolic_alias_modifier,
862*945aea22SJiri Olsa 	},
863*945aea22SJiri Olsa 	[18] = {
864*945aea22SJiri Olsa 		.name  = "L1-dcache-load-miss:kp",
865*945aea22SJiri Olsa 		.check = test__checkevent_genhw_modifier,
866*945aea22SJiri Olsa 	},
867*945aea22SJiri Olsa 	[19] = {
868*945aea22SJiri Olsa 		.name  = "mem:0:u",
869*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_modifier,
870*945aea22SJiri Olsa 	},
871*945aea22SJiri Olsa 	[20] = {
872*945aea22SJiri Olsa 		.name  = "mem:0:x:k",
873*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_x_modifier,
874*945aea22SJiri Olsa 	},
875*945aea22SJiri Olsa 	[21] = {
876*945aea22SJiri Olsa 		.name  = "mem:0:r:hp",
877*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_r_modifier,
878*945aea22SJiri Olsa 	},
879*945aea22SJiri Olsa 	[22] = {
880*945aea22SJiri Olsa 		.name  = "mem:0:w:up",
881*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_w_modifier,
882*945aea22SJiri Olsa 	},
883*945aea22SJiri Olsa 	[23] = {
884*945aea22SJiri Olsa 		.name  = "r1,syscalls:sys_enter_open:k,1:1:hp",
885*945aea22SJiri Olsa 		.check = test__checkevent_list,
886*945aea22SJiri Olsa 	},
887*945aea22SJiri Olsa 	[24] = {
888*945aea22SJiri Olsa 		.name  = "instructions:G",
889*945aea22SJiri Olsa 		.check = test__checkevent_exclude_host_modifier,
890*945aea22SJiri Olsa 	},
891*945aea22SJiri Olsa 	[25] = {
892*945aea22SJiri Olsa 		.name  = "instructions:H",
893*945aea22SJiri Olsa 		.check = test__checkevent_exclude_guest_modifier,
894*945aea22SJiri Olsa 	},
895*945aea22SJiri Olsa 	[26] = {
896*945aea22SJiri Olsa 		.name  = "mem:0:rw",
897*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw,
898*945aea22SJiri Olsa 	},
899*945aea22SJiri Olsa 	[27] = {
900*945aea22SJiri Olsa 		.name  = "mem:0:rw:kp",
901*945aea22SJiri Olsa 		.check = test__checkevent_breakpoint_rw_modifier,
902*945aea22SJiri Olsa 	},
903*945aea22SJiri Olsa 	[28] = {
904*945aea22SJiri Olsa 		.name  = "{instructions:k,cycles:upp}",
905*945aea22SJiri Olsa 		.check = test__group1,
906*945aea22SJiri Olsa 	},
907*945aea22SJiri Olsa 	[29] = {
908*945aea22SJiri Olsa 		.name  = "{faults:k,cache-references}:u,cycles:k",
909*945aea22SJiri Olsa 		.check = test__group2,
910*945aea22SJiri Olsa 	},
911*945aea22SJiri Olsa 	[30] = {
912*945aea22SJiri Olsa 		.name  = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
913*945aea22SJiri Olsa 		.check = test__group3,
914*945aea22SJiri Olsa 	},
915*945aea22SJiri Olsa 	[31] = {
916*945aea22SJiri Olsa 		.name  = "{cycles:u,instructions:kp}:p",
917*945aea22SJiri Olsa 		.check = test__group4,
918*945aea22SJiri Olsa 	},
919*945aea22SJiri Olsa 	[32] = {
920*945aea22SJiri Olsa 		.name  = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
921*945aea22SJiri Olsa 		.check = test__group5,
922*945aea22SJiri Olsa 	},
923*945aea22SJiri Olsa };
924*945aea22SJiri Olsa 
925*945aea22SJiri Olsa static struct test__event_st test__events_pmu[] = {
926*945aea22SJiri Olsa 	[0] = {
927*945aea22SJiri Olsa 		.name  = "cpu/config=10,config1,config2=3,period=1000/u",
928*945aea22SJiri Olsa 		.check = test__checkevent_pmu,
929*945aea22SJiri Olsa 	},
930*945aea22SJiri Olsa 	[1] = {
931*945aea22SJiri Olsa 		.name  = "cpu/config=1,name=krava/u,cpu/config=2/u",
932*945aea22SJiri Olsa 		.check = test__checkevent_pmu_name,
933*945aea22SJiri Olsa 	},
934*945aea22SJiri Olsa };
935*945aea22SJiri Olsa 
936*945aea22SJiri Olsa struct test__term {
937*945aea22SJiri Olsa 	const char *str;
938*945aea22SJiri Olsa 	__u32 type;
939*945aea22SJiri Olsa 	int (*check)(struct list_head *terms);
940*945aea22SJiri Olsa };
941*945aea22SJiri Olsa 
942*945aea22SJiri Olsa static struct test__term test__terms[] = {
943*945aea22SJiri Olsa 	[0] = {
944*945aea22SJiri Olsa 		.str   = "config=10,config1,config2=3,umask=1",
945*945aea22SJiri Olsa 		.check = test__checkterms_simple,
946*945aea22SJiri Olsa 	},
947*945aea22SJiri Olsa };
948*945aea22SJiri Olsa 
949*945aea22SJiri Olsa static int test_event(struct test__event_st *e)
950*945aea22SJiri Olsa {
951*945aea22SJiri Olsa 	struct perf_evlist *evlist;
952*945aea22SJiri Olsa 	int ret;
953*945aea22SJiri Olsa 
954*945aea22SJiri Olsa 	evlist = perf_evlist__new(NULL, NULL);
955*945aea22SJiri Olsa 	if (evlist == NULL)
956*945aea22SJiri Olsa 		return -ENOMEM;
957*945aea22SJiri Olsa 
958*945aea22SJiri Olsa 	ret = parse_events(evlist, e->name, 0);
959*945aea22SJiri Olsa 	if (ret) {
960*945aea22SJiri Olsa 		pr_debug("failed to parse event '%s', err %d\n",
961*945aea22SJiri Olsa 			 e->name, ret);
962*945aea22SJiri Olsa 		return ret;
963*945aea22SJiri Olsa 	}
964*945aea22SJiri Olsa 
965*945aea22SJiri Olsa 	ret = e->check(evlist);
966*945aea22SJiri Olsa 	perf_evlist__delete(evlist);
967*945aea22SJiri Olsa 
968*945aea22SJiri Olsa 	return ret;
969*945aea22SJiri Olsa }
970*945aea22SJiri Olsa 
971*945aea22SJiri Olsa static int test_events(struct test__event_st *events, unsigned cnt)
972*945aea22SJiri Olsa {
973*945aea22SJiri Olsa 	int ret1, ret2 = 0;
974*945aea22SJiri Olsa 	unsigned i;
975*945aea22SJiri Olsa 
976*945aea22SJiri Olsa 	for (i = 0; i < cnt; i++) {
977*945aea22SJiri Olsa 		struct test__event_st *e = &events[i];
978*945aea22SJiri Olsa 
979*945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, e->name);
980*945aea22SJiri Olsa 		ret1 = test_event(e);
981*945aea22SJiri Olsa 		if (ret1)
982*945aea22SJiri Olsa 			ret2 = ret1;
983*945aea22SJiri Olsa 	}
984*945aea22SJiri Olsa 
985*945aea22SJiri Olsa 	return ret2;
986*945aea22SJiri Olsa }
987*945aea22SJiri Olsa 
988*945aea22SJiri Olsa static int test_term(struct test__term *t)
989*945aea22SJiri Olsa {
990*945aea22SJiri Olsa 	struct list_head *terms;
991*945aea22SJiri Olsa 	int ret;
992*945aea22SJiri Olsa 
993*945aea22SJiri Olsa 	terms = malloc(sizeof(*terms));
994*945aea22SJiri Olsa 	if (!terms)
995*945aea22SJiri Olsa 		return -ENOMEM;
996*945aea22SJiri Olsa 
997*945aea22SJiri Olsa 	INIT_LIST_HEAD(terms);
998*945aea22SJiri Olsa 
999*945aea22SJiri Olsa 	ret = parse_events_terms(terms, t->str);
1000*945aea22SJiri Olsa 	if (ret) {
1001*945aea22SJiri Olsa 		pr_debug("failed to parse terms '%s', err %d\n",
1002*945aea22SJiri Olsa 			 t->str , ret);
1003*945aea22SJiri Olsa 		return ret;
1004*945aea22SJiri Olsa 	}
1005*945aea22SJiri Olsa 
1006*945aea22SJiri Olsa 	ret = t->check(terms);
1007*945aea22SJiri Olsa 	parse_events__free_terms(terms);
1008*945aea22SJiri Olsa 
1009*945aea22SJiri Olsa 	return ret;
1010*945aea22SJiri Olsa }
1011*945aea22SJiri Olsa 
1012*945aea22SJiri Olsa static int test_terms(struct test__term *terms, unsigned cnt)
1013*945aea22SJiri Olsa {
1014*945aea22SJiri Olsa 	int ret = 0;
1015*945aea22SJiri Olsa 	unsigned i;
1016*945aea22SJiri Olsa 
1017*945aea22SJiri Olsa 	for (i = 0; i < cnt; i++) {
1018*945aea22SJiri Olsa 		struct test__term *t = &terms[i];
1019*945aea22SJiri Olsa 
1020*945aea22SJiri Olsa 		pr_debug("running test %d '%s'\n", i, t->str);
1021*945aea22SJiri Olsa 		ret = test_term(t);
1022*945aea22SJiri Olsa 		if (ret)
1023*945aea22SJiri Olsa 			break;
1024*945aea22SJiri Olsa 	}
1025*945aea22SJiri Olsa 
1026*945aea22SJiri Olsa 	return ret;
1027*945aea22SJiri Olsa }
1028*945aea22SJiri Olsa 
1029*945aea22SJiri Olsa static int test_pmu(void)
1030*945aea22SJiri Olsa {
1031*945aea22SJiri Olsa 	struct stat st;
1032*945aea22SJiri Olsa 	char path[PATH_MAX];
1033*945aea22SJiri Olsa 	int ret;
1034*945aea22SJiri Olsa 
1035*945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
1036*945aea22SJiri Olsa 		 sysfs_find_mountpoint());
1037*945aea22SJiri Olsa 
1038*945aea22SJiri Olsa 	ret = stat(path, &st);
1039*945aea22SJiri Olsa 	if (ret)
1040*945aea22SJiri Olsa 		pr_debug("omitting PMU cpu tests\n");
1041*945aea22SJiri Olsa 	return !ret;
1042*945aea22SJiri Olsa }
1043*945aea22SJiri Olsa 
1044*945aea22SJiri Olsa static int test_pmu_events(void)
1045*945aea22SJiri Olsa {
1046*945aea22SJiri Olsa 	struct stat st;
1047*945aea22SJiri Olsa 	char path[PATH_MAX];
1048*945aea22SJiri Olsa 	struct dirent *ent;
1049*945aea22SJiri Olsa 	DIR *dir;
1050*945aea22SJiri Olsa 	int ret;
1051*945aea22SJiri Olsa 
1052*945aea22SJiri Olsa 	snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/",
1053*945aea22SJiri Olsa 		 sysfs_find_mountpoint());
1054*945aea22SJiri Olsa 
1055*945aea22SJiri Olsa 	ret = stat(path, &st);
1056*945aea22SJiri Olsa 	if (ret) {
1057*945aea22SJiri Olsa 		pr_debug("ommiting PMU cpu events tests\n");
1058*945aea22SJiri Olsa 		return 0;
1059*945aea22SJiri Olsa 	}
1060*945aea22SJiri Olsa 
1061*945aea22SJiri Olsa 	dir = opendir(path);
1062*945aea22SJiri Olsa 	if (!dir) {
1063*945aea22SJiri Olsa 		pr_debug("can't open pmu event dir");
1064*945aea22SJiri Olsa 		return -1;
1065*945aea22SJiri Olsa 	}
1066*945aea22SJiri Olsa 
1067*945aea22SJiri Olsa 	while (!ret && (ent = readdir(dir))) {
1068*945aea22SJiri Olsa #define MAX_NAME 100
1069*945aea22SJiri Olsa 		struct test__event_st e;
1070*945aea22SJiri Olsa 		char name[MAX_NAME];
1071*945aea22SJiri Olsa 
1072*945aea22SJiri Olsa 		if (!strcmp(ent->d_name, ".") ||
1073*945aea22SJiri Olsa 		    !strcmp(ent->d_name, ".."))
1074*945aea22SJiri Olsa 			continue;
1075*945aea22SJiri Olsa 
1076*945aea22SJiri Olsa 		snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name);
1077*945aea22SJiri Olsa 
1078*945aea22SJiri Olsa 		e.name  = name;
1079*945aea22SJiri Olsa 		e.check = test__checkevent_pmu_events;
1080*945aea22SJiri Olsa 
1081*945aea22SJiri Olsa 		ret = test_event(&e);
1082*945aea22SJiri Olsa #undef MAX_NAME
1083*945aea22SJiri Olsa 	}
1084*945aea22SJiri Olsa 
1085*945aea22SJiri Olsa 	closedir(dir);
1086*945aea22SJiri Olsa 	return ret;
1087*945aea22SJiri Olsa }
1088*945aea22SJiri Olsa 
1089*945aea22SJiri Olsa int parse_events__test(void)
1090*945aea22SJiri Olsa {
1091*945aea22SJiri Olsa 	int ret1, ret2 = 0;
1092*945aea22SJiri Olsa 
1093*945aea22SJiri Olsa #define TEST_EVENTS(tests)				\
1094*945aea22SJiri Olsa do {							\
1095*945aea22SJiri Olsa 	ret1 = test_events(tests, ARRAY_SIZE(tests));	\
1096*945aea22SJiri Olsa 	if (!ret2)					\
1097*945aea22SJiri Olsa 		ret2 = ret1;				\
1098*945aea22SJiri Olsa } while (0)
1099*945aea22SJiri Olsa 
1100*945aea22SJiri Olsa 	TEST_EVENTS(test__events);
1101*945aea22SJiri Olsa 
1102*945aea22SJiri Olsa 	if (test_pmu())
1103*945aea22SJiri Olsa 		TEST_EVENTS(test__events_pmu);
1104*945aea22SJiri Olsa 
1105*945aea22SJiri Olsa 	if (test_pmu()) {
1106*945aea22SJiri Olsa 		int ret = test_pmu_events();
1107*945aea22SJiri Olsa 		if (ret)
1108*945aea22SJiri Olsa 			return ret;
1109*945aea22SJiri Olsa 	}
1110*945aea22SJiri Olsa 
1111*945aea22SJiri Olsa 	ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms));
1112*945aea22SJiri Olsa 	if (!ret2)
1113*945aea22SJiri Olsa 		ret2 = ret1;
1114*945aea22SJiri Olsa 
1115*945aea22SJiri Olsa 	return ret2;
1116*945aea22SJiri Olsa }
1117