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