Commit | Line | Data |
---|---|---|
f50246e2 JO |
1 | |
2 | #include "parse-events.h" | |
3 | #include "evsel.h" | |
4 | #include "evlist.h" | |
4299a549 | 5 | #include "fs.h" |
553873e1 | 6 | #include <api/fs/debugfs.h> |
c81251e8 | 7 | #include "tests.h" |
d2709c7c | 8 | #include <linux/hw_breakpoint.h> |
f50246e2 | 9 | |
30f31c0a JO |
10 | #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ |
11 | PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) | |
12 | ||
f50246e2 JO |
13 | static int test__checkevent_tracepoint(struct perf_evlist *evlist) |
14 | { | |
0c21f736 | 15 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
16 | |
17 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
8d7d8474 | 18 | TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); |
f50246e2 JO |
19 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); |
20 | TEST_ASSERT_VAL("wrong sample_type", | |
30f31c0a | 21 | PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); |
f50246e2 JO |
22 | TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); |
23 | return 0; | |
24 | } | |
25 | ||
26 | static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) | |
27 | { | |
28 | struct perf_evsel *evsel; | |
29 | ||
30 | TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); | |
8d7d8474 | 31 | TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups); |
f50246e2 | 32 | |
0050f7aa | 33 | evlist__for_each(evlist, evsel) { |
f50246e2 JO |
34 | TEST_ASSERT_VAL("wrong type", |
35 | PERF_TYPE_TRACEPOINT == evsel->attr.type); | |
36 | TEST_ASSERT_VAL("wrong sample_type", | |
30f31c0a | 37 | PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); |
f50246e2 JO |
38 | TEST_ASSERT_VAL("wrong sample_period", |
39 | 1 == evsel->attr.sample_period); | |
40 | } | |
41 | return 0; | |
42 | } | |
43 | ||
44 | static int test__checkevent_raw(struct perf_evlist *evlist) | |
45 | { | |
0c21f736 | 46 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
47 | |
48 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
49 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | |
50 | TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config); | |
51 | return 0; | |
52 | } | |
53 | ||
54 | static int test__checkevent_numeric(struct perf_evlist *evlist) | |
55 | { | |
0c21f736 | 56 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
57 | |
58 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
59 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); | |
60 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | |
61 | return 0; | |
62 | } | |
63 | ||
64 | static int test__checkevent_symbolic_name(struct perf_evlist *evlist) | |
65 | { | |
0c21f736 | 66 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
67 | |
68 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
69 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
70 | TEST_ASSERT_VAL("wrong config", | |
71 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | |
72 | return 0; | |
73 | } | |
74 | ||
75 | static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) | |
76 | { | |
0c21f736 | 77 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
78 | |
79 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
80 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
81 | TEST_ASSERT_VAL("wrong config", | |
82 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
83 | TEST_ASSERT_VAL("wrong period", | |
84 | 100000 == evsel->attr.sample_period); | |
85 | TEST_ASSERT_VAL("wrong config1", | |
86 | 0 == evsel->attr.config1); | |
87 | TEST_ASSERT_VAL("wrong config2", | |
88 | 1 == evsel->attr.config2); | |
89 | return 0; | |
90 | } | |
91 | ||
92 | static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) | |
93 | { | |
0c21f736 | 94 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
95 | |
96 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
97 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); | |
98 | TEST_ASSERT_VAL("wrong config", | |
99 | PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); | |
100 | return 0; | |
101 | } | |
102 | ||
103 | static int test__checkevent_genhw(struct perf_evlist *evlist) | |
104 | { | |
0c21f736 | 105 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
106 | |
107 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
108 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); | |
109 | TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config); | |
110 | return 0; | |
111 | } | |
112 | ||
113 | static int test__checkevent_breakpoint(struct perf_evlist *evlist) | |
114 | { | |
0c21f736 | 115 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
116 | |
117 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
118 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); | |
119 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | |
120 | TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == | |
121 | evsel->attr.bp_type); | |
122 | TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == | |
123 | evsel->attr.bp_len); | |
124 | return 0; | |
125 | } | |
126 | ||
127 | static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) | |
128 | { | |
0c21f736 | 129 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
130 | |
131 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
132 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); | |
133 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | |
134 | TEST_ASSERT_VAL("wrong bp_type", | |
135 | HW_BREAKPOINT_X == evsel->attr.bp_type); | |
136 | TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len); | |
137 | return 0; | |
138 | } | |
139 | ||
140 | static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) | |
141 | { | |
0c21f736 | 142 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
143 | |
144 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
145 | TEST_ASSERT_VAL("wrong type", | |
146 | PERF_TYPE_BREAKPOINT == evsel->attr.type); | |
147 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | |
148 | TEST_ASSERT_VAL("wrong bp_type", | |
149 | HW_BREAKPOINT_R == evsel->attr.bp_type); | |
150 | TEST_ASSERT_VAL("wrong bp_len", | |
151 | HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); | |
152 | return 0; | |
153 | } | |
154 | ||
155 | static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) | |
156 | { | |
0c21f736 | 157 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
158 | |
159 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
160 | TEST_ASSERT_VAL("wrong type", | |
161 | PERF_TYPE_BREAKPOINT == evsel->attr.type); | |
162 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | |
163 | TEST_ASSERT_VAL("wrong bp_type", | |
164 | HW_BREAKPOINT_W == evsel->attr.bp_type); | |
165 | TEST_ASSERT_VAL("wrong bp_len", | |
166 | HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); | |
167 | return 0; | |
168 | } | |
169 | ||
7582732f JO |
170 | static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) |
171 | { | |
0c21f736 | 172 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
7582732f JO |
173 | |
174 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
175 | TEST_ASSERT_VAL("wrong type", | |
176 | PERF_TYPE_BREAKPOINT == evsel->attr.type); | |
177 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | |
178 | TEST_ASSERT_VAL("wrong bp_type", | |
179 | (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type); | |
180 | TEST_ASSERT_VAL("wrong bp_len", | |
181 | HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); | |
182 | return 0; | |
183 | } | |
184 | ||
f50246e2 JO |
185 | static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) |
186 | { | |
0c21f736 | 187 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
188 | |
189 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
190 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
191 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
192 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
193 | ||
194 | return test__checkevent_tracepoint(evlist); | |
195 | } | |
196 | ||
197 | static int | |
198 | test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) | |
199 | { | |
200 | struct perf_evsel *evsel; | |
201 | ||
202 | TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); | |
203 | ||
0050f7aa | 204 | evlist__for_each(evlist, evsel) { |
f50246e2 JO |
205 | TEST_ASSERT_VAL("wrong exclude_user", |
206 | !evsel->attr.exclude_user); | |
207 | TEST_ASSERT_VAL("wrong exclude_kernel", | |
208 | evsel->attr.exclude_kernel); | |
209 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
210 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
211 | } | |
212 | ||
213 | return test__checkevent_tracepoint_multi(evlist); | |
214 | } | |
215 | ||
216 | static int test__checkevent_raw_modifier(struct perf_evlist *evlist) | |
217 | { | |
0c21f736 | 218 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
219 | |
220 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
221 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
222 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
223 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | |
224 | ||
225 | return test__checkevent_raw(evlist); | |
226 | } | |
227 | ||
228 | static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) | |
229 | { | |
0c21f736 | 230 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
231 | |
232 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
233 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
234 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
235 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | |
236 | ||
237 | return test__checkevent_numeric(evlist); | |
238 | } | |
239 | ||
240 | static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) | |
241 | { | |
0c21f736 | 242 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
243 | |
244 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
245 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
246 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
247 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
248 | ||
249 | return test__checkevent_symbolic_name(evlist); | |
250 | } | |
251 | ||
252 | static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) | |
253 | { | |
0c21f736 | 254 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
255 | |
256 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
257 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
258 | ||
259 | return test__checkevent_symbolic_name(evlist); | |
260 | } | |
261 | ||
262 | static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) | |
263 | { | |
0c21f736 | 264 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
265 | |
266 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
267 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
268 | ||
269 | return test__checkevent_symbolic_name(evlist); | |
270 | } | |
271 | ||
272 | static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) | |
273 | { | |
0c21f736 | 274 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
275 | |
276 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
277 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
278 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
279 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
280 | ||
281 | return test__checkevent_symbolic_alias(evlist); | |
282 | } | |
283 | ||
284 | static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) | |
285 | { | |
0c21f736 | 286 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
287 | |
288 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
289 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
290 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
291 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | |
292 | ||
293 | return test__checkevent_genhw(evlist); | |
294 | } | |
295 | ||
296 | static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) | |
297 | { | |
0c21f736 | 298 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 | 299 | |
f50246e2 JO |
300 | |
301 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
302 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
303 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
304 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
287e74aa | 305 | TEST_ASSERT_VAL("wrong name", |
ac2ba9f3 | 306 | !strcmp(perf_evsel__name(evsel), "mem:0:u")); |
f50246e2 JO |
307 | |
308 | return test__checkevent_breakpoint(evlist); | |
309 | } | |
310 | ||
311 | static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) | |
312 | { | |
0c21f736 | 313 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
314 | |
315 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
316 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
317 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
318 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
287e74aa | 319 | TEST_ASSERT_VAL("wrong name", |
ac2ba9f3 | 320 | !strcmp(perf_evsel__name(evsel), "mem:0:x:k")); |
f50246e2 JO |
321 | |
322 | return test__checkevent_breakpoint_x(evlist); | |
323 | } | |
324 | ||
325 | static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) | |
326 | { | |
0c21f736 | 327 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
328 | |
329 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
330 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
331 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
332 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | |
287e74aa | 333 | TEST_ASSERT_VAL("wrong name", |
ac2ba9f3 | 334 | !strcmp(perf_evsel__name(evsel), "mem:0:r:hp")); |
f50246e2 JO |
335 | |
336 | return test__checkevent_breakpoint_r(evlist); | |
337 | } | |
338 | ||
339 | static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) | |
340 | { | |
0c21f736 | 341 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
342 | |
343 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
344 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
345 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
346 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | |
287e74aa | 347 | TEST_ASSERT_VAL("wrong name", |
ac2ba9f3 | 348 | !strcmp(perf_evsel__name(evsel), "mem:0:w:up")); |
f50246e2 JO |
349 | |
350 | return test__checkevent_breakpoint_w(evlist); | |
351 | } | |
352 | ||
7582732f JO |
353 | static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) |
354 | { | |
0c21f736 | 355 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
7582732f JO |
356 | |
357 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
358 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
359 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
360 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | |
287e74aa | 361 | TEST_ASSERT_VAL("wrong name", |
ac2ba9f3 | 362 | !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp")); |
7582732f JO |
363 | |
364 | return test__checkevent_breakpoint_rw(evlist); | |
365 | } | |
366 | ||
f50246e2 JO |
367 | static int test__checkevent_pmu(struct perf_evlist *evlist) |
368 | { | |
369 | ||
0c21f736 | 370 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
371 | |
372 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | |
373 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | |
374 | TEST_ASSERT_VAL("wrong config", 10 == evsel->attr.config); | |
375 | TEST_ASSERT_VAL("wrong config1", 1 == evsel->attr.config1); | |
376 | TEST_ASSERT_VAL("wrong config2", 3 == evsel->attr.config2); | |
377 | TEST_ASSERT_VAL("wrong period", 1000 == evsel->attr.sample_period); | |
378 | ||
379 | return 0; | |
380 | } | |
381 | ||
382 | static int test__checkevent_list(struct perf_evlist *evlist) | |
383 | { | |
0c21f736 | 384 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
f50246e2 JO |
385 | |
386 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | |
387 | ||
388 | /* r1 */ | |
f50246e2 JO |
389 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); |
390 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | |
391 | TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); | |
392 | TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2); | |
393 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
394 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
395 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
396 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
397 | ||
398 | /* syscalls:sys_enter_open:k */ | |
0c21f736 | 399 | evsel = perf_evsel__next(evsel); |
f50246e2 JO |
400 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); |
401 | TEST_ASSERT_VAL("wrong sample_type", | |
30f31c0a | 402 | PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); |
f50246e2 JO |
403 | TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); |
404 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
405 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
406 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
407 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
408 | ||
409 | /* 1:1:hp */ | |
0c21f736 | 410 | evsel = perf_evsel__next(evsel); |
f50246e2 JO |
411 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); |
412 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | |
413 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
414 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
415 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
416 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | |
417 | ||
418 | return 0; | |
419 | } | |
420 | ||
6b5fc39b JO |
421 | static int test__checkevent_pmu_name(struct perf_evlist *evlist) |
422 | { | |
0c21f736 | 423 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
6b5fc39b | 424 | |
7a25b2d3 | 425 | /* cpu/config=1,name=krava/u */ |
6b5fc39b JO |
426 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); |
427 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | |
428 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | |
22c8b843 | 429 | TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); |
6b5fc39b | 430 | |
7a25b2d3 | 431 | /* cpu/config=2/u" */ |
0c21f736 | 432 | evsel = perf_evsel__next(evsel); |
6b5fc39b JO |
433 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); |
434 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | |
435 | TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); | |
7a25b2d3 | 436 | TEST_ASSERT_VAL("wrong name", |
ac2ba9f3 | 437 | !strcmp(perf_evsel__name(evsel), "cpu/config=2/u")); |
6b5fc39b JO |
438 | |
439 | return 0; | |
440 | } | |
441 | ||
3f3a2064 JO |
442 | static int test__checkevent_pmu_events(struct perf_evlist *evlist) |
443 | { | |
9a354cdc | 444 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
3f3a2064 | 445 | |
3f3a2064 JO |
446 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
447 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | |
448 | TEST_ASSERT_VAL("wrong exclude_user", | |
449 | !evsel->attr.exclude_user); | |
450 | TEST_ASSERT_VAL("wrong exclude_kernel", | |
451 | evsel->attr.exclude_kernel); | |
452 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
453 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
c9ee780f | 454 | TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); |
3f3a2064 JO |
455 | |
456 | return 0; | |
457 | } | |
458 | ||
4429392e JO |
459 | static int test__checkterms_simple(struct list_head *terms) |
460 | { | |
6cee6cd3 | 461 | struct parse_events_term *term; |
4429392e JO |
462 | |
463 | /* config=10 */ | |
6cee6cd3 | 464 | term = list_entry(terms->next, struct parse_events_term, list); |
4429392e JO |
465 | TEST_ASSERT_VAL("wrong type term", |
466 | term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG); | |
467 | TEST_ASSERT_VAL("wrong type val", | |
468 | term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); | |
469 | TEST_ASSERT_VAL("wrong val", term->val.num == 10); | |
470 | TEST_ASSERT_VAL("wrong config", !term->config); | |
471 | ||
472 | /* config1 */ | |
6cee6cd3 | 473 | term = list_entry(term->list.next, struct parse_events_term, list); |
4429392e JO |
474 | TEST_ASSERT_VAL("wrong type term", |
475 | term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG1); | |
476 | TEST_ASSERT_VAL("wrong type val", | |
477 | term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); | |
478 | TEST_ASSERT_VAL("wrong val", term->val.num == 1); | |
479 | TEST_ASSERT_VAL("wrong config", !term->config); | |
480 | ||
481 | /* config2=3 */ | |
6cee6cd3 | 482 | term = list_entry(term->list.next, struct parse_events_term, list); |
4429392e JO |
483 | TEST_ASSERT_VAL("wrong type term", |
484 | term->type_term == PARSE_EVENTS__TERM_TYPE_CONFIG2); | |
485 | TEST_ASSERT_VAL("wrong type val", | |
486 | term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); | |
487 | TEST_ASSERT_VAL("wrong val", term->val.num == 3); | |
488 | TEST_ASSERT_VAL("wrong config", !term->config); | |
489 | ||
490 | /* umask=1*/ | |
6cee6cd3 | 491 | term = list_entry(term->list.next, struct parse_events_term, list); |
4429392e JO |
492 | TEST_ASSERT_VAL("wrong type term", |
493 | term->type_term == PARSE_EVENTS__TERM_TYPE_USER); | |
494 | TEST_ASSERT_VAL("wrong type val", | |
495 | term->type_val == PARSE_EVENTS__TERM_TYPE_NUM); | |
496 | TEST_ASSERT_VAL("wrong val", term->val.num == 1); | |
497 | TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask")); | |
498 | ||
499 | return 0; | |
500 | } | |
501 | ||
905f5ee2 JO |
502 | static int test__group1(struct perf_evlist *evlist) |
503 | { | |
504 | struct perf_evsel *evsel, *leader; | |
505 | ||
506 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | |
8d7d8474 | 507 | TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); |
905f5ee2 JO |
508 | |
509 | /* instructions:k */ | |
0c21f736 | 510 | evsel = leader = perf_evlist__first(evlist); |
905f5ee2 JO |
511 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
512 | TEST_ASSERT_VAL("wrong config", | |
513 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | |
514 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
515 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
516 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
517 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
518 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
519 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
823254ed | 520 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
8d7d8474 NK |
521 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
522 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
a9f93f97 | 523 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
524 | |
525 | /* cycles:upp */ | |
0c21f736 | 526 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
527 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
528 | TEST_ASSERT_VAL("wrong config", | |
529 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
530 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
531 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
532 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
42be7398 JO |
533 | /* use of precise requires exclude_guest */ |
534 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
905f5ee2 JO |
535 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); |
536 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); | |
537 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
8d7d8474 | 538 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
a9f93f97 | 539 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
540 | |
541 | return 0; | |
542 | } | |
543 | ||
544 | static int test__group2(struct perf_evlist *evlist) | |
545 | { | |
546 | struct perf_evsel *evsel, *leader; | |
547 | ||
548 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | |
8d7d8474 | 549 | TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); |
905f5ee2 JO |
550 | |
551 | /* faults + :ku modifier */ | |
0c21f736 | 552 | evsel = leader = perf_evlist__first(evlist); |
905f5ee2 JO |
553 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); |
554 | TEST_ASSERT_VAL("wrong config", | |
555 | PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); | |
556 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
557 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
558 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
559 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
560 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
561 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
823254ed | 562 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
8d7d8474 NK |
563 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
564 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
a9f93f97 | 565 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
566 | |
567 | /* cache-references + :u modifier */ | |
0c21f736 | 568 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
569 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
570 | TEST_ASSERT_VAL("wrong config", | |
571 | PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config); | |
572 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
573 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
574 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
5a30a99f | 575 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); |
905f5ee2 JO |
576 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); |
577 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
578 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
8d7d8474 | 579 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
a9f93f97 | 580 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
581 | |
582 | /* cycles:k */ | |
0c21f736 | 583 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
584 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
585 | TEST_ASSERT_VAL("wrong config", | |
586 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
587 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
588 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
589 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
590 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
591 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
592 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
823254ed | 593 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
a9f93f97 | 594 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
595 | |
596 | return 0; | |
597 | } | |
598 | ||
1d037ca1 | 599 | static int test__group3(struct perf_evlist *evlist __maybe_unused) |
905f5ee2 JO |
600 | { |
601 | struct perf_evsel *evsel, *leader; | |
602 | ||
603 | TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); | |
8d7d8474 | 604 | TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); |
905f5ee2 JO |
605 | |
606 | /* group1 syscalls:sys_enter_open:H */ | |
0c21f736 | 607 | evsel = leader = perf_evlist__first(evlist); |
905f5ee2 JO |
608 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); |
609 | TEST_ASSERT_VAL("wrong sample_type", | |
610 | PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); | |
611 | TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); | |
612 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
613 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
614 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
615 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
616 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
617 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
823254ed | 618 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
905f5ee2 JO |
619 | TEST_ASSERT_VAL("wrong group name", |
620 | !strcmp(leader->group_name, "group1")); | |
8d7d8474 NK |
621 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
622 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
a9f93f97 | 623 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
624 | |
625 | /* group1 cycles:kppp */ | |
0c21f736 | 626 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
627 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
628 | TEST_ASSERT_VAL("wrong config", | |
629 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
630 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
631 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
632 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
42be7398 JO |
633 | /* use of precise requires exclude_guest */ |
634 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
905f5ee2 JO |
635 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); |
636 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3); | |
637 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
638 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
8d7d8474 | 639 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
a9f93f97 | 640 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
641 | |
642 | /* group2 cycles + G modifier */ | |
0c21f736 | 643 | evsel = leader = perf_evsel__next(evsel); |
905f5ee2 JO |
644 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
645 | TEST_ASSERT_VAL("wrong config", | |
646 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
647 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
648 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
649 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
650 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
651 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
652 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
823254ed | 653 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
905f5ee2 JO |
654 | TEST_ASSERT_VAL("wrong group name", |
655 | !strcmp(leader->group_name, "group2")); | |
8d7d8474 NK |
656 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
657 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
a9f93f97 | 658 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
659 | |
660 | /* group2 1:3 + G modifier */ | |
0c21f736 | 661 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
662 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); |
663 | TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config); | |
664 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
665 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
666 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
667 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
668 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
669 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
670 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
8d7d8474 | 671 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
a9f93f97 | 672 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
673 | |
674 | /* instructions:u */ | |
0c21f736 | 675 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
676 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
677 | TEST_ASSERT_VAL("wrong config", | |
678 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | |
679 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
680 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
681 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
682 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
683 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
684 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
823254ed | 685 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
a9f93f97 | 686 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
687 | |
688 | return 0; | |
689 | } | |
690 | ||
1d037ca1 | 691 | static int test__group4(struct perf_evlist *evlist __maybe_unused) |
905f5ee2 JO |
692 | { |
693 | struct perf_evsel *evsel, *leader; | |
694 | ||
695 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | |
8d7d8474 | 696 | TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); |
905f5ee2 JO |
697 | |
698 | /* cycles:u + p */ | |
0c21f736 | 699 | evsel = leader = perf_evlist__first(evlist); |
905f5ee2 JO |
700 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
701 | TEST_ASSERT_VAL("wrong config", | |
702 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
703 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
704 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
705 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
42be7398 JO |
706 | /* use of precise requires exclude_guest */ |
707 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
905f5ee2 JO |
708 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); |
709 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1); | |
710 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
823254ed | 711 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
8d7d8474 NK |
712 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
713 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
a9f93f97 | 714 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
715 | |
716 | /* instructions:kp + p */ | |
0c21f736 | 717 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
718 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
719 | TEST_ASSERT_VAL("wrong config", | |
720 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | |
721 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | |
722 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
723 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
42be7398 JO |
724 | /* use of precise requires exclude_guest */ |
725 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
905f5ee2 JO |
726 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); |
727 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); | |
728 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
8d7d8474 | 729 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
a9f93f97 | 730 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
731 | |
732 | return 0; | |
733 | } | |
734 | ||
1d037ca1 | 735 | static int test__group5(struct perf_evlist *evlist __maybe_unused) |
905f5ee2 JO |
736 | { |
737 | struct perf_evsel *evsel, *leader; | |
738 | ||
739 | TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); | |
8d7d8474 | 740 | TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups); |
905f5ee2 JO |
741 | |
742 | /* cycles + G */ | |
0c21f736 | 743 | evsel = leader = perf_evlist__first(evlist); |
905f5ee2 JO |
744 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
745 | TEST_ASSERT_VAL("wrong config", | |
746 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
747 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
748 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
749 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
750 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
751 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
752 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
753 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
823254ed | 754 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
8d7d8474 NK |
755 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
756 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
a9f93f97 | 757 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
758 | |
759 | /* instructions + G */ | |
0c21f736 | 760 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
761 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
762 | TEST_ASSERT_VAL("wrong config", | |
763 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | |
764 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
765 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
766 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
767 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
768 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
769 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
770 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
8d7d8474 | 771 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
a9f93f97 | 772 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
773 | |
774 | /* cycles:G */ | |
0c21f736 | 775 | evsel = leader = perf_evsel__next(evsel); |
905f5ee2 JO |
776 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
777 | TEST_ASSERT_VAL("wrong config", | |
778 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
779 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
780 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
781 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
782 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
783 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
784 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
785 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
823254ed | 786 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
8d7d8474 NK |
787 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
788 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
a9f93f97 | 789 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); |
905f5ee2 JO |
790 | |
791 | /* instructions:G */ | |
0c21f736 | 792 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
793 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
794 | TEST_ASSERT_VAL("wrong config", | |
795 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | |
796 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
797 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
798 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
799 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
800 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
801 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
802 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
8d7d8474 | 803 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
905f5ee2 JO |
804 | |
805 | /* cycles */ | |
0c21f736 | 806 | evsel = perf_evsel__next(evsel); |
905f5ee2 JO |
807 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
808 | TEST_ASSERT_VAL("wrong config", | |
809 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
810 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
811 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
812 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
813 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
814 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
815 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
823254ed | 816 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
905f5ee2 JO |
817 | |
818 | return 0; | |
819 | } | |
820 | ||
5a30a99f JO |
821 | static int test__group_gh1(struct perf_evlist *evlist) |
822 | { | |
823 | struct perf_evsel *evsel, *leader; | |
824 | ||
825 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | |
826 | TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); | |
827 | ||
828 | /* cycles + :H group modifier */ | |
829 | evsel = leader = perf_evlist__first(evlist); | |
830 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
831 | TEST_ASSERT_VAL("wrong config", | |
832 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
833 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
834 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
835 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
836 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
837 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
838 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
839 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
840 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | |
841 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | |
842 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
843 | ||
844 | /* cache-misses:G + :H group modifier */ | |
845 | evsel = perf_evsel__next(evsel); | |
846 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
847 | TEST_ASSERT_VAL("wrong config", | |
848 | PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); | |
849 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
850 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
851 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
852 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
853 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
854 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
855 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
856 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | |
857 | ||
858 | return 0; | |
859 | } | |
860 | ||
861 | static int test__group_gh2(struct perf_evlist *evlist) | |
862 | { | |
863 | struct perf_evsel *evsel, *leader; | |
864 | ||
865 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | |
866 | TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); | |
867 | ||
868 | /* cycles + :G group modifier */ | |
869 | evsel = leader = perf_evlist__first(evlist); | |
870 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
871 | TEST_ASSERT_VAL("wrong config", | |
872 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
873 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
874 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
875 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
876 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
877 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
878 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
879 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
880 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | |
881 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | |
882 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
883 | ||
884 | /* cache-misses:H + :G group modifier */ | |
885 | evsel = perf_evsel__next(evsel); | |
886 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
887 | TEST_ASSERT_VAL("wrong config", | |
888 | PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); | |
889 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
890 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
891 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
892 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
893 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
894 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
895 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
896 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | |
897 | ||
898 | return 0; | |
899 | } | |
900 | ||
901 | static int test__group_gh3(struct perf_evlist *evlist) | |
902 | { | |
903 | struct perf_evsel *evsel, *leader; | |
904 | ||
905 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | |
906 | TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); | |
907 | ||
908 | /* cycles:G + :u group modifier */ | |
909 | evsel = leader = perf_evlist__first(evlist); | |
910 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
911 | TEST_ASSERT_VAL("wrong config", | |
912 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
913 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
914 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
915 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
916 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
917 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
918 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
919 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
920 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | |
921 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | |
922 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
923 | ||
924 | /* cache-misses:H + :u group modifier */ | |
925 | evsel = perf_evsel__next(evsel); | |
926 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
927 | TEST_ASSERT_VAL("wrong config", | |
928 | PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); | |
929 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
930 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
931 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
932 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
933 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
934 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
935 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
936 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | |
937 | ||
938 | return 0; | |
939 | } | |
940 | ||
941 | static int test__group_gh4(struct perf_evlist *evlist) | |
942 | { | |
943 | struct perf_evsel *evsel, *leader; | |
944 | ||
945 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | |
946 | TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups); | |
947 | ||
948 | /* cycles:G + :uG group modifier */ | |
949 | evsel = leader = perf_evlist__first(evlist); | |
950 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
951 | TEST_ASSERT_VAL("wrong config", | |
952 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
953 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
954 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
955 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
956 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
957 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | |
958 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
959 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
960 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | |
961 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | |
962 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | |
963 | ||
964 | /* cache-misses:H + :uG group modifier */ | |
965 | evsel = perf_evsel__next(evsel); | |
966 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
967 | TEST_ASSERT_VAL("wrong config", | |
968 | PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); | |
969 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
970 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
971 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
972 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | |
973 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
974 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
975 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
976 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | |
977 | ||
978 | return 0; | |
979 | } | |
980 | ||
a9f93f97 JO |
981 | static int test__leader_sample1(struct perf_evlist *evlist) |
982 | { | |
983 | struct perf_evsel *evsel, *leader; | |
984 | ||
985 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | |
986 | ||
987 | /* cycles - sampling group leader */ | |
988 | evsel = leader = perf_evlist__first(evlist); | |
989 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
990 | TEST_ASSERT_VAL("wrong config", | |
991 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
992 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
993 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
994 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
995 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
996 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
997 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
998 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
999 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
1000 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | |
1001 | ||
1002 | /* cache-misses - not sampling */ | |
1003 | evsel = perf_evsel__next(evsel); | |
1004 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
1005 | TEST_ASSERT_VAL("wrong config", | |
1006 | PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); | |
1007 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
1008 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
1009 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
1010 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
1011 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
1012 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
1013 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
1014 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | |
1015 | ||
1016 | /* branch-misses - not sampling */ | |
1017 | evsel = perf_evsel__next(evsel); | |
1018 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
1019 | TEST_ASSERT_VAL("wrong config", | |
1020 | PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); | |
1021 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
1022 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | |
1023 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | |
1024 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
1025 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
1026 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
1027 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
1028 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
1029 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | |
1030 | ||
1031 | return 0; | |
1032 | } | |
1033 | ||
1034 | static int test__leader_sample2(struct perf_evlist *evlist __maybe_unused) | |
1035 | { | |
1036 | struct perf_evsel *evsel, *leader; | |
1037 | ||
1038 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | |
1039 | ||
1040 | /* instructions - sampling group leader */ | |
1041 | evsel = leader = perf_evlist__first(evlist); | |
1042 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
1043 | TEST_ASSERT_VAL("wrong config", | |
1044 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | |
1045 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
1046 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
1047 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
1048 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
1049 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
1050 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
1051 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
1052 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
1053 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | |
1054 | ||
1055 | /* branch-misses - not sampling */ | |
1056 | evsel = perf_evsel__next(evsel); | |
1057 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
1058 | TEST_ASSERT_VAL("wrong config", | |
1059 | PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); | |
1060 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
1061 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
1062 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
1063 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | |
1064 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | |
1065 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | |
1066 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
1067 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
1068 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | |
1069 | ||
1070 | return 0; | |
1071 | } | |
1072 | ||
c9ee780f ME |
1073 | static int test__checkevent_pinned_modifier(struct perf_evlist *evlist) |
1074 | { | |
1075 | struct perf_evsel *evsel = perf_evlist__first(evlist); | |
1076 | ||
1077 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | |
1078 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | |
1079 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | |
1080 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | |
1081 | TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned); | |
1082 | ||
1083 | return test__checkevent_symbolic_name(evlist); | |
1084 | } | |
1085 | ||
1086 | static int test__pinned_group(struct perf_evlist *evlist) | |
1087 | { | |
1088 | struct perf_evsel *evsel, *leader; | |
1089 | ||
1090 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | |
1091 | ||
1092 | /* cycles - group leader */ | |
1093 | evsel = leader = perf_evlist__first(evlist); | |
1094 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
1095 | TEST_ASSERT_VAL("wrong config", | |
1096 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | |
1097 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | |
1098 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | |
1099 | TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned); | |
1100 | ||
1101 | /* cache-misses - can not be pinned, but will go on with the leader */ | |
1102 | evsel = perf_evsel__next(evsel); | |
1103 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | |
1104 | TEST_ASSERT_VAL("wrong config", | |
1105 | PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); | |
1106 | TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); | |
1107 | ||
1108 | /* branch-misses - ditto */ | |
1109 | evsel = perf_evsel__next(evsel); | |
1110 | TEST_ASSERT_VAL("wrong config", | |
1111 | PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); | |
1112 | TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); | |
1113 | ||
1114 | return 0; | |
1115 | } | |
1116 | ||
82ce75d9 JO |
1117 | static int count_tracepoints(void) |
1118 | { | |
1119 | char events_path[PATH_MAX]; | |
1120 | struct dirent *events_ent; | |
1121 | DIR *events_dir; | |
1122 | int cnt = 0; | |
1123 | ||
1124 | scnprintf(events_path, PATH_MAX, "%s/tracing/events", | |
1125 | debugfs_find_mountpoint()); | |
1126 | ||
1127 | events_dir = opendir(events_path); | |
1128 | ||
1129 | TEST_ASSERT_VAL("Can't open events dir", events_dir); | |
1130 | ||
1131 | while ((events_ent = readdir(events_dir))) { | |
1132 | char sys_path[PATH_MAX]; | |
1133 | struct dirent *sys_ent; | |
1134 | DIR *sys_dir; | |
1135 | ||
1136 | if (!strcmp(events_ent->d_name, ".") | |
1137 | || !strcmp(events_ent->d_name, "..") | |
1138 | || !strcmp(events_ent->d_name, "enable") | |
1139 | || !strcmp(events_ent->d_name, "header_event") | |
1140 | || !strcmp(events_ent->d_name, "header_page")) | |
1141 | continue; | |
1142 | ||
1143 | scnprintf(sys_path, PATH_MAX, "%s/%s", | |
1144 | events_path, events_ent->d_name); | |
1145 | ||
1146 | sys_dir = opendir(sys_path); | |
1147 | TEST_ASSERT_VAL("Can't open sys dir", sys_dir); | |
1148 | ||
1149 | while ((sys_ent = readdir(sys_dir))) { | |
1150 | if (!strcmp(sys_ent->d_name, ".") | |
1151 | || !strcmp(sys_ent->d_name, "..") | |
1152 | || !strcmp(sys_ent->d_name, "enable") | |
1153 | || !strcmp(sys_ent->d_name, "filter")) | |
1154 | continue; | |
1155 | ||
1156 | cnt++; | |
1157 | } | |
1158 | ||
1159 | closedir(sys_dir); | |
1160 | } | |
1161 | ||
1162 | closedir(events_dir); | |
1163 | return cnt; | |
1164 | } | |
1165 | ||
1166 | static int test__all_tracepoints(struct perf_evlist *evlist) | |
1167 | { | |
1168 | TEST_ASSERT_VAL("wrong events count", | |
1169 | count_tracepoints() == evlist->nr_entries); | |
1170 | ||
1171 | return test__checkevent_tracepoint_multi(evlist); | |
1172 | } | |
1173 | ||
23b6339b | 1174 | struct evlist_test { |
f50246e2 JO |
1175 | const char *name; |
1176 | __u32 type; | |
1177 | int (*check)(struct perf_evlist *evlist); | |
1178 | }; | |
1179 | ||
23b6339b | 1180 | static struct evlist_test test__events[] = { |
f50246e2 JO |
1181 | [0] = { |
1182 | .name = "syscalls:sys_enter_open", | |
1183 | .check = test__checkevent_tracepoint, | |
1184 | }, | |
1185 | [1] = { | |
1186 | .name = "syscalls:*", | |
1187 | .check = test__checkevent_tracepoint_multi, | |
1188 | }, | |
1189 | [2] = { | |
1190 | .name = "r1a", | |
1191 | .check = test__checkevent_raw, | |
1192 | }, | |
1193 | [3] = { | |
1194 | .name = "1:1", | |
1195 | .check = test__checkevent_numeric, | |
1196 | }, | |
1197 | [4] = { | |
1198 | .name = "instructions", | |
1199 | .check = test__checkevent_symbolic_name, | |
1200 | }, | |
1201 | [5] = { | |
1202 | .name = "cycles/period=100000,config2/", | |
1203 | .check = test__checkevent_symbolic_name_config, | |
1204 | }, | |
1205 | [6] = { | |
1206 | .name = "faults", | |
1207 | .check = test__checkevent_symbolic_alias, | |
1208 | }, | |
1209 | [7] = { | |
1210 | .name = "L1-dcache-load-miss", | |
1211 | .check = test__checkevent_genhw, | |
1212 | }, | |
1213 | [8] = { | |
1214 | .name = "mem:0", | |
1215 | .check = test__checkevent_breakpoint, | |
1216 | }, | |
1217 | [9] = { | |
1218 | .name = "mem:0:x", | |
1219 | .check = test__checkevent_breakpoint_x, | |
1220 | }, | |
1221 | [10] = { | |
1222 | .name = "mem:0:r", | |
1223 | .check = test__checkevent_breakpoint_r, | |
1224 | }, | |
1225 | [11] = { | |
1226 | .name = "mem:0:w", | |
1227 | .check = test__checkevent_breakpoint_w, | |
1228 | }, | |
1229 | [12] = { | |
1230 | .name = "syscalls:sys_enter_open:k", | |
1231 | .check = test__checkevent_tracepoint_modifier, | |
1232 | }, | |
1233 | [13] = { | |
1234 | .name = "syscalls:*:u", | |
1235 | .check = test__checkevent_tracepoint_multi_modifier, | |
1236 | }, | |
1237 | [14] = { | |
1238 | .name = "r1a:kp", | |
1239 | .check = test__checkevent_raw_modifier, | |
1240 | }, | |
1241 | [15] = { | |
1242 | .name = "1:1:hp", | |
1243 | .check = test__checkevent_numeric_modifier, | |
1244 | }, | |
1245 | [16] = { | |
1246 | .name = "instructions:h", | |
1247 | .check = test__checkevent_symbolic_name_modifier, | |
1248 | }, | |
1249 | [17] = { | |
1250 | .name = "faults:u", | |
1251 | .check = test__checkevent_symbolic_alias_modifier, | |
1252 | }, | |
1253 | [18] = { | |
1254 | .name = "L1-dcache-load-miss:kp", | |
1255 | .check = test__checkevent_genhw_modifier, | |
1256 | }, | |
1257 | [19] = { | |
1258 | .name = "mem:0:u", | |
1259 | .check = test__checkevent_breakpoint_modifier, | |
1260 | }, | |
1261 | [20] = { | |
1262 | .name = "mem:0:x:k", | |
1263 | .check = test__checkevent_breakpoint_x_modifier, | |
1264 | }, | |
1265 | [21] = { | |
1266 | .name = "mem:0:r:hp", | |
1267 | .check = test__checkevent_breakpoint_r_modifier, | |
1268 | }, | |
1269 | [22] = { | |
1270 | .name = "mem:0:w:up", | |
1271 | .check = test__checkevent_breakpoint_w_modifier, | |
1272 | }, | |
1273 | [23] = { | |
1274 | .name = "r1,syscalls:sys_enter_open:k,1:1:hp", | |
1275 | .check = test__checkevent_list, | |
1276 | }, | |
1277 | [24] = { | |
1278 | .name = "instructions:G", | |
1279 | .check = test__checkevent_exclude_host_modifier, | |
1280 | }, | |
1281 | [25] = { | |
1282 | .name = "instructions:H", | |
1283 | .check = test__checkevent_exclude_guest_modifier, | |
1284 | }, | |
7582732f JO |
1285 | [26] = { |
1286 | .name = "mem:0:rw", | |
1287 | .check = test__checkevent_breakpoint_rw, | |
1288 | }, | |
1289 | [27] = { | |
1290 | .name = "mem:0:rw:kp", | |
1291 | .check = test__checkevent_breakpoint_rw_modifier, | |
1292 | }, | |
905f5ee2 JO |
1293 | [28] = { |
1294 | .name = "{instructions:k,cycles:upp}", | |
1295 | .check = test__group1, | |
1296 | }, | |
1297 | [29] = { | |
1298 | .name = "{faults:k,cache-references}:u,cycles:k", | |
1299 | .check = test__group2, | |
1300 | }, | |
1301 | [30] = { | |
1302 | .name = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", | |
1303 | .check = test__group3, | |
1304 | }, | |
1305 | [31] = { | |
1306 | .name = "{cycles:u,instructions:kp}:p", | |
1307 | .check = test__group4, | |
1308 | }, | |
1309 | [32] = { | |
1310 | .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", | |
1311 | .check = test__group5, | |
1312 | }, | |
82ce75d9 JO |
1313 | [33] = { |
1314 | .name = "*:*", | |
1315 | .check = test__all_tracepoints, | |
1316 | }, | |
5a30a99f JO |
1317 | [34] = { |
1318 | .name = "{cycles,cache-misses:G}:H", | |
1319 | .check = test__group_gh1, | |
1320 | }, | |
1321 | [35] = { | |
1322 | .name = "{cycles,cache-misses:H}:G", | |
1323 | .check = test__group_gh2, | |
1324 | }, | |
1325 | [36] = { | |
1326 | .name = "{cycles:G,cache-misses:H}:u", | |
1327 | .check = test__group_gh3, | |
1328 | }, | |
1329 | [37] = { | |
1330 | .name = "{cycles:G,cache-misses:H}:uG", | |
1331 | .check = test__group_gh4, | |
1332 | }, | |
a9f93f97 JO |
1333 | [38] = { |
1334 | .name = "{cycles,cache-misses,branch-misses}:S", | |
1335 | .check = test__leader_sample1, | |
1336 | }, | |
1337 | [39] = { | |
1338 | .name = "{instructions,branch-misses}:Su", | |
1339 | .check = test__leader_sample2, | |
1340 | }, | |
c9ee780f ME |
1341 | [40] = { |
1342 | .name = "instructions:uDp", | |
1343 | .check = test__checkevent_pinned_modifier, | |
1344 | }, | |
1345 | [41] = { | |
1346 | .name = "{cycles,cache-misses,branch-misses}:D", | |
1347 | .check = test__pinned_group, | |
1348 | }, | |
f50246e2 JO |
1349 | }; |
1350 | ||
23b6339b | 1351 | static struct evlist_test test__events_pmu[] = { |
f50246e2 JO |
1352 | [0] = { |
1353 | .name = "cpu/config=10,config1,config2=3,period=1000/u", | |
1354 | .check = test__checkevent_pmu, | |
1355 | }, | |
6b5fc39b JO |
1356 | [1] = { |
1357 | .name = "cpu/config=1,name=krava/u,cpu/config=2/u", | |
1358 | .check = test__checkevent_pmu_name, | |
1359 | }, | |
f50246e2 JO |
1360 | }; |
1361 | ||
23b6339b | 1362 | struct terms_test { |
4429392e JO |
1363 | const char *str; |
1364 | __u32 type; | |
1365 | int (*check)(struct list_head *terms); | |
1366 | }; | |
1367 | ||
23b6339b | 1368 | static struct terms_test test__terms[] = { |
4429392e JO |
1369 | [0] = { |
1370 | .str = "config=10,config1,config2=3,umask=1", | |
1371 | .check = test__checkterms_simple, | |
1372 | }, | |
1373 | }; | |
1374 | ||
23b6339b | 1375 | static int test_event(struct evlist_test *e) |
f50246e2 JO |
1376 | { |
1377 | struct perf_evlist *evlist; | |
1378 | int ret; | |
1379 | ||
334fe7a3 | 1380 | evlist = perf_evlist__new(); |
f50246e2 JO |
1381 | if (evlist == NULL) |
1382 | return -ENOMEM; | |
1383 | ||
d8f7bbc9 | 1384 | ret = parse_events(evlist, e->name); |
f50246e2 JO |
1385 | if (ret) { |
1386 | pr_debug("failed to parse event '%s', err %d\n", | |
1387 | e->name, ret); | |
2d4352c0 ACM |
1388 | } else { |
1389 | ret = e->check(evlist); | |
f50246e2 | 1390 | } |
2d4352c0 | 1391 | |
f50246e2 JO |
1392 | perf_evlist__delete(evlist); |
1393 | ||
1394 | return ret; | |
1395 | } | |
1396 | ||
23b6339b | 1397 | static int test_events(struct evlist_test *events, unsigned cnt) |
f50246e2 | 1398 | { |
9bfbbc6d | 1399 | int ret1, ret2 = 0; |
f50246e2 JO |
1400 | unsigned i; |
1401 | ||
1402 | for (i = 0; i < cnt; i++) { | |
23b6339b | 1403 | struct evlist_test *e = &events[i]; |
f50246e2 JO |
1404 | |
1405 | pr_debug("running test %d '%s'\n", i, e->name); | |
9bfbbc6d RR |
1406 | ret1 = test_event(e); |
1407 | if (ret1) | |
1408 | ret2 = ret1; | |
4429392e JO |
1409 | } |
1410 | ||
9bfbbc6d | 1411 | return ret2; |
4429392e JO |
1412 | } |
1413 | ||
23b6339b | 1414 | static int test_term(struct terms_test *t) |
4429392e | 1415 | { |
c549aca5 | 1416 | struct list_head terms; |
4429392e JO |
1417 | int ret; |
1418 | ||
c549aca5 | 1419 | INIT_LIST_HEAD(&terms); |
4429392e | 1420 | |
c549aca5 | 1421 | ret = parse_events_terms(&terms, t->str); |
4429392e JO |
1422 | if (ret) { |
1423 | pr_debug("failed to parse terms '%s', err %d\n", | |
1424 | t->str , ret); | |
1425 | return ret; | |
1426 | } | |
1427 | ||
c549aca5 DA |
1428 | ret = t->check(&terms); |
1429 | parse_events__free_terms(&terms); | |
4429392e JO |
1430 | |
1431 | return ret; | |
1432 | } | |
1433 | ||
23b6339b | 1434 | static int test_terms(struct terms_test *terms, unsigned cnt) |
4429392e JO |
1435 | { |
1436 | int ret = 0; | |
1437 | unsigned i; | |
1438 | ||
1439 | for (i = 0; i < cnt; i++) { | |
23b6339b | 1440 | struct terms_test *t = &terms[i]; |
4429392e JO |
1441 | |
1442 | pr_debug("running test %d '%s'\n", i, t->str); | |
1443 | ret = test_term(t); | |
f50246e2 JO |
1444 | if (ret) |
1445 | break; | |
1446 | } | |
1447 | ||
1448 | return ret; | |
1449 | } | |
1450 | ||
1451 | static int test_pmu(void) | |
1452 | { | |
1453 | struct stat st; | |
1454 | char path[PATH_MAX]; | |
1455 | int ret; | |
1456 | ||
1457 | snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/", | |
cf38fada | 1458 | sysfs__mountpoint()); |
f50246e2 JO |
1459 | |
1460 | ret = stat(path, &st); | |
1461 | if (ret) | |
3fd44cd4 | 1462 | pr_debug("omitting PMU cpu tests\n"); |
f50246e2 JO |
1463 | return !ret; |
1464 | } | |
1465 | ||
3f3a2064 JO |
1466 | static int test_pmu_events(void) |
1467 | { | |
1468 | struct stat st; | |
1469 | char path[PATH_MAX]; | |
1470 | struct dirent *ent; | |
1471 | DIR *dir; | |
1472 | int ret; | |
1473 | ||
1474 | snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/", | |
cf38fada | 1475 | sysfs__mountpoint()); |
3f3a2064 JO |
1476 | |
1477 | ret = stat(path, &st); | |
1478 | if (ret) { | |
a895d57d | 1479 | pr_debug("omitting PMU cpu events tests\n"); |
3f3a2064 JO |
1480 | return 0; |
1481 | } | |
1482 | ||
1483 | dir = opendir(path); | |
1484 | if (!dir) { | |
1485 | pr_debug("can't open pmu event dir"); | |
1486 | return -1; | |
1487 | } | |
1488 | ||
1489 | while (!ret && (ent = readdir(dir))) { | |
1490 | #define MAX_NAME 100 | |
23b6339b | 1491 | struct evlist_test e; |
3f3a2064 JO |
1492 | char name[MAX_NAME]; |
1493 | ||
1494 | if (!strcmp(ent->d_name, ".") || | |
1495 | !strcmp(ent->d_name, "..")) | |
1496 | continue; | |
1497 | ||
1498 | snprintf(name, MAX_NAME, "cpu/event=%s/u", ent->d_name); | |
1499 | ||
1500 | e.name = name; | |
1501 | e.check = test__checkevent_pmu_events; | |
1502 | ||
1503 | ret = test_event(&e); | |
1504 | #undef MAX_NAME | |
1505 | } | |
1506 | ||
1507 | closedir(dir); | |
1508 | return ret; | |
1509 | } | |
1510 | ||
c81251e8 | 1511 | int test__parse_events(void) |
f50246e2 | 1512 | { |
9bfbbc6d | 1513 | int ret1, ret2 = 0; |
f50246e2 | 1514 | |
ebf124ff JO |
1515 | #define TEST_EVENTS(tests) \ |
1516 | do { \ | |
9bfbbc6d RR |
1517 | ret1 = test_events(tests, ARRAY_SIZE(tests)); \ |
1518 | if (!ret2) \ | |
1519 | ret2 = ret1; \ | |
ebf124ff | 1520 | } while (0) |
4429392e | 1521 | |
ebf124ff | 1522 | TEST_EVENTS(test__events); |
4429392e | 1523 | |
ebf124ff JO |
1524 | if (test_pmu()) |
1525 | TEST_EVENTS(test__events_pmu); | |
f50246e2 | 1526 | |
3f3a2064 JO |
1527 | if (test_pmu()) { |
1528 | int ret = test_pmu_events(); | |
1529 | if (ret) | |
1530 | return ret; | |
1531 | } | |
1532 | ||
9bfbbc6d RR |
1533 | ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); |
1534 | if (!ret2) | |
1535 | ret2 = ret1; | |
1536 | ||
1537 | return ret2; | |
f50246e2 | 1538 | } |