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