diff options
Diffstat (limited to 'tools/perf/tests/parse-events.c')
-rw-r--r-- | tools/perf/tests/parse-events.c | 190 |
1 files changed, 173 insertions, 17 deletions
diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 0275bab4ea9e..48114d164e9f 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c | |||
@@ -7,14 +7,6 @@ | |||
7 | #include "tests.h" | 7 | #include "tests.h" |
8 | #include <linux/hw_breakpoint.h> | 8 | #include <linux/hw_breakpoint.h> |
9 | 9 | ||
10 | #define TEST_ASSERT_VAL(text, cond) \ | ||
11 | do { \ | ||
12 | if (!(cond)) { \ | ||
13 | pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \ | ||
14 | return -1; \ | ||
15 | } \ | ||
16 | } while (0) | ||
17 | |||
18 | #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ | 10 | #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \ |
19 | PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) | 11 | PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD) |
20 | 12 | ||
@@ -460,6 +452,7 @@ static int test__checkevent_pmu_events(struct perf_evlist *evlist) | |||
460 | evsel->attr.exclude_kernel); | 452 | evsel->attr.exclude_kernel); |
461 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | 453 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); |
462 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 454 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
455 | TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); | ||
463 | 456 | ||
464 | return 0; | 457 | return 0; |
465 | } | 458 | } |
@@ -528,6 +521,7 @@ static int test__group1(struct perf_evlist *evlist) | |||
528 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | 521 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
529 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | 522 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
530 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | 523 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); |
524 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
531 | 525 | ||
532 | /* cycles:upp */ | 526 | /* cycles:upp */ |
533 | evsel = perf_evsel__next(evsel); | 527 | evsel = perf_evsel__next(evsel); |
@@ -543,6 +537,7 @@ static int test__group1(struct perf_evlist *evlist) | |||
543 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); | 537 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); |
544 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | 538 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); |
545 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | 539 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
540 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
546 | 541 | ||
547 | return 0; | 542 | return 0; |
548 | } | 543 | } |
@@ -568,6 +563,7 @@ static int test__group2(struct perf_evlist *evlist) | |||
568 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | 563 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
569 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | 564 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
570 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | 565 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); |
566 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
571 | 567 | ||
572 | /* cache-references + :u modifier */ | 568 | /* cache-references + :u modifier */ |
573 | evsel = perf_evsel__next(evsel); | 569 | evsel = perf_evsel__next(evsel); |
@@ -582,6 +578,7 @@ static int test__group2(struct perf_evlist *evlist) | |||
582 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 578 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
583 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | 579 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); |
584 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | 580 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
581 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
585 | 582 | ||
586 | /* cycles:k */ | 583 | /* cycles:k */ |
587 | evsel = perf_evsel__next(evsel); | 584 | evsel = perf_evsel__next(evsel); |
@@ -595,6 +592,7 @@ static int test__group2(struct perf_evlist *evlist) | |||
595 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | 592 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); |
596 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 593 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
597 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | 594 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
595 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
598 | 596 | ||
599 | return 0; | 597 | return 0; |
600 | } | 598 | } |
@@ -623,6 +621,7 @@ static int test__group3(struct perf_evlist *evlist __maybe_unused) | |||
623 | !strcmp(leader->group_name, "group1")); | 621 | !strcmp(leader->group_name, "group1")); |
624 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | 622 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
625 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | 623 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); |
624 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
626 | 625 | ||
627 | /* group1 cycles:kppp */ | 626 | /* group1 cycles:kppp */ |
628 | evsel = perf_evsel__next(evsel); | 627 | evsel = perf_evsel__next(evsel); |
@@ -639,6 +638,7 @@ static int test__group3(struct perf_evlist *evlist __maybe_unused) | |||
639 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | 638 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); |
640 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | 639 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); |
641 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | 640 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
641 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
642 | 642 | ||
643 | /* group2 cycles + G modifier */ | 643 | /* group2 cycles + G modifier */ |
644 | evsel = leader = perf_evsel__next(evsel); | 644 | evsel = leader = perf_evsel__next(evsel); |
@@ -656,6 +656,7 @@ static int test__group3(struct perf_evlist *evlist __maybe_unused) | |||
656 | !strcmp(leader->group_name, "group2")); | 656 | !strcmp(leader->group_name, "group2")); |
657 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | 657 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
658 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | 658 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); |
659 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
659 | 660 | ||
660 | /* group2 1:3 + G modifier */ | 661 | /* group2 1:3 + G modifier */ |
661 | evsel = perf_evsel__next(evsel); | 662 | evsel = perf_evsel__next(evsel); |
@@ -669,6 +670,7 @@ static int test__group3(struct perf_evlist *evlist __maybe_unused) | |||
669 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 670 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
670 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | 671 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); |
671 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | 672 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
673 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
672 | 674 | ||
673 | /* instructions:u */ | 675 | /* instructions:u */ |
674 | evsel = perf_evsel__next(evsel); | 676 | evsel = perf_evsel__next(evsel); |
@@ -682,6 +684,7 @@ static int test__group3(struct perf_evlist *evlist __maybe_unused) | |||
682 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | 684 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); |
683 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 685 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
684 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | 686 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
687 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
685 | 688 | ||
686 | return 0; | 689 | return 0; |
687 | } | 690 | } |
@@ -709,6 +712,7 @@ static int test__group4(struct perf_evlist *evlist __maybe_unused) | |||
709 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | 712 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
710 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | 713 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
711 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | 714 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); |
715 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
712 | 716 | ||
713 | /* instructions:kp + p */ | 717 | /* instructions:kp + p */ |
714 | evsel = perf_evsel__next(evsel); | 718 | evsel = perf_evsel__next(evsel); |
@@ -724,6 +728,7 @@ static int test__group4(struct perf_evlist *evlist __maybe_unused) | |||
724 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); | 728 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip == 2); |
725 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | 729 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); |
726 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | 730 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
731 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
727 | 732 | ||
728 | return 0; | 733 | return 0; |
729 | } | 734 | } |
@@ -750,6 +755,7 @@ static int test__group5(struct perf_evlist *evlist __maybe_unused) | |||
750 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | 755 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
751 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | 756 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
752 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | 757 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); |
758 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
753 | 759 | ||
754 | /* instructions + G */ | 760 | /* instructions + G */ |
755 | evsel = perf_evsel__next(evsel); | 761 | evsel = perf_evsel__next(evsel); |
@@ -764,6 +770,7 @@ static int test__group5(struct perf_evlist *evlist __maybe_unused) | |||
764 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | 770 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); |
765 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | 771 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); |
766 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); | 772 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 1); |
773 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
767 | 774 | ||
768 | /* cycles:G */ | 775 | /* cycles:G */ |
769 | evsel = leader = perf_evsel__next(evsel); | 776 | evsel = leader = perf_evsel__next(evsel); |
@@ -780,6 +787,7 @@ static int test__group5(struct perf_evlist *evlist __maybe_unused) | |||
780 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); | 787 | TEST_ASSERT_VAL("wrong leader", perf_evsel__is_group_leader(evsel)); |
781 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); | 788 | TEST_ASSERT_VAL("wrong nr_members", evsel->nr_members == 2); |
782 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); | 789 | TEST_ASSERT_VAL("wrong group_idx", perf_evsel__group_idx(evsel) == 0); |
790 | TEST_ASSERT_VAL("wrong sample_read", !evsel->sample_read); | ||
783 | 791 | ||
784 | /* instructions:G */ | 792 | /* instructions:G */ |
785 | evsel = perf_evsel__next(evsel); | 793 | evsel = perf_evsel__next(evsel); |
@@ -971,6 +979,142 @@ static int test__group_gh4(struct perf_evlist *evlist) | |||
971 | return 0; | 979 | return 0; |
972 | } | 980 | } |
973 | 981 | ||
982 | static int test__leader_sample1(struct perf_evlist *evlist) | ||
983 | { | ||
984 | struct perf_evsel *evsel, *leader; | ||
985 | |||
986 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | ||
987 | |||
988 | /* cycles - sampling group leader */ | ||
989 | evsel = leader = perf_evlist__first(evlist); | ||
990 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
991 | TEST_ASSERT_VAL("wrong config", | ||
992 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
993 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
994 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
995 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
996 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | ||
997 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
998 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
999 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
1000 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
1001 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | ||
1002 | |||
1003 | /* cache-misses - not sampling */ | ||
1004 | evsel = perf_evsel__next(evsel); | ||
1005 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
1006 | TEST_ASSERT_VAL("wrong config", | ||
1007 | PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); | ||
1008 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
1009 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
1010 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
1011 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | ||
1012 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
1013 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
1014 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
1015 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | ||
1016 | |||
1017 | /* branch-misses - not sampling */ | ||
1018 | evsel = perf_evsel__next(evsel); | ||
1019 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
1020 | TEST_ASSERT_VAL("wrong config", | ||
1021 | PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); | ||
1022 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
1023 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
1024 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
1025 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | ||
1026 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
1027 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
1028 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
1029 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
1030 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | ||
1031 | |||
1032 | return 0; | ||
1033 | } | ||
1034 | |||
1035 | static int test__leader_sample2(struct perf_evlist *evlist __maybe_unused) | ||
1036 | { | ||
1037 | struct perf_evsel *evsel, *leader; | ||
1038 | |||
1039 | TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->nr_entries); | ||
1040 | |||
1041 | /* instructions - sampling group leader */ | ||
1042 | evsel = leader = perf_evlist__first(evlist); | ||
1043 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
1044 | TEST_ASSERT_VAL("wrong config", | ||
1045 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | ||
1046 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
1047 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
1048 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
1049 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | ||
1050 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
1051 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
1052 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
1053 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
1054 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | ||
1055 | |||
1056 | /* branch-misses - not sampling */ | ||
1057 | evsel = perf_evsel__next(evsel); | ||
1058 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
1059 | TEST_ASSERT_VAL("wrong config", | ||
1060 | PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); | ||
1061 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
1062 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
1063 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
1064 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | ||
1065 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
1066 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
1067 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
1068 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
1069 | TEST_ASSERT_VAL("wrong sample_read", evsel->sample_read); | ||
1070 | |||
1071 | return 0; | ||
1072 | } | ||
1073 | |||
1074 | static int test__checkevent_pinned_modifier(struct perf_evlist *evlist) | ||
1075 | { | ||
1076 | struct perf_evsel *evsel = perf_evlist__first(evlist); | ||
1077 | |||
1078 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
1079 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
1080 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
1081 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | ||
1082 | TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned); | ||
1083 | |||
1084 | return test__checkevent_symbolic_name(evlist); | ||
1085 | } | ||
1086 | |||
1087 | static int test__pinned_group(struct perf_evlist *evlist) | ||
1088 | { | ||
1089 | struct perf_evsel *evsel, *leader; | ||
1090 | |||
1091 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | ||
1092 | |||
1093 | /* cycles - group leader */ | ||
1094 | evsel = leader = perf_evlist__first(evlist); | ||
1095 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
1096 | TEST_ASSERT_VAL("wrong config", | ||
1097 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
1098 | TEST_ASSERT_VAL("wrong group name", !evsel->group_name); | ||
1099 | TEST_ASSERT_VAL("wrong leader", evsel->leader == leader); | ||
1100 | TEST_ASSERT_VAL("wrong pinned", evsel->attr.pinned); | ||
1101 | |||
1102 | /* cache-misses - can not be pinned, but will go on with the leader */ | ||
1103 | evsel = perf_evsel__next(evsel); | ||
1104 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
1105 | TEST_ASSERT_VAL("wrong config", | ||
1106 | PERF_COUNT_HW_CACHE_MISSES == evsel->attr.config); | ||
1107 | TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); | ||
1108 | |||
1109 | /* branch-misses - ditto */ | ||
1110 | evsel = perf_evsel__next(evsel); | ||
1111 | TEST_ASSERT_VAL("wrong config", | ||
1112 | PERF_COUNT_HW_BRANCH_MISSES == evsel->attr.config); | ||
1113 | TEST_ASSERT_VAL("wrong pinned", !evsel->attr.pinned); | ||
1114 | |||
1115 | return 0; | ||
1116 | } | ||
1117 | |||
974 | static int count_tracepoints(void) | 1118 | static int count_tracepoints(void) |
975 | { | 1119 | { |
976 | char events_path[PATH_MAX]; | 1120 | char events_path[PATH_MAX]; |
@@ -1187,6 +1331,22 @@ static struct evlist_test test__events[] = { | |||
1187 | .name = "{cycles:G,cache-misses:H}:uG", | 1331 | .name = "{cycles:G,cache-misses:H}:uG", |
1188 | .check = test__group_gh4, | 1332 | .check = test__group_gh4, |
1189 | }, | 1333 | }, |
1334 | [38] = { | ||
1335 | .name = "{cycles,cache-misses,branch-misses}:S", | ||
1336 | .check = test__leader_sample1, | ||
1337 | }, | ||
1338 | [39] = { | ||
1339 | .name = "{instructions,branch-misses}:Su", | ||
1340 | .check = test__leader_sample2, | ||
1341 | }, | ||
1342 | [40] = { | ||
1343 | .name = "instructions:uDp", | ||
1344 | .check = test__checkevent_pinned_modifier, | ||
1345 | }, | ||
1346 | [41] = { | ||
1347 | .name = "{cycles,cache-misses,branch-misses}:D", | ||
1348 | .check = test__pinned_group, | ||
1349 | }, | ||
1190 | }; | 1350 | }; |
1191 | 1351 | ||
1192 | static struct evlist_test test__events_pmu[] = { | 1352 | static struct evlist_test test__events_pmu[] = { |
@@ -1254,24 +1414,20 @@ static int test_events(struct evlist_test *events, unsigned cnt) | |||
1254 | 1414 | ||
1255 | static int test_term(struct terms_test *t) | 1415 | static int test_term(struct terms_test *t) |
1256 | { | 1416 | { |
1257 | struct list_head *terms; | 1417 | struct list_head terms; |
1258 | int ret; | 1418 | int ret; |
1259 | 1419 | ||
1260 | terms = malloc(sizeof(*terms)); | 1420 | INIT_LIST_HEAD(&terms); |
1261 | if (!terms) | ||
1262 | return -ENOMEM; | ||
1263 | |||
1264 | INIT_LIST_HEAD(terms); | ||
1265 | 1421 | ||
1266 | ret = parse_events_terms(terms, t->str); | 1422 | ret = parse_events_terms(&terms, t->str); |
1267 | if (ret) { | 1423 | if (ret) { |
1268 | pr_debug("failed to parse terms '%s', err %d\n", | 1424 | pr_debug("failed to parse terms '%s', err %d\n", |
1269 | t->str , ret); | 1425 | t->str , ret); |
1270 | return ret; | 1426 | return ret; |
1271 | } | 1427 | } |
1272 | 1428 | ||
1273 | ret = t->check(terms); | 1429 | ret = t->check(&terms); |
1274 | parse_events__free_terms(terms); | 1430 | parse_events__free_terms(&terms); |
1275 | 1431 | ||
1276 | return ret; | 1432 | return ret; |
1277 | } | 1433 | } |