diff options
Diffstat (limited to 'tools/perf/util/parse-events-test.c')
| -rw-r--r-- | tools/perf/util/parse-events-test.c | 424 |
1 files changed, 346 insertions, 78 deletions
diff --git a/tools/perf/util/parse-events-test.c b/tools/perf/util/parse-events-test.c index 607dd290b319..28c18d1d52c3 100644 --- a/tools/perf/util/parse-events-test.c +++ b/tools/perf/util/parse-events-test.c | |||
| @@ -18,8 +18,7 @@ do { \ | |||
| 18 | 18 | ||
| 19 | static int test__checkevent_tracepoint(struct perf_evlist *evlist) | 19 | static int test__checkevent_tracepoint(struct perf_evlist *evlist) |
| 20 | { | 20 | { |
| 21 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 21 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 22 | struct perf_evsel, node); | ||
| 23 | 22 | ||
| 24 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 23 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 25 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); | 24 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); |
| @@ -48,8 +47,7 @@ static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) | |||
| 48 | 47 | ||
| 49 | static int test__checkevent_raw(struct perf_evlist *evlist) | 48 | static int test__checkevent_raw(struct perf_evlist *evlist) |
| 50 | { | 49 | { |
| 51 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 50 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 52 | struct perf_evsel, node); | ||
| 53 | 51 | ||
| 54 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 52 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 55 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | 53 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); |
| @@ -59,8 +57,7 @@ static int test__checkevent_raw(struct perf_evlist *evlist) | |||
| 59 | 57 | ||
| 60 | static int test__checkevent_numeric(struct perf_evlist *evlist) | 58 | static int test__checkevent_numeric(struct perf_evlist *evlist) |
| 61 | { | 59 | { |
| 62 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 60 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 63 | struct perf_evsel, node); | ||
| 64 | 61 | ||
| 65 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 62 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 66 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); | 63 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); |
| @@ -70,8 +67,7 @@ static int test__checkevent_numeric(struct perf_evlist *evlist) | |||
| 70 | 67 | ||
| 71 | static int test__checkevent_symbolic_name(struct perf_evlist *evlist) | 68 | static int test__checkevent_symbolic_name(struct perf_evlist *evlist) |
| 72 | { | 69 | { |
| 73 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 70 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 74 | struct perf_evsel, node); | ||
| 75 | 71 | ||
| 76 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 72 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 77 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | 73 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
| @@ -82,8 +78,7 @@ static int test__checkevent_symbolic_name(struct perf_evlist *evlist) | |||
| 82 | 78 | ||
| 83 | static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) | 79 | static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) |
| 84 | { | 80 | { |
| 85 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 81 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 86 | struct perf_evsel, node); | ||
| 87 | 82 | ||
| 88 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 83 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 89 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | 84 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); |
| @@ -100,8 +95,7 @@ static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) | |||
| 100 | 95 | ||
| 101 | static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) | 96 | static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) |
| 102 | { | 97 | { |
| 103 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 98 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 104 | struct perf_evsel, node); | ||
| 105 | 99 | ||
| 106 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 100 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 107 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); | 101 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); |
| @@ -112,8 +106,7 @@ static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) | |||
| 112 | 106 | ||
| 113 | static int test__checkevent_genhw(struct perf_evlist *evlist) | 107 | static int test__checkevent_genhw(struct perf_evlist *evlist) |
| 114 | { | 108 | { |
| 115 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 109 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 116 | struct perf_evsel, node); | ||
| 117 | 110 | ||
| 118 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 111 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 119 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); | 112 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); |
| @@ -123,8 +116,7 @@ static int test__checkevent_genhw(struct perf_evlist *evlist) | |||
| 123 | 116 | ||
| 124 | static int test__checkevent_breakpoint(struct perf_evlist *evlist) | 117 | static int test__checkevent_breakpoint(struct perf_evlist *evlist) |
| 125 | { | 118 | { |
| 126 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 119 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 127 | struct perf_evsel, node); | ||
| 128 | 120 | ||
| 129 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 121 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 130 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); | 122 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); |
| @@ -138,8 +130,7 @@ static int test__checkevent_breakpoint(struct perf_evlist *evlist) | |||
| 138 | 130 | ||
| 139 | static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) | 131 | static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) |
| 140 | { | 132 | { |
| 141 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 133 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 142 | struct perf_evsel, node); | ||
| 143 | 134 | ||
| 144 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 135 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 145 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); | 136 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); |
| @@ -152,8 +143,7 @@ static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) | |||
| 152 | 143 | ||
| 153 | static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) | 144 | static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) |
| 154 | { | 145 | { |
| 155 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 146 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 156 | struct perf_evsel, node); | ||
| 157 | 147 | ||
| 158 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 148 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 159 | TEST_ASSERT_VAL("wrong type", | 149 | TEST_ASSERT_VAL("wrong type", |
| @@ -168,8 +158,7 @@ static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) | |||
| 168 | 158 | ||
| 169 | static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) | 159 | static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) |
| 170 | { | 160 | { |
| 171 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 161 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 172 | struct perf_evsel, node); | ||
| 173 | 162 | ||
| 174 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 163 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 175 | TEST_ASSERT_VAL("wrong type", | 164 | TEST_ASSERT_VAL("wrong type", |
| @@ -184,8 +173,7 @@ static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) | |||
| 184 | 173 | ||
| 185 | static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) | 174 | static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) |
| 186 | { | 175 | { |
| 187 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 176 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 188 | struct perf_evsel, node); | ||
| 189 | 177 | ||
| 190 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 178 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 191 | TEST_ASSERT_VAL("wrong type", | 179 | TEST_ASSERT_VAL("wrong type", |
| @@ -200,8 +188,7 @@ static int test__checkevent_breakpoint_rw(struct perf_evlist *evlist) | |||
| 200 | 188 | ||
| 201 | static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) | 189 | static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) |
| 202 | { | 190 | { |
| 203 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 191 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 204 | struct perf_evsel, node); | ||
| 205 | 192 | ||
| 206 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 193 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| 207 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | 194 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); |
| @@ -232,8 +219,7 @@ test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) | |||
| 232 | 219 | ||
| 233 | static int test__checkevent_raw_modifier(struct perf_evlist *evlist) | 220 | static int test__checkevent_raw_modifier(struct perf_evlist *evlist) |
| 234 | { | 221 | { |
| 235 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 222 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 236 | struct perf_evsel, node); | ||
| 237 | 223 | ||
| 238 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 224 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| 239 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | 225 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); |
| @@ -245,8 +231,7 @@ static int test__checkevent_raw_modifier(struct perf_evlist *evlist) | |||
| 245 | 231 | ||
| 246 | static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) | 232 | static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) |
| 247 | { | 233 | { |
| 248 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 234 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 249 | struct perf_evsel, node); | ||
| 250 | 235 | ||
| 251 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 236 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| 252 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | 237 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); |
| @@ -258,8 +243,7 @@ static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) | |||
| 258 | 243 | ||
| 259 | static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) | 244 | static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) |
| 260 | { | 245 | { |
| 261 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 246 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 262 | struct perf_evsel, node); | ||
| 263 | 247 | ||
| 264 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 248 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| 265 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | 249 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); |
| @@ -271,8 +255,7 @@ static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) | |||
| 271 | 255 | ||
| 272 | static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) | 256 | static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) |
| 273 | { | 257 | { |
| 274 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 258 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 275 | struct perf_evsel, node); | ||
| 276 | 259 | ||
| 277 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | 260 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); |
| 278 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | 261 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); |
| @@ -282,8 +265,7 @@ static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) | |||
| 282 | 265 | ||
| 283 | static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) | 266 | static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) |
| 284 | { | 267 | { |
| 285 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 268 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 286 | struct perf_evsel, node); | ||
| 287 | 269 | ||
| 288 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | 270 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); |
| 289 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | 271 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); |
| @@ -293,8 +275,7 @@ static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) | |||
| 293 | 275 | ||
| 294 | static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) | 276 | static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) |
| 295 | { | 277 | { |
| 296 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 278 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 297 | struct perf_evsel, node); | ||
| 298 | 279 | ||
| 299 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | 280 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); |
| 300 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | 281 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); |
| @@ -306,8 +287,7 @@ static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) | |||
| 306 | 287 | ||
| 307 | static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) | 288 | static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) |
| 308 | { | 289 | { |
| 309 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 290 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 310 | struct perf_evsel, node); | ||
| 311 | 291 | ||
| 312 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 292 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| 313 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | 293 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); |
| @@ -319,75 +299,71 @@ static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) | |||
| 319 | 299 | ||
| 320 | static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) | 300 | static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) |
| 321 | { | 301 | { |
| 322 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 302 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 323 | struct perf_evsel, node); | 303 | |
| 324 | 304 | ||
| 325 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | 305 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); |
| 326 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | 306 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); |
| 327 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | 307 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); |
| 328 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 308 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
| 329 | TEST_ASSERT_VAL("wrong name", | 309 | TEST_ASSERT_VAL("wrong name", |
| 330 | !strcmp(perf_evsel__name(evsel), "mem:0x0:rw:u")); | 310 | !strcmp(perf_evsel__name(evsel), "mem:0:u")); |
| 331 | 311 | ||
| 332 | return test__checkevent_breakpoint(evlist); | 312 | return test__checkevent_breakpoint(evlist); |
| 333 | } | 313 | } |
| 334 | 314 | ||
| 335 | static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) | 315 | static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) |
| 336 | { | 316 | { |
| 337 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 317 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 338 | struct perf_evsel, node); | ||
| 339 | 318 | ||
| 340 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 319 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| 341 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | 320 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); |
| 342 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | 321 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); |
| 343 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 322 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
| 344 | TEST_ASSERT_VAL("wrong name", | 323 | TEST_ASSERT_VAL("wrong name", |
| 345 | !strcmp(perf_evsel__name(evsel), "mem:0x0:x:k")); | 324 | !strcmp(perf_evsel__name(evsel), "mem:0:x:k")); |
| 346 | 325 | ||
| 347 | return test__checkevent_breakpoint_x(evlist); | 326 | return test__checkevent_breakpoint_x(evlist); |
| 348 | } | 327 | } |
| 349 | 328 | ||
| 350 | static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) | 329 | static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) |
| 351 | { | 330 | { |
| 352 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 331 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 353 | struct perf_evsel, node); | ||
| 354 | 332 | ||
| 355 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 333 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| 356 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | 334 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); |
| 357 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | 335 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); |
| 358 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | 336 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); |
| 359 | TEST_ASSERT_VAL("wrong name", | 337 | TEST_ASSERT_VAL("wrong name", |
| 360 | !strcmp(perf_evsel__name(evsel), "mem:0x0:r:hp")); | 338 | !strcmp(perf_evsel__name(evsel), "mem:0:r:hp")); |
| 361 | 339 | ||
| 362 | return test__checkevent_breakpoint_r(evlist); | 340 | return test__checkevent_breakpoint_r(evlist); |
| 363 | } | 341 | } |
| 364 | 342 | ||
| 365 | static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) | 343 | static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) |
| 366 | { | 344 | { |
| 367 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 345 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 368 | struct perf_evsel, node); | ||
| 369 | 346 | ||
| 370 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | 347 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); |
| 371 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | 348 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); |
| 372 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | 349 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); |
| 373 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | 350 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); |
| 374 | TEST_ASSERT_VAL("wrong name", | 351 | TEST_ASSERT_VAL("wrong name", |
| 375 | !strcmp(perf_evsel__name(evsel), "mem:0x0:w:up")); | 352 | !strcmp(perf_evsel__name(evsel), "mem:0:w:up")); |
| 376 | 353 | ||
| 377 | return test__checkevent_breakpoint_w(evlist); | 354 | return test__checkevent_breakpoint_w(evlist); |
| 378 | } | 355 | } |
| 379 | 356 | ||
| 380 | static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) | 357 | static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) |
| 381 | { | 358 | { |
| 382 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 359 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 383 | struct perf_evsel, node); | ||
| 384 | 360 | ||
| 385 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 361 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| 386 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | 362 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); |
| 387 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | 363 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); |
| 388 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | 364 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); |
| 389 | TEST_ASSERT_VAL("wrong name", | 365 | TEST_ASSERT_VAL("wrong name", |
| 390 | !strcmp(perf_evsel__name(evsel), "mem:0x0:rw:kp")); | 366 | !strcmp(perf_evsel__name(evsel), "mem:0:rw:kp")); |
| 391 | 367 | ||
| 392 | return test__checkevent_breakpoint_rw(evlist); | 368 | return test__checkevent_breakpoint_rw(evlist); |
| 393 | } | 369 | } |
| @@ -395,8 +371,7 @@ static int test__checkevent_breakpoint_rw_modifier(struct perf_evlist *evlist) | |||
| 395 | static int test__checkevent_pmu(struct perf_evlist *evlist) | 371 | static int test__checkevent_pmu(struct perf_evlist *evlist) |
| 396 | { | 372 | { |
| 397 | 373 | ||
| 398 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | 374 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 399 | struct perf_evsel, node); | ||
| 400 | 375 | ||
| 401 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | 376 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); |
| 402 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | 377 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); |
| @@ -410,12 +385,11 @@ static int test__checkevent_pmu(struct perf_evlist *evlist) | |||
| 410 | 385 | ||
| 411 | static int test__checkevent_list(struct perf_evlist *evlist) | 386 | static int test__checkevent_list(struct perf_evlist *evlist) |
| 412 | { | 387 | { |
| 413 | struct perf_evsel *evsel; | 388 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 414 | 389 | ||
| 415 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | 390 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); |
| 416 | 391 | ||
| 417 | /* r1 */ | 392 | /* r1 */ |
| 418 | evsel = list_entry(evlist->entries.next, struct perf_evsel, node); | ||
| 419 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | 393 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); |
| 420 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | 394 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); |
| 421 | TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); | 395 | TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); |
| @@ -426,7 +400,7 @@ static int test__checkevent_list(struct perf_evlist *evlist) | |||
| 426 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 400 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
| 427 | 401 | ||
| 428 | /* syscalls:sys_enter_open:k */ | 402 | /* syscalls:sys_enter_open:k */ |
| 429 | evsel = list_entry(evsel->node.next, struct perf_evsel, node); | 403 | evsel = perf_evsel__next(evsel); |
| 430 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); | 404 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); |
| 431 | TEST_ASSERT_VAL("wrong sample_type", | 405 | TEST_ASSERT_VAL("wrong sample_type", |
| 432 | PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); | 406 | PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); |
| @@ -437,7 +411,7 @@ static int test__checkevent_list(struct perf_evlist *evlist) | |||
| 437 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 411 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
| 438 | 412 | ||
| 439 | /* 1:1:hp */ | 413 | /* 1:1:hp */ |
| 440 | evsel = list_entry(evsel->node.next, struct perf_evsel, node); | 414 | evsel = perf_evsel__next(evsel); |
| 441 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); | 415 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); |
| 442 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | 416 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); |
| 443 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | 417 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); |
| @@ -450,22 +424,21 @@ static int test__checkevent_list(struct perf_evlist *evlist) | |||
| 450 | 424 | ||
| 451 | static int test__checkevent_pmu_name(struct perf_evlist *evlist) | 425 | static int test__checkevent_pmu_name(struct perf_evlist *evlist) |
| 452 | { | 426 | { |
| 453 | struct perf_evsel *evsel; | 427 | struct perf_evsel *evsel = perf_evlist__first(evlist); |
| 454 | 428 | ||
| 455 | /* cpu/config=1,name=krava/u */ | 429 | /* cpu/config=1,name=krava/u */ |
| 456 | evsel = list_entry(evlist->entries.next, struct perf_evsel, node); | ||
| 457 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | 430 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); |
| 458 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | 431 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); |
| 459 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | 432 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); |
| 460 | TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); | 433 | TEST_ASSERT_VAL("wrong name", !strcmp(perf_evsel__name(evsel), "krava")); |
| 461 | 434 | ||
| 462 | /* cpu/config=2/u" */ | 435 | /* cpu/config=2/u" */ |
| 463 | evsel = list_entry(evsel->node.next, struct perf_evsel, node); | 436 | evsel = perf_evsel__next(evsel); |
| 464 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | 437 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); |
| 465 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | 438 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); |
| 466 | TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); | 439 | TEST_ASSERT_VAL("wrong config", 2 == evsel->attr.config); |
| 467 | TEST_ASSERT_VAL("wrong name", | 440 | TEST_ASSERT_VAL("wrong name", |
| 468 | !strcmp(perf_evsel__name(evsel), "raw 0x2:u")); | 441 | !strcmp(perf_evsel__name(evsel), "cpu/config=2/u")); |
| 469 | 442 | ||
| 470 | return 0; | 443 | return 0; |
| 471 | } | 444 | } |
| @@ -513,6 +486,280 @@ static int test__checkterms_simple(struct list_head *terms) | |||
| 513 | return 0; | 486 | return 0; |
| 514 | } | 487 | } |
| 515 | 488 | ||
| 489 | static int test__group1(struct perf_evlist *evlist) | ||
| 490 | { | ||
| 491 | struct perf_evsel *evsel, *leader; | ||
| 492 | |||
| 493 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | ||
| 494 | |||
| 495 | /* instructions:k */ | ||
| 496 | evsel = leader = perf_evlist__first(evlist); | ||
| 497 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 498 | TEST_ASSERT_VAL("wrong config", | ||
| 499 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | ||
| 500 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
| 501 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 502 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 503 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 504 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 505 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 506 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 507 | |||
| 508 | /* cycles:upp */ | ||
| 509 | evsel = perf_evsel__next(evsel); | ||
| 510 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 511 | TEST_ASSERT_VAL("wrong config", | ||
| 512 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
| 513 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 514 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
| 515 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 516 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 517 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 518 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); | ||
| 519 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
| 520 | |||
| 521 | return 0; | ||
| 522 | } | ||
| 523 | |||
| 524 | static int test__group2(struct perf_evlist *evlist) | ||
| 525 | { | ||
| 526 | struct perf_evsel *evsel, *leader; | ||
| 527 | |||
| 528 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | ||
| 529 | |||
| 530 | /* faults + :ku modifier */ | ||
| 531 | evsel = leader = perf_evlist__first(evlist); | ||
| 532 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); | ||
| 533 | TEST_ASSERT_VAL("wrong config", | ||
| 534 | PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); | ||
| 535 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 536 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 537 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 538 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 539 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 540 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 541 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 542 | |||
| 543 | /* cache-references + :u modifier */ | ||
| 544 | evsel = perf_evsel__next(evsel); | ||
| 545 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 546 | TEST_ASSERT_VAL("wrong config", | ||
| 547 | PERF_COUNT_HW_CACHE_REFERENCES == evsel->attr.config); | ||
| 548 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 549 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
| 550 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 551 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 552 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 553 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 554 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
| 555 | |||
| 556 | /* cycles:k */ | ||
| 557 | evsel = perf_evsel__next(evsel); | ||
| 558 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 559 | TEST_ASSERT_VAL("wrong config", | ||
| 560 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
| 561 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
| 562 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 563 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 564 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 565 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 566 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 567 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 568 | |||
| 569 | return 0; | ||
| 570 | } | ||
| 571 | |||
| 572 | static int test__group3(struct perf_evlist *evlist __maybe_unused) | ||
| 573 | { | ||
| 574 | struct perf_evsel *evsel, *leader; | ||
| 575 | |||
| 576 | TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); | ||
| 577 | |||
| 578 | /* group1 syscalls:sys_enter_open:H */ | ||
| 579 | evsel = leader = perf_evlist__first(evlist); | ||
| 580 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); | ||
| 581 | TEST_ASSERT_VAL("wrong sample_type", | ||
| 582 | PERF_TP_SAMPLE_TYPE == evsel->attr.sample_type); | ||
| 583 | TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); | ||
| 584 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 585 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 586 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
| 587 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | ||
| 588 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 589 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 590 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 591 | TEST_ASSERT_VAL("wrong group name", | ||
| 592 | !strcmp(leader->group_name, "group1")); | ||
| 593 | |||
| 594 | /* group1 cycles:kppp */ | ||
| 595 | evsel = perf_evsel__next(evsel); | ||
| 596 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 597 | TEST_ASSERT_VAL("wrong config", | ||
| 598 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
| 599 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
| 600 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 601 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 602 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 603 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 604 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 3); | ||
| 605 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
| 606 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
| 607 | |||
| 608 | /* group2 cycles + G modifier */ | ||
| 609 | evsel = leader = perf_evsel__next(evsel); | ||
| 610 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 611 | TEST_ASSERT_VAL("wrong config", | ||
| 612 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
| 613 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 614 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 615 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
| 616 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 617 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | ||
| 618 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 619 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 620 | TEST_ASSERT_VAL("wrong group name", | ||
| 621 | !strcmp(leader->group_name, "group2")); | ||
| 622 | |||
| 623 | /* group2 1:3 + G modifier */ | ||
| 624 | evsel = perf_evsel__next(evsel); | ||
| 625 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); | ||
| 626 | TEST_ASSERT_VAL("wrong config", 3 == evsel->attr.config); | ||
| 627 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 628 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 629 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
| 630 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 631 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | ||
| 632 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 633 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
| 634 | |||
| 635 | /* instructions:u */ | ||
| 636 | evsel = perf_evsel__next(evsel); | ||
| 637 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 638 | TEST_ASSERT_VAL("wrong config", | ||
| 639 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | ||
| 640 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 641 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
| 642 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 643 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 644 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 645 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 646 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 647 | |||
| 648 | return 0; | ||
| 649 | } | ||
| 650 | |||
| 651 | static int test__group4(struct perf_evlist *evlist __maybe_unused) | ||
| 652 | { | ||
| 653 | struct perf_evsel *evsel, *leader; | ||
| 654 | |||
| 655 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | ||
| 656 | |||
| 657 | /* cycles:u + p */ | ||
| 658 | evsel = leader = perf_evlist__first(evlist); | ||
| 659 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 660 | TEST_ASSERT_VAL("wrong config", | ||
| 661 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
| 662 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 663 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
| 664 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 665 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 666 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 667 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 1); | ||
| 668 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
| 669 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 670 | |||
| 671 | /* instructions:kp + p */ | ||
| 672 | evsel = perf_evsel__next(evsel); | ||
| 673 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 674 | TEST_ASSERT_VAL("wrong config", | ||
| 675 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | ||
| 676 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
| 677 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 678 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
| 679 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 680 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 681 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); | ||
| 682 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
| 683 | |||
| 684 | return 0; | ||
| 685 | } | ||
| 686 | |||
| 687 | static int test__group5(struct perf_evlist *evlist __maybe_unused) | ||
| 688 | { | ||
| 689 | struct perf_evsel *evsel, *leader; | ||
| 690 | |||
| 691 | TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->nr_entries); | ||
| 692 | |||
| 693 | /* cycles + G */ | ||
| 694 | evsel = leader = perf_evlist__first(evlist); | ||
| 695 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 696 | TEST_ASSERT_VAL("wrong config", | ||
| 697 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
| 698 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 699 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 700 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
| 701 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 702 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | ||
| 703 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 704 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
| 705 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 706 | |||
| 707 | /* instructions + G */ | ||
| 708 | evsel = perf_evsel__next(evsel); | ||
| 709 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 710 | TEST_ASSERT_VAL("wrong config", | ||
| 711 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | ||
| 712 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 713 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 714 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
| 715 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 716 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | ||
| 717 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 718 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
| 719 | |||
| 720 | /* cycles:G */ | ||
| 721 | evsel = leader = perf_evsel__next(evsel); | ||
| 722 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 723 | TEST_ASSERT_VAL("wrong config", | ||
| 724 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
| 725 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 726 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 727 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
| 728 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 729 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | ||
| 730 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 731 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
| 732 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 733 | |||
| 734 | /* instructions:G */ | ||
| 735 | evsel = perf_evsel__next(evsel); | ||
| 736 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 737 | TEST_ASSERT_VAL("wrong config", | ||
| 738 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | ||
| 739 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 740 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 741 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
| 742 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
| 743 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | ||
| 744 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 745 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
| 746 | |||
| 747 | /* cycles */ | ||
| 748 | evsel = perf_evsel__next(evsel); | ||
| 749 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
| 750 | TEST_ASSERT_VAL("wrong config", | ||
| 751 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
| 752 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
| 753 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
| 754 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
| 755 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | ||
| 756 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
| 757 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
| 758 | TEST_ASSERT_VAL("wrong leader", evsel->leader == NULL); | ||
| 759 | |||
| 760 | return 0; | ||
| 761 | } | ||
| 762 | |||
| 516 | struct test__event_st { | 763 | struct test__event_st { |
| 517 | const char *name; | 764 | const char *name; |
| 518 | __u32 type; | 765 | __u32 type; |
| @@ -632,6 +879,26 @@ static struct test__event_st test__events[] = { | |||
| 632 | .name = "mem:0:rw:kp", | 879 | .name = "mem:0:rw:kp", |
| 633 | .check = test__checkevent_breakpoint_rw_modifier, | 880 | .check = test__checkevent_breakpoint_rw_modifier, |
| 634 | }, | 881 | }, |
| 882 | [28] = { | ||
| 883 | .name = "{instructions:k,cycles:upp}", | ||
| 884 | .check = test__group1, | ||
| 885 | }, | ||
| 886 | [29] = { | ||
| 887 | .name = "{faults:k,cache-references}:u,cycles:k", | ||
| 888 | .check = test__group2, | ||
| 889 | }, | ||
| 890 | [30] = { | ||
| 891 | .name = "group1{syscalls:sys_enter_open:H,cycles:kppp},group2{cycles,1:3}:G,instructions:u", | ||
| 892 | .check = test__group3, | ||
| 893 | }, | ||
| 894 | [31] = { | ||
| 895 | .name = "{cycles:u,instructions:kp}:p", | ||
| 896 | .check = test__group4, | ||
| 897 | }, | ||
| 898 | [32] = { | ||
| 899 | .name = "{cycles,instructions}:G,{cycles:G,instructions:G},cycles", | ||
| 900 | .check = test__group5, | ||
| 901 | }, | ||
| 635 | }; | 902 | }; |
| 636 | 903 | ||
| 637 | static struct test__event_st test__events_pmu[] = { | 904 | static struct test__event_st test__events_pmu[] = { |
| @@ -658,9 +925,6 @@ static struct test__term test__terms[] = { | |||
| 658 | }, | 925 | }, |
| 659 | }; | 926 | }; |
| 660 | 927 | ||
| 661 | #define TEST__TERMS_CNT (sizeof(test__terms) / \ | ||
| 662 | sizeof(struct test__term)) | ||
| 663 | |||
| 664 | static int test_event(struct test__event_st *e) | 928 | static int test_event(struct test__event_st *e) |
| 665 | { | 929 | { |
| 666 | struct perf_evlist *evlist; | 930 | struct perf_evlist *evlist; |
| @@ -685,19 +949,19 @@ static int test_event(struct test__event_st *e) | |||
| 685 | 949 | ||
| 686 | static int test_events(struct test__event_st *events, unsigned cnt) | 950 | static int test_events(struct test__event_st *events, unsigned cnt) |
| 687 | { | 951 | { |
| 688 | int ret = 0; | 952 | int ret1, ret2 = 0; |
| 689 | unsigned i; | 953 | unsigned i; |
| 690 | 954 | ||
| 691 | for (i = 0; i < cnt; i++) { | 955 | for (i = 0; i < cnt; i++) { |
| 692 | struct test__event_st *e = &events[i]; | 956 | struct test__event_st *e = &events[i]; |
| 693 | 957 | ||
| 694 | pr_debug("running test %d '%s'\n", i, e->name); | 958 | pr_debug("running test %d '%s'\n", i, e->name); |
| 695 | ret = test_event(e); | 959 | ret1 = test_event(e); |
| 696 | if (ret) | 960 | if (ret1) |
| 697 | break; | 961 | ret2 = ret1; |
| 698 | } | 962 | } |
| 699 | 963 | ||
| 700 | return ret; | 964 | return ret2; |
| 701 | } | 965 | } |
| 702 | 966 | ||
| 703 | static int test_term(struct test__term *t) | 967 | static int test_term(struct test__term *t) |
| @@ -758,13 +1022,13 @@ static int test_pmu(void) | |||
| 758 | 1022 | ||
| 759 | int parse_events__test(void) | 1023 | int parse_events__test(void) |
| 760 | { | 1024 | { |
| 761 | int ret; | 1025 | int ret1, ret2 = 0; |
| 762 | 1026 | ||
| 763 | #define TEST_EVENTS(tests) \ | 1027 | #define TEST_EVENTS(tests) \ |
| 764 | do { \ | 1028 | do { \ |
| 765 | ret = test_events(tests, ARRAY_SIZE(tests)); \ | 1029 | ret1 = test_events(tests, ARRAY_SIZE(tests)); \ |
| 766 | if (ret) \ | 1030 | if (!ret2) \ |
| 767 | return ret; \ | 1031 | ret2 = ret1; \ |
| 768 | } while (0) | 1032 | } while (0) |
| 769 | 1033 | ||
| 770 | TEST_EVENTS(test__events); | 1034 | TEST_EVENTS(test__events); |
| @@ -772,5 +1036,9 @@ do { \ | |||
| 772 | if (test_pmu()) | 1036 | if (test_pmu()) |
| 773 | TEST_EVENTS(test__events_pmu); | 1037 | TEST_EVENTS(test__events_pmu); |
| 774 | 1038 | ||
| 775 | return test_terms(test__terms, ARRAY_SIZE(test__terms)); | 1039 | ret1 = test_terms(test__terms, ARRAY_SIZE(test__terms)); |
| 1040 | if (!ret2) | ||
| 1041 | ret2 = ret1; | ||
| 1042 | |||
| 1043 | return ret2; | ||
| 776 | } | 1044 | } |
