Linux Perf
parse-events.c
Go to the documentation of this file.
1 // SPDX-License-Identifier: GPL-2.0
2 #include "parse-events.h"
3 #include "evsel.h"
4 #include "evlist.h"
5 #include <api/fs/fs.h>
6 #include "tests.h"
7 #include "debug.h"
8 #include "util.h"
9 #include <dirent.h>
10 #include <errno.h>
11 #include <sys/types.h>
12 #include <sys/stat.h>
13 #include <unistd.h>
14 #include <linux/kernel.h>
15 #include <linux/hw_breakpoint.h>
16 #include <api/fs/tracing_path.h>
17 
18 #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
19  PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
20 
21 static int test__checkevent_tracepoint(struct perf_evlist *evlist)
22 {
23  struct perf_evsel *evsel = perf_evlist__first(evlist);
24 
25  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
26  TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups);
27  TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
28  TEST_ASSERT_VAL("wrong sample_type",
29  PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
30  TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
31  return 0;
32 }
33 
35 {
36  struct perf_evsel *evsel;
37 
38  TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1);
39  TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->nr_groups);
40 
41  evlist__for_each_entry(evlist, evsel) {
42  TEST_ASSERT_VAL("wrong type",
43  PERF_TYPE_TRACEPOINT == evsel->attr.type);
44  TEST_ASSERT_VAL("wrong sample_type",
45  PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
46  TEST_ASSERT_VAL("wrong sample_period",
47  1 == evsel->attr.sample_period);
48  }
49  return 0;
50 }
51 
53 {
54  struct perf_evsel *evsel = perf_evlist__first(evlist);
55 
56  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
57  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
58  TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config);
59  return 0;
60 }
61 
63 {
64  struct perf_evsel *evsel = perf_evlist__first(evlist);
65 
66  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
67  TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
68  TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
69  return 0;
70 }
71 
73 {
74  struct perf_evsel *evsel = perf_evlist__first(evlist);
75 
76  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
77  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
78  TEST_ASSERT_VAL("wrong config",
79  PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
80  return 0;
81 }
82 
84 {
85  struct perf_evsel *evsel = perf_evlist__first(evlist);
86 
87  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
88  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
89  TEST_ASSERT_VAL("wrong config",
90  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
91  /*
92  * The period value gets configured within perf_evlist__config,
93  * while this test executes only parse events method.
94  */
95  TEST_ASSERT_VAL("wrong period",
96  0 == evsel->attr.sample_period);
97  TEST_ASSERT_VAL("wrong config1",
98  0 == evsel->attr.config1);
99  TEST_ASSERT_VAL("wrong config2",
100  1 == evsel->attr.config2);
101  return 0;
102 }
103 
105 {
106  struct perf_evsel *evsel = perf_evlist__first(evlist);
107 
108  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
109  TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type);
110  TEST_ASSERT_VAL("wrong config",
111  PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config);
112  return 0;
113 }
114 
116 {
117  struct perf_evsel *evsel = perf_evlist__first(evlist);
118 
119  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
120  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type);
121  TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config);
122  return 0;
123 }
124 
126 {
127  struct perf_evsel *evsel = perf_evlist__first(evlist);
128 
129  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
130  TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type);
131  TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
132  TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
133  evsel->attr.bp_type);
134  TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 ==
135  evsel->attr.bp_len);
136  return 0;
137 }
138 
140 {
141  struct perf_evsel *evsel = perf_evlist__first(evlist);
142 
143  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
144  TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type);
145  TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
146  TEST_ASSERT_VAL("wrong bp_type",
147  HW_BREAKPOINT_X == evsel->attr.bp_type);
148  TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len);
149  return 0;
150 }
151 
153 {
154  struct perf_evsel *evsel = perf_evlist__first(evlist);
155 
156  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
157  TEST_ASSERT_VAL("wrong type",
158  PERF_TYPE_BREAKPOINT == evsel->attr.type);
159  TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
160  TEST_ASSERT_VAL("wrong bp_type",
161  HW_BREAKPOINT_R == evsel->attr.bp_type);
162  TEST_ASSERT_VAL("wrong bp_len",
163  HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
164  return 0;
165 }
166 
168 {
169  struct perf_evsel *evsel = perf_evlist__first(evlist);
170 
171  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
172  TEST_ASSERT_VAL("wrong type",
173  PERF_TYPE_BREAKPOINT == evsel->attr.type);
174  TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
175  TEST_ASSERT_VAL("wrong bp_type",
176  HW_BREAKPOINT_W == evsel->attr.bp_type);
177  TEST_ASSERT_VAL("wrong bp_len",
178  HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
179  return 0;
180 }
181 
183 {
184  struct perf_evsel *evsel = perf_evlist__first(evlist);
185 
186  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
187  TEST_ASSERT_VAL("wrong type",
188  PERF_TYPE_BREAKPOINT == evsel->attr.type);
189  TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
190  TEST_ASSERT_VAL("wrong bp_type",
191  (HW_BREAKPOINT_R|HW_BREAKPOINT_W) == evsel->attr.bp_type);
192  TEST_ASSERT_VAL("wrong bp_len",
193  HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len);
194  return 0;
195 }
196 
198 {
199  struct perf_evsel *evsel = perf_evlist__first(evlist);
200 
201  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
202  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
203  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
204  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
205 
206  return test__checkevent_tracepoint(evlist);
207 }
208 
209 static int
211 {
212  struct perf_evsel *evsel;
213 
214  TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1);
215 
216  evlist__for_each_entry(evlist, evsel) {
217  TEST_ASSERT_VAL("wrong exclude_user",
218  !evsel->attr.exclude_user);
219  TEST_ASSERT_VAL("wrong exclude_kernel",
220  evsel->attr.exclude_kernel);
221  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
222  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
223  }
224 
225  return test__checkevent_tracepoint_multi(evlist);
226 }
227 
229 {
230  struct perf_evsel *evsel = perf_evlist__first(evlist);
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_raw(evlist);
238 }
239 
241 {
242  struct perf_evsel *evsel = perf_evlist__first(evlist);
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_numeric(evlist);
250 }
251 
253 {
254  struct perf_evsel *evsel = perf_evlist__first(evlist);
255 
256  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
257  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
258  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
259  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
260 
261  return test__checkevent_symbolic_name(evlist);
262 }
263 
265 {
266  struct perf_evsel *evsel = perf_evlist__first(evlist);
267 
268  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
269  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
270 
271  return test__checkevent_symbolic_name(evlist);
272 }
273 
275 {
276  struct perf_evsel *evsel = perf_evlist__first(evlist);
277 
278  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
279  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
280 
281  return test__checkevent_symbolic_name(evlist);
282 }
283 
285 {
286  struct perf_evsel *evsel = perf_evlist__first(evlist);
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_symbolic_alias(evlist);
294 }
295 
297 {
298  struct perf_evsel *evsel = perf_evlist__first(evlist);
299 
300  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
301  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
302  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
303  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
304 
305  return test__checkevent_genhw(evlist);
306 }
307 
309 {
310  struct perf_evsel *evsel = perf_evlist__first(evlist);
311 
312  TEST_ASSERT_VAL("wrong exclude idle", evsel->attr.exclude_idle);
313  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
314  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
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);
319 
320  return test__checkevent_symbolic_name(evlist);
321 }
322 
324 {
325  struct perf_evsel *evsel = perf_evlist__first(evlist);
326 
327  TEST_ASSERT_VAL("wrong exclude idle", evsel->attr.exclude_idle);
328  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
329  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
330  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
331  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
332  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
333  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
334 
335  return test__checkevent_symbolic_name(evlist);
336 }
337 
339 {
340  struct perf_evsel *evsel = perf_evlist__first(evlist);
341 
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);
347  TEST_ASSERT_VAL("wrong name",
348  !strcmp(perf_evsel__name(evsel), "mem:0:u"));
349 
350  return test__checkevent_breakpoint(evlist);
351 }
352 
354 {
355  struct perf_evsel *evsel = perf_evlist__first(evlist);
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);
361  TEST_ASSERT_VAL("wrong name",
362  !strcmp(perf_evsel__name(evsel), "mem:0:x:k"));
363 
364  return test__checkevent_breakpoint_x(evlist);
365 }
366 
368 {
369  struct perf_evsel *evsel = perf_evlist__first(evlist);
370 
371  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
372  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
373  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
374  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
375  TEST_ASSERT_VAL("wrong name",
376  !strcmp(perf_evsel__name(evsel), "mem:0:r:hp"));
377 
378  return test__checkevent_breakpoint_r(evlist);
379 }
380 
382 {
383  struct perf_evsel *evsel = perf_evlist__first(evlist);
384 
385  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
386  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
387  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
388  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
389  TEST_ASSERT_VAL("wrong name",
390  !strcmp(perf_evsel__name(evsel), "mem:0:w:up"));
391 
392  return test__checkevent_breakpoint_w(evlist);
393 }
394 
396 {
397  struct perf_evsel *evsel = perf_evlist__first(evlist);
398 
399  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
400  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
401  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
402  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
403  TEST_ASSERT_VAL("wrong name",
404  !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp"));
405 
406  return test__checkevent_breakpoint_rw(evlist);
407 }
408 
410 {
411 
412  struct perf_evsel *evsel = perf_evlist__first(evlist);
413 
414  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
415  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
416  TEST_ASSERT_VAL("wrong config", 10 == evsel->attr.config);
417  TEST_ASSERT_VAL("wrong config1", 1 == evsel->attr.config1);
418  TEST_ASSERT_VAL("wrong config2", 3 == evsel->attr.config2);
419  /*
420  * The period value gets configured within perf_evlist__config,
421  * while this test executes only parse events method.
422  */
423  TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period);
424 
425  return 0;
426 }
427 
429 {
430  struct perf_evsel *evsel = perf_evlist__first(evlist);
431 
432  TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
433 
434  /* r1 */
435  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
436  TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
437  TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1);
438  TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2);
439  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
440  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
441  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
442  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
443 
444  /* syscalls:sys_enter_openat:k */
445  evsel = perf_evsel__next(evsel);
446  TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
447  TEST_ASSERT_VAL("wrong sample_type",
448  PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
449  TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
450  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
451  TEST_ASSERT_VAL("wrong exclude_kernel", !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);
454 
455  /* 1:1:hp */
456  evsel = perf_evsel__next(evsel);
457  TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
458  TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
459  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
460  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
461  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
462  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
463 
464  return 0;
465 }
466 
468 {
469  struct perf_evsel *evsel = perf_evlist__first(evlist);
470 
471  /* cpu/config=1,name=krava/u */
472  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
473  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
474  TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
475  TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava"));
476 
477  /* cpu/config=2/u" */
478  evsel = perf_evsel__next(evsel);
479  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
480  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
481  TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config);
482  TEST_ASSERT_VAL("wrong name",
483  !strcmp(perf_evsel__name(evsel), "cpu/config=2/u"));
484 
485  return 0;
486 }
487 
489 {
490  struct perf_evsel *evsel = perf_evlist__first(evlist);
491 
492  /* cpu/config=1,call-graph=fp,time,period=100000/ */
493  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
494  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
495  TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config);
496  /*
497  * The period, time and callgraph value gets configured
498  * within perf_evlist__config,
499  * while this test executes only parse events method.
500  */
501  TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period);
502  TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel));
503  TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->attr.sample_type));
504 
505  /* cpu/config=2,call-graph=no,time=0,period=2000/ */
506  evsel = perf_evsel__next(evsel);
507  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
508  TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config);
509  /*
510  * The period, time and callgraph value gets configured
511  * within perf_evlist__config,
512  * while this test executes only parse events method.
513  */
514  TEST_ASSERT_VAL("wrong period", 0 == evsel->attr.sample_period);
515  TEST_ASSERT_VAL("wrong callgraph", !evsel__has_callchain(evsel));
516  TEST_ASSERT_VAL("wrong time", !(PERF_SAMPLE_TIME & evsel->attr.sample_type));
517 
518  return 0;
519 }
520 
522 {
523  struct perf_evsel *evsel = perf_evlist__first(evlist);
524 
525  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
526  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
527  TEST_ASSERT_VAL("wrong exclude_user",
528  !evsel->attr.exclude_user);
529  TEST_ASSERT_VAL("wrong exclude_kernel",
530  evsel->attr.exclude_kernel);
531  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
532  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
533  TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned);
534 
535  return 0;
536 }
537 
538 
540 {
541  struct perf_evsel *evsel = perf_evlist__first(evlist);
542 
543  /* pmu-event:u */
544  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
545  TEST_ASSERT_VAL("wrong exclude_user",
546  !evsel->attr.exclude_user);
547  TEST_ASSERT_VAL("wrong exclude_kernel",
548  evsel->attr.exclude_kernel);
549  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
550  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
551  TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned);
552 
553  /* cpu/pmu-event/u*/
554  evsel = perf_evsel__next(evsel);
555  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
556  TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type);
557  TEST_ASSERT_VAL("wrong exclude_user",
558  !evsel->attr.exclude_user);
559  TEST_ASSERT_VAL("wrong exclude_kernel",
560  evsel->attr.exclude_kernel);
561  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
562  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
563  TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned);
564 
565  return 0;
566 }
567 
568 static int test__checkterms_simple(struct list_head *terms)
569 {
570  struct parse_events_term *term;
571 
572  /* config=10 */
573  term = list_entry(terms->next, struct parse_events_term, list);
574  TEST_ASSERT_VAL("wrong type term",
576  TEST_ASSERT_VAL("wrong type val",
578  TEST_ASSERT_VAL("wrong val", term->val.num == 10);
579  TEST_ASSERT_VAL("wrong config", !term->config);
580 
581  /* config1 */
582  term = list_entry(term->list.next, struct parse_events_term, list);
583  TEST_ASSERT_VAL("wrong type term",
585  TEST_ASSERT_VAL("wrong type val",
587  TEST_ASSERT_VAL("wrong val", term->val.num == 1);
588  TEST_ASSERT_VAL("wrong config", !term->config);
589 
590  /* config2=3 */
591  term = list_entry(term->list.next, struct parse_events_term, list);
592  TEST_ASSERT_VAL("wrong type term",
594  TEST_ASSERT_VAL("wrong type val",
596  TEST_ASSERT_VAL("wrong val", term->val.num == 3);
597  TEST_ASSERT_VAL("wrong config", !term->config);
598 
599  /* umask=1*/
600  term = list_entry(term->list.next, struct parse_events_term, list);
601  TEST_ASSERT_VAL("wrong type term",
603  TEST_ASSERT_VAL("wrong type val",
605  TEST_ASSERT_VAL("wrong val", term->val.num == 1);
606  TEST_ASSERT_VAL("wrong config", !strcmp(term->config, "umask"));
607 
608  return 0;
609 }
610 
611 static int test__group1(struct perf_evlist *evlist)
612 {
613  struct perf_evsel *evsel, *leader;
614 
615  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
616  TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
617 
618  /* instructions:k */
619  evsel = leader = perf_evlist__first(evlist);
620  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
621  TEST_ASSERT_VAL("wrong config",
622  PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
623  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
624  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
625  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
626  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
627  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
628  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
629  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
630  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
631  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
632  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
633 
634  /* cycles:upp */
635  evsel = perf_evsel__next(evsel);
636  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
637  TEST_ASSERT_VAL("wrong config",
638  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
639  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
640  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
641  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
642  /* use of precise requires exclude_guest */
643  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
644  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
645  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2);
646  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
647  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
648  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
649 
650  return 0;
651 }
652 
653 static int test__group2(struct perf_evlist *evlist)
654 {
655  struct perf_evsel *evsel, *leader;
656 
657  TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
658  TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
659 
660  /* faults + :ku modifier */
661  evsel = leader = perf_evlist__first(evlist);
662  TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type);
663  TEST_ASSERT_VAL("wrong config",
664  PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config);
665  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
666  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
667  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
668  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
669  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
670  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
671  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
672  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
673  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
674  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
675 
676  /* cache-references + :u modifier */
677  evsel = perf_evsel__next(evsel);
678  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
679  TEST_ASSERT_VAL("wrong config",
680  PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config);
681  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
682  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
683  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
684  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
685  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
686  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
687  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
688  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
689  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
690 
691  /* cycles:k */
692  evsel = perf_evsel__next(evsel);
693  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
694  TEST_ASSERT_VAL("wrong config",
695  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
696  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
697  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
698  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
699  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
700  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
701  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
702  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
703  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
704 
705  return 0;
706 }
707 
708 static int test__group3(struct perf_evlist *evlist __maybe_unused)
709 {
710  struct perf_evsel *evsel, *leader;
711 
712  TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries);
713  TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups);
714 
715  /* group1 syscalls:sys_enter_openat:H */
716  evsel = leader = perf_evlist__first(evlist);
717  TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type);
718  TEST_ASSERT_VAL("wrong sample_type",
719  PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type);
720  TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period);
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);
724  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
725  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
726  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
727  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
728  TEST_ASSERT_VAL("wrong group name",
729  !strcmp(leader->group_name, "group1"));
730  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
731  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
732  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
733 
734  /* group1 cycles:kppp */
735  evsel = perf_evsel__next(evsel);
736  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
737  TEST_ASSERT_VAL("wrong config",
738  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
739  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
740  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
741  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
742  /* use of precise requires exclude_guest */
743  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
744  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
745  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3);
746  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
747  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
748  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
749  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
750 
751  /* group2 cycles + G modifier */
752  evsel = leader = perf_evsel__next(evsel);
753  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
754  TEST_ASSERT_VAL("wrong config",
755  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
756  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
757  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
758  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
759  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
760  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
761  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
762  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
763  TEST_ASSERT_VAL("wrong group name",
764  !strcmp(leader->group_name, "group2"));
765  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
766  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
767  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
768 
769  /* group2 1:3 + G modifier */
770  evsel = perf_evsel__next(evsel);
771  TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type);
772  TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config);
773  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
774  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
775  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
776  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
777  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
778  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
779  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
780  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
781  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
782 
783  /* instructions:u */
784  evsel = perf_evsel__next(evsel);
785  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
786  TEST_ASSERT_VAL("wrong config",
787  PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
788  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
789  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
790  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
791  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
792  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
793  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
794  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
795  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
796 
797  return 0;
798 }
799 
800 static int test__group4(struct perf_evlist *evlist __maybe_unused)
801 {
802  struct perf_evsel *evsel, *leader;
803 
804  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
805  TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
806 
807  /* cycles:u + p */
808  evsel = leader = perf_evlist__first(evlist);
809  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
810  TEST_ASSERT_VAL("wrong config",
811  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
812  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
813  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
814  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
815  /* use of precise requires exclude_guest */
816  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
817  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
818  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1);
819  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
820  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
821  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
822  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
823  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
824 
825  /* instructions:kp + p */
826  evsel = perf_evsel__next(evsel);
827  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
828  TEST_ASSERT_VAL("wrong config",
829  PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
830  TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user);
831  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
832  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
833  /* use of precise requires exclude_guest */
834  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
835  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
836  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2);
837  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
838  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
839  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
840 
841  return 0;
842 }
843 
844 static int test__group5(struct perf_evlist *evlist __maybe_unused)
845 {
846  struct perf_evsel *evsel, *leader;
847 
848  TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries);
849  TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->nr_groups);
850 
851  /* cycles + G */
852  evsel = leader = perf_evlist__first(evlist);
853  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
854  TEST_ASSERT_VAL("wrong config",
855  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
856  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
857  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
858  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
859  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
860  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
861  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
862  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
863  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
864  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
865  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
866  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
867 
868  /* instructions + G */
869  evsel = perf_evsel__next(evsel);
870  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
871  TEST_ASSERT_VAL("wrong config",
872  PERF_COUNT_HW_INSTRUCTIONS == 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 leader", evsel->leader == leader);
880  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
881  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
882 
883  /* cycles:G */
884  evsel = leader = perf_evsel__next(evsel);
885  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
886  TEST_ASSERT_VAL("wrong config",
887  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
888  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
889  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
890  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
891  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
892  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
893  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
894  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
895  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
896  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
897  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
898  TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read);
899 
900  /* instructions:G */
901  evsel = perf_evsel__next(evsel);
902  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
903  TEST_ASSERT_VAL("wrong config",
904  PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
905  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
906  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
907  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
908  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
909  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
910  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
911  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
912  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
913 
914  /* cycles */
915  evsel = perf_evsel__next(evsel);
916  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
917  TEST_ASSERT_VAL("wrong config",
918  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
919  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
920  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
921  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
922  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
923  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
924  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
925  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
926 
927  return 0;
928 }
929 
930 static int test__group_gh1(struct perf_evlist *evlist)
931 {
932  struct perf_evsel *evsel, *leader;
933 
934  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
935  TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
936 
937  /* cycles + :H group modifier */
938  evsel = leader = perf_evlist__first(evlist);
939  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
940  TEST_ASSERT_VAL("wrong config",
941  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
942  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
943  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
944  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
945  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
946  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
947  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
948  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
949  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
950  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
951  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
952 
953  /* cache-misses:G + :H group modifier */
954  evsel = perf_evsel__next(evsel);
955  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
956  TEST_ASSERT_VAL("wrong config",
957  PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
958  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
959  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
960  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
961  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
962  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
963  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
964  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
965  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
966 
967  return 0;
968 }
969 
970 static int test__group_gh2(struct perf_evlist *evlist)
971 {
972  struct perf_evsel *evsel, *leader;
973 
974  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
975  TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
976 
977  /* cycles + :G group modifier */
978  evsel = leader = perf_evlist__first(evlist);
979  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
980  TEST_ASSERT_VAL("wrong config",
981  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
982  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
983  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
984  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
985  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
986  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
987  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
988  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
989  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
990  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
991  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
992 
993  /* cache-misses:H + :G group modifier */
994  evsel = perf_evsel__next(evsel);
995  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
996  TEST_ASSERT_VAL("wrong config",
997  PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
998  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
999  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
1000  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
1001  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
1002  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1003  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1004  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1005  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
1006 
1007  return 0;
1008 }
1009 
1011 {
1012  struct perf_evsel *evsel, *leader;
1013 
1014  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
1015  TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
1016 
1017  /* cycles:G + :u group modifier */
1018  evsel = leader = perf_evlist__first(evlist);
1019  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1020  TEST_ASSERT_VAL("wrong config",
1021  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
1022  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1023  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1024  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1025  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
1026  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
1027  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1028  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1029  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
1030  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
1031  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
1032 
1033  /* cache-misses:H + :u group modifier */
1034  evsel = perf_evsel__next(evsel);
1035  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1036  TEST_ASSERT_VAL("wrong config",
1037  PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
1038  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1039  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1040  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1041  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1042  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1043  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1044  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1045  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
1046 
1047  return 0;
1048 }
1049 
1051 {
1052  struct perf_evsel *evsel, *leader;
1053 
1054  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
1055  TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->nr_groups);
1056 
1057  /* cycles:G + :uG group modifier */
1058  evsel = leader = perf_evlist__first(evlist);
1059  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1060  TEST_ASSERT_VAL("wrong config",
1061  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
1062  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1063  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1064  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1065  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
1066  TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host);
1067  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1068  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1069  TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel));
1070  TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2);
1071  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0);
1072 
1073  /* cache-misses:H + :uG group modifier */
1074  evsel = perf_evsel__next(evsel);
1075  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1076  TEST_ASSERT_VAL("wrong config",
1077  PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
1078  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1079  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1080  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1081  TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest);
1082  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1083  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1084  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1085  TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1);
1086 
1087  return 0;
1088 }
1089 
1091 {
1092  struct perf_evsel *evsel, *leader;
1093 
1094  TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
1095 
1096  /* cycles - sampling group leader */
1097  evsel = leader = perf_evlist__first(evlist);
1098  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1099  TEST_ASSERT_VAL("wrong config",
1100  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
1101  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1102  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
1103  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
1104  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1105  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1106  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1107  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1108  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1109  TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1110 
1111  /* cache-misses - not sampling */
1112  evsel = perf_evsel__next(evsel);
1113  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1114  TEST_ASSERT_VAL("wrong config",
1115  PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
1116  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1117  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
1118  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
1119  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1120  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1121  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1122  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1123  TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1124 
1125  /* branch-misses - not sampling */
1126  evsel = perf_evsel__next(evsel);
1127  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1128  TEST_ASSERT_VAL("wrong config",
1129  PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config);
1130  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1131  TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel);
1132  TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv);
1133  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1134  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1135  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1136  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1137  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1138  TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1139 
1140  return 0;
1141 }
1142 
1143 static int test__leader_sample2(struct perf_evlist *evlist __maybe_unused)
1144 {
1145  struct perf_evsel *evsel, *leader;
1146 
1147  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
1148 
1149  /* instructions - sampling group leader */
1150  evsel = leader = perf_evlist__first(evlist);
1151  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1152  TEST_ASSERT_VAL("wrong config",
1153  PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config);
1154  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1155  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1156  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1157  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1158  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1159  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1160  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1161  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1162  TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1163 
1164  /* branch-misses - not sampling */
1165  evsel = perf_evsel__next(evsel);
1166  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1167  TEST_ASSERT_VAL("wrong config",
1168  PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config);
1169  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1170  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1171  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1172  TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest);
1173  TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host);
1174  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1175  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1176  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1177  TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read);
1178 
1179  return 0;
1180 }
1181 
1183 {
1184  struct perf_evsel *evsel = perf_evlist__first(evlist);
1185 
1186  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1187  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1188  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1189  TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip);
1190  TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned);
1191 
1192  return test__checkevent_symbolic_name(evlist);
1193 }
1194 
1196 {
1197  struct perf_evsel *evsel, *leader;
1198 
1199  TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries);
1200 
1201  /* cycles - group leader */
1202  evsel = leader = perf_evlist__first(evlist);
1203  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1204  TEST_ASSERT_VAL("wrong config",
1205  PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config);
1206  TEST_ASSERT_VAL("wrong group name", !evsel->group_name);
1207  TEST_ASSERT_VAL("wrong leader", evsel->leader == leader);
1208  TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned);
1209 
1210  /* cache-misses - can not be pinned, but will go on with the leader */
1211  evsel = perf_evsel__next(evsel);
1212  TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type);
1213  TEST_ASSERT_VAL("wrong config",
1214  PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config);
1215  TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned);
1216 
1217  /* branch-misses - ditto */
1218  evsel = perf_evsel__next(evsel);
1219  TEST_ASSERT_VAL("wrong config",
1220  PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config);
1221  TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned);
1222 
1223  return 0;
1224 }
1225 
1227 {
1228  struct perf_evsel *evsel = perf_evlist__first(evlist);
1229 
1230  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
1231  TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type);
1232  TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
1233  TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) ==
1234  evsel->attr.bp_type);
1235  TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_1 ==
1236  evsel->attr.bp_len);
1237 
1238  return 0;
1239 }
1240 
1242 {
1243  struct perf_evsel *evsel = perf_evlist__first(evlist);
1244 
1245  TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries);
1246  TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type);
1247  TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config);
1248  TEST_ASSERT_VAL("wrong bp_type", HW_BREAKPOINT_W ==
1249  evsel->attr.bp_type);
1250  TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_2 ==
1251  evsel->attr.bp_len);
1252 
1253  return 0;
1254 }
1255 
1256 static int
1258 {
1259  struct perf_evsel *evsel = perf_evlist__first(evlist);
1260 
1261  TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user);
1262  TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel);
1263  TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv);
1264  TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip);
1265 
1266  return test__checkevent_breakpoint_rw(evlist);
1267 }
1268 
1270 {
1271  struct perf_evsel *evsel = perf_evlist__first(evlist);
1272 
1273  TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries);
1274  TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type);
1275  TEST_ASSERT_VAL("wrong config",
1276  PERF_COUNT_SW_TASK_CLOCK == evsel->attr.config);
1277  return 0;
1278 }
1279 
1281 {
1282  struct perf_evsel *evsel = perf_evlist__first(evlist);
1283 
1284  TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "insn") == 0);
1285  return 0;
1286 }
1287 
1289 {
1290  struct perf_evsel *evsel = perf_evlist__first(evlist);
1291 
1292  TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "rawpmu") == 0);
1293  return 0;
1294 }
1295 
1297 {
1298  struct perf_evsel *evsel = perf_evlist__first(evlist);
1299 
1300  TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "numpmu") == 0);
1301  return 0;
1302 }
1303 
1305 {
1306  struct perf_evsel *evsel = perf_evlist__first(evlist);
1307 
1308  TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "cachepmu") == 0);
1309  return 0;
1310 }
1311 
1312 static int test__intel_pt(struct perf_evlist *evlist)
1313 {
1314  struct perf_evsel *evsel = perf_evlist__first(evlist);
1315 
1316  TEST_ASSERT_VAL("wrong name setting", strcmp(evsel->name, "intel_pt//u") == 0);
1317  return 0;
1318 }
1319 
1320 static int count_tracepoints(void)
1321 {
1322  struct dirent *events_ent;
1323  DIR *events_dir;
1324  int cnt = 0;
1325 
1326  events_dir = tracing_events__opendir();
1327 
1328  TEST_ASSERT_VAL("Can't open events dir", events_dir);
1329 
1330  while ((events_ent = readdir(events_dir))) {
1331  char *sys_path;
1332  struct dirent *sys_ent;
1333  DIR *sys_dir;
1334 
1335  if (!strcmp(events_ent->d_name, ".")
1336  || !strcmp(events_ent->d_name, "..")
1337  || !strcmp(events_ent->d_name, "enable")
1338  || !strcmp(events_ent->d_name, "header_event")
1339  || !strcmp(events_ent->d_name, "header_page"))
1340  continue;
1341 
1342  sys_path = get_events_file(events_ent->d_name);
1343  TEST_ASSERT_VAL("Can't get sys path", sys_path);
1344 
1345  sys_dir = opendir(sys_path);
1346  TEST_ASSERT_VAL("Can't open sys dir", sys_dir);
1347 
1348  while ((sys_ent = readdir(sys_dir))) {
1349  if (!strcmp(sys_ent->d_name, ".")
1350  || !strcmp(sys_ent->d_name, "..")
1351  || !strcmp(sys_ent->d_name, "enable")
1352  || !strcmp(sys_ent->d_name, "filter"))
1353  continue;
1354 
1355  cnt++;
1356  }
1357 
1358  closedir(sys_dir);
1359  put_events_file(sys_path);
1360  }
1361 
1362  closedir(events_dir);
1363  return cnt;
1364 }
1365 
1366 static int test__all_tracepoints(struct perf_evlist *evlist)
1367 {
1368  TEST_ASSERT_VAL("wrong events count",
1369  count_tracepoints() == evlist->nr_entries);
1370 
1371  return test__checkevent_tracepoint_multi(evlist);
1372 }
1373 
1374 struct evlist_test {
1375  const char *name;
1376  __u32 type;
1377  const int id;
1378  int (*check)(struct perf_evlist *evlist);
1379 };
1380 
1381 static struct evlist_test test__events[] = {
1382  {
1383  .name = "syscalls:sys_enter_openat",
1384  .check = test__checkevent_tracepoint,
1385  .id = 0,
1386  },
1387  {
1388  .name = "syscalls:*",
1390  .id = 1,
1391  },
1392  {
1393  .name = "r1a",
1394  .check = test__checkevent_raw,
1395  .id = 2,
1396  },
1397  {
1398  .name = "1:1",
1399  .check = test__checkevent_numeric,
1400  .id = 3,
1401  },
1402  {
1403  .name = "instructions",
1405  .id = 4,
1406  },
1407  {
1408  .name = "cycles/period=100000,config2/",
1410  .id = 5,
1411  },
1412  {
1413  .name = "faults",
1415  .id = 6,
1416  },
1417  {
1418  .name = "L1-dcache-load-miss",
1419  .check = test__checkevent_genhw,
1420  .id = 7,
1421  },
1422  {
1423  .name = "mem:0",
1424  .check = test__checkevent_breakpoint,
1425  .id = 8,
1426  },
1427  {
1428  .name = "mem:0:x",
1430  .id = 9,
1431  },
1432  {
1433  .name = "mem:0:r",
1435  .id = 10,
1436  },
1437  {
1438  .name = "mem:0:w",
1440  .id = 11,
1441  },
1442  {
1443  .name = "syscalls:sys_enter_openat:k",
1445  .id = 12,
1446  },
1447  {
1448  .name = "syscalls:*:u",
1450  .id = 13,
1451  },
1452  {
1453  .name = "r1a:kp",
1455  .id = 14,
1456  },
1457  {
1458  .name = "1:1:hp",
1460  .id = 15,
1461  },
1462  {
1463  .name = "instructions:h",
1465  .id = 16,
1466  },
1467  {
1468  .name = "faults:u",
1470  .id = 17,
1471  },
1472  {
1473  .name = "L1-dcache-load-miss:kp",
1475  .id = 18,
1476  },
1477  {
1478  .name = "mem:0:u",
1480  .id = 19,
1481  },
1482  {
1483  .name = "mem:0:x:k",
1485  .id = 20,
1486  },
1487  {
1488  .name = "mem:0:r:hp",
1490  .id = 21,
1491  },
1492  {
1493  .name = "mem:0:w:up",
1495  .id = 22,
1496  },
1497  {
1498  .name = "r1,syscalls:sys_enter_openat:k,1:1:hp",
1499  .check = test__checkevent_list,
1500  .id = 23,
1501  },
1502  {
1503  .name = "instructions:G",
1505  .id = 24,
1506  },
1507  {
1508  .name = "instructions:H",
1510  .id = 25,
1511  },
1512  {
1513  .name = "mem:0:rw",
1515  .id = 26,
1516  },
1517  {
1518  .name = "mem:0:rw:kp",
1520  .id = 27,
1521  },
1522  {
1523  .name = "{instructions:k,cycles:upp}",
1524  .check = test__group1,
1525  .id = 28,
1526  },
1527  {
1528  .name = "{faults:k,cache-references}:u,cycles:k",
1529  .check = test__group2,
1530  .id = 29,
1531  },
1532  {
1533  .name = "group1{syscalls:sys_enter_openat:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u",
1534  .check = test__group3,
1535  .id = 30,
1536  },
1537  {
1538  .name = "{cycles:u,instructions:kp}:p",
1539  .check = test__group4,
1540  .id = 31,
1541  },
1542  {
1543  .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles",
1544  .check = test__group5,
1545  .id = 32,
1546  },
1547  {
1548  .name = "*:*",
1549  .check = test__all_tracepoints,
1550  .id = 33,
1551  },
1552  {
1553  .name = "{cycles,cache-misses:G}:H",
1554  .check = test__group_gh1,
1555  .id = 34,
1556  },
1557  {
1558  .name = "{cycles,cache-misses:H}:G",
1559  .check = test__group_gh2,
1560  .id = 35,
1561  },
1562  {
1563  .name = "{cycles:G,cache-misses:H}:u",
1564  .check = test__group_gh3,
1565  .id = 36,
1566  },
1567  {
1568  .name = "{cycles:G,cache-misses:H}:uG",
1569  .check = test__group_gh4,
1570  .id = 37,
1571  },
1572  {
1573  .name = "{cycles,cache-misses,branch-misses}:S",
1574  .check = test__leader_sample1,
1575  .id = 38,
1576  },
1577  {
1578  .name = "{instructions,branch-misses}:Su",
1579  .check = test__leader_sample2,
1580  .id = 39,
1581  },
1582  {
1583  .name = "instructions:uDp",
1585  .id = 40,
1586  },
1587  {
1588  .name = "{cycles,cache-misses,branch-misses}:D",
1589  .check = test__pinned_group,
1590  .id = 41,
1591  },
1592  {
1593  .name = "mem:0/1",
1595  .id = 42,
1596  },
1597  {
1598  .name = "mem:0/2:w",
1600  .id = 43,
1601  },
1602  {
1603  .name = "mem:0/4:rw:u",
1605  .id = 44
1606  },
1607 #if defined(__s390x__)
1608  {
1609  .name = "kvm-s390:kvm_s390_create_vm",
1610  .check = test__checkevent_tracepoint,
1611  .id = 100,
1612  },
1613 #endif
1614  {
1615  .name = "instructions:I",
1617  .id = 45,
1618  },
1619  {
1620  .name = "instructions:kIG",
1622  .id = 46,
1623  },
1624  {
1625  .name = "task-clock:P,cycles",
1627  .id = 47,
1628  },
1629  {
1630  .name = "instructions/name=insn/",
1632  .id = 48,
1633  },
1634  {
1635  .name = "r1234/name=rawpmu/",
1636  .check = test__checkevent_config_raw,
1637  .id = 49,
1638  },
1639  {
1640  .name = "4:0x6530160/name=numpmu/",
1641  .check = test__checkevent_config_num,
1642  .id = 50,
1643  },
1644  {
1645  .name = "L1-dcache-misses/name=cachepmu/",
1647  .id = 51,
1648  },
1649  {
1650  .name = "intel_pt//u",
1651  .check = test__intel_pt,
1652  .id = 52,
1653  },
1654 };
1655 
1656 static struct evlist_test test__events_pmu[] = {
1657  {
1658  .name = "cpu/config=10,config1,config2=3,period=1000/u",
1659  .check = test__checkevent_pmu,
1660  .id = 0,
1661  },
1662  {
1663  .name = "cpu/config=1,name=krava/u,cpu/config=2/u",
1664  .check = test__checkevent_pmu_name,
1665  .id = 1,
1666  },
1667  {
1668  .name = "cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/",
1670  .id = 2,
1671  },
1672 };
1673 
1674 struct terms_test {
1675  const char *str;
1676  __u32 type;
1677  int (*check)(struct list_head *terms);
1678 };
1679 
1680 static struct terms_test test__terms[] = {
1681  [0] = {
1682  .str = "config=10,config1,config2=3,umask=1",
1683  .check = test__checkterms_simple,
1684  },
1685 };
1686 
1687 static int test_event(struct evlist_test *e)
1688 {
1689  struct perf_evlist *evlist;
1690  int ret;
1691 
1692  evlist = perf_evlist__new();
1693  if (evlist == NULL)
1694  return -ENOMEM;
1695 
1696  ret = parse_events(evlist, e->name, NULL);
1697  if (ret) {
1698  pr_debug("failed to parse event '%s', err %d\n",
1699  e->name, ret);
1700  } else {
1701  ret = e->check(evlist);
1702  }
1703 
1704  perf_evlist__delete(evlist);
1705 
1706  return ret;
1707 }
1708 
1709 static int test_events(struct evlist_test *events, unsigned cnt)
1710 {
1711  int ret1, ret2 = 0;
1712  unsigned i;
1713 
1714  for (i = 0; i < cnt; i++) {
1715  struct evlist_test *e = &events[i];
1716 
1717  pr_debug("running test %d '%s'\n", e->id, e->name);
1718  ret1 = test_event(e);
1719  if (ret1)
1720  ret2 = ret1;
1721  }
1722 
1723  return ret2;
1724 }
1725 
1726 static int test_term(struct terms_test *t)
1727 {
1728  struct list_head terms;
1729  int ret;
1730 
1731  INIT_LIST_HEAD(&terms);
1732 
1733  ret = parse_events_terms(&terms, t->str);
1734  if (ret) {
1735  pr_debug("failed to parse terms '%s', err %d\n",
1736  t->str , ret);
1737  return ret;
1738  }
1739 
1740  ret = t->check(&terms);
1741  parse_events_terms__purge(&terms);
1742 
1743  return ret;
1744 }
1745 
1746 static int test_terms(struct terms_test *terms, unsigned cnt)
1747 {
1748  int ret = 0;
1749  unsigned i;
1750 
1751  for (i = 0; i < cnt; i++) {
1752  struct terms_test *t = &terms[i];
1753 
1754  pr_debug("running test %d '%s'\n", i, t->str);
1755  ret = test_term(t);
1756  if (ret)
1757  break;
1758  }
1759 
1760  return ret;
1761 }
1762 
1763 static int test_pmu(void)
1764 {
1765  struct stat st;
1766  char path[PATH_MAX];
1767  int ret;
1768 
1769  snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/format/",
1770  sysfs__mountpoint());
1771 
1772  ret = stat(path, &st);
1773  if (ret)
1774  pr_debug("omitting PMU cpu tests\n");
1775  return !ret;
1776 }
1777 
1778 static int test_pmu_events(void)
1779 {
1780  struct stat st;
1781  char path[PATH_MAX];
1782  struct dirent *ent;
1783  DIR *dir;
1784  int ret;
1785 
1786  snprintf(path, PATH_MAX, "%s/bus/event_source/devices/cpu/events/",
1787  sysfs__mountpoint());
1788 
1789  ret = stat(path, &st);
1790  if (ret) {
1791  pr_debug("omitting PMU cpu events tests\n");
1792  return 0;
1793  }
1794 
1795  dir = opendir(path);
1796  if (!dir) {
1797  pr_debug("can't open pmu event dir");
1798  return -1;
1799  }
1800 
1801  while (!ret && (ent = readdir(dir))) {
1802  struct evlist_test e;
1803  char name[2 * NAME_MAX + 1 + 12 + 3];
1804 
1805  /* Names containing . are special and cannot be used directly */
1806  if (strchr(ent->d_name, '.'))
1807  continue;
1808 
1809  snprintf(name, sizeof(name), "cpu/event=%s/u", ent->d_name);
1810 
1811  e.name = name;
1813 
1814  ret = test_event(&e);
1815  if (ret)
1816  break;
1817  snprintf(name, sizeof(name), "%s:u,cpu/event=%s/u", ent->d_name, ent->d_name);
1818  e.name = name;
1820  ret = test_event(&e);
1821  }
1822 
1823  closedir(dir);
1824  return ret;
1825 }
1826 
1827 int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused)
1828 {
1829  int ret1, ret2 = 0;
1830 
1831 #define TEST_EVENTS(tests) \
1832 do { \
1833  ret1 = test_events(tests, ARRAY_SIZE(tests)); \
1834  if (!ret2) \
1835  ret2 = ret1; \
1836 } while (0)
1837 
1838  TEST_EVENTS(test__events);
1839 
1840  if (test_pmu())
1841  TEST_EVENTS(test__events_pmu);
1842 
1843  if (test_pmu()) {
1844  int ret = test_pmu_events();
1845  if (ret)
1846  return ret;
1847  }
1848 
1849  ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms));
1850  if (!ret2)
1851  ret2 = ret1;
1852 
1853  return ret2;
1854 }
#define PERF_TP_SAMPLE_TYPE
Definition: parse-events.c:18
static int test_pmu(void)
struct perf_probe_event events[MAX_PROBES]
Definition: builtin-probe.c:57
void parse_events_terms__purge(struct list_head *terms)
static int test_pmu_events(void)
static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:338
int parse_events_terms(struct list_head *terms, const char *str)
const char * str
static struct terms_test test__terms[]
static char * dir
Definition: attr.c:39
static int test__checkevent_genhw_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:296
static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist)
Definition: parse-events.c:182
static int test__pinned_group(struct perf_evlist *evlist)
static int test__checkevent_pmu_events(struct perf_evlist *evlist)
Definition: parse-events.c:521
static int test__checkevent_breakpoint_len(struct perf_evlist *evlist)
static int test__group_gh2(struct perf_evlist *evlist)
Definition: parse-events.c:970
static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist)
Definition: parse-events.c:83
static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:367
#define TEST_ASSERT_VAL(text, cond)
Definition: tests.h:7
static int test__checkevent_precise_max_modifier(struct perf_evlist *evlist)
static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:264
static int test__checkevent_numeric_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:240
void perf_evlist__delete(struct perf_evlist *evlist)
Definition: evlist.c:133
static int test__intel_pt(struct perf_evlist *evlist)
static int test__group_gh4(struct perf_evlist *evlist)
static int term(yyscan_t scanner, int type)
char * group_name
Definition: evsel.h:137
static int test_event(struct evlist_test *e)
static int test__group5(struct perf_evlist *evlist __maybe_unused)
Definition: parse-events.c:844
static int test__checkterms_simple(struct list_head *terms)
Definition: parse-events.c:568
static int test__checkevent_breakpoint_x(struct perf_evlist *evlist)
Definition: parse-events.c:139
union parse_events_term::@132 val
int nr_entries
Definition: evlist.h:30
static int test__checkevent_breakpoint_len_w(struct perf_evlist *evlist)
int parse_events(struct perf_evlist *evlist, const char *str, struct parse_events_error *err)
static int test__checkevent_exclude_idle_modifier_1(struct perf_evlist *evlist)
Definition: parse-events.c:323
int test__parse_events(struct test *test __maybe_unused, int subtest __maybe_unused)
static struct perf_evsel * perf_evsel__next(struct perf_evsel *evsel)
Definition: evsel.h:363
static int test__checkevent_pmu_partial_time_callgraph(struct perf_evlist *evlist)
Definition: parse-events.c:488
static int test__checkevent_tracepoint(struct perf_evlist *evlist)
Definition: parse-events.c:21
static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:284
struct perf_evlist * evlist
Definition: evsel.h:92
static int test__group3(struct perf_evlist *evlist __maybe_unused)
Definition: parse-events.c:708
#define pr_debug(fmt,...)
Definition: json.h:27
#define evlist__for_each_entry(evlist, evsel)
Definition: evlist.h:247
static int test__checkevent_config_symbol(struct perf_evlist *evlist)
static int test__group_gh3(struct perf_evlist *evlist)
static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:381
static int test__checkevent_pinned_modifier(struct perf_evlist *evlist)
static int test_terms(struct terms_test *terms, unsigned cnt)
static int test_events(struct evlist_test *events, unsigned cnt)
static int test__all_tracepoints(struct perf_evlist *evlist)
static int test__checkevent_pmu(struct perf_evlist *evlist)
Definition: parse-events.c:409
#define PATH_MAX
Definition: jevents.c:1042
int nr_groups
Definition: evlist.h:31
int(* check)(struct list_head *terms)
struct list_head list
Definition: parse-events.h:97
static int test__checkevent_pmu_events_mix(struct perf_evlist *evlist)
Definition: parse-events.c:539
static int test__group1(struct perf_evlist *evlist)
Definition: parse-events.c:611
static int test__checkevent_symbolic_alias(struct perf_evlist *evlist)
Definition: parse-events.c:104
static int test__checkevent_config_cache(struct perf_evlist *evlist)
static int test__checkevent_genhw(struct perf_evlist *evlist)
Definition: parse-events.c:115
const char * perf_evsel__name(struct perf_evsel *evsel)
Definition: evsel.c:577
static int test__checkevent_pmu_name(struct perf_evlist *evlist)
Definition: parse-events.c:467
static int test__leader_sample2(struct perf_evlist *evlist __maybe_unused)
static int test__checkevent_breakpoint_w(struct perf_evlist *evlist)
Definition: parse-events.c:167
static int perf_evsel__group_idx(struct perf_evsel *evsel)
Definition: evsel.h:447
static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:353
static struct perf_evsel * perf_evlist__first(struct perf_evlist *evlist)
Definition: evlist.h:215
static int test__checkevent_breakpoint(struct perf_evlist *evlist)
Definition: parse-events.c:125
static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist)
Definition: parse-events.c:34
static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:274
static int test__group2(struct perf_evlist *evlist)
Definition: parse-events.c:653
#define TEST_EVENTS(tests)
struct perf_evsel * leader
Definition: evsel.h:136
static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:252
Definition: tests.h:30
static int test__checkevent_raw(struct perf_evlist *evlist)
Definition: parse-events.c:52
static int count_tracepoints(void)
static int test__group_gh1(struct perf_evlist *evlist)
Definition: parse-events.c:930
static int test_term(struct terms_test *t)
static int test__checkevent_config_num(struct perf_evlist *evlist)
int nr_members
Definition: evsel.h:133
static int test__checkevent_breakpoint_r(struct perf_evlist *evlist)
Definition: parse-events.c:152
static struct evlist_test test__events[]
static struct evlist_test test__events_pmu[]
static bool perf_evsel__is_group_leader(const struct perf_evsel *evsel)
Definition: evsel.h:380
static int test__leader_sample1(struct perf_evlist *evlist)
const char * name
static int test__checkevent_raw_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:228
static int test__checkevent_exclude_idle_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:308
int(* check)(struct perf_evlist *evlist)
static int test__checkevent_numeric(struct perf_evlist *evlist)
Definition: parse-events.c:62
char * name
Definition: evsel.h:102
int sample_read
Definition: evsel.h:134
static int test__checkevent_config_raw(struct perf_evlist *evlist)
static bool evsel__has_callchain(const struct perf_evsel *evsel)
Definition: evsel.h:462
static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:395
static int test__group4(struct perf_evlist *evlist __maybe_unused)
Definition: parse-events.c:800
static int test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:210
const int id
static int test__checkevent_list(struct perf_evlist *evlist)
Definition: parse-events.c:428
static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist)
Definition: parse-events.c:197
static int test__checkevent_breakpoint_len_rw_modifier(struct perf_evlist *evlist)
struct perf_evlist * perf_evlist__new(void)
Definition: evlist.c:54
struct perf_event_attr attr
Definition: evsel.h:93
static int test__checkevent_symbolic_name(struct perf_evlist *evlist)
Definition: parse-events.c:72