diff options
author | Jiri Olsa <jolsa@redhat.com> | 2012-05-21 03:12:49 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2012-05-22 10:19:16 -0400 |
commit | f50246e2e2e33aacc68ac3ec41cf2d6a08860bc4 (patch) | |
tree | 68421df5c4808a0163d59a47c91e8fe4fe09f894 /tools/perf/builtin-test.c | |
parent | 73787190d04a34e6da745da893b3ae8bedde418f (diff) |
perf test: Move parse event automated tests to separated object
Moving event parsing specific tests into separated file:
util/parse-events-test.c
Also changing the code a bit to ease running separate tests.
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1337584373-2741-2-git-send-email-jolsa@redhat.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-test.c')
-rw-r--r-- | tools/perf/builtin-test.c | 552 |
1 files changed, 1 insertions, 551 deletions
diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c index 6c47376e29d8..5a8727c08757 100644 --- a/tools/perf/builtin-test.c +++ b/tools/perf/builtin-test.c | |||
@@ -604,556 +604,6 @@ out_free_threads: | |||
604 | #undef nsyscalls | 604 | #undef nsyscalls |
605 | } | 605 | } |
606 | 606 | ||
607 | #define TEST_ASSERT_VAL(text, cond) \ | ||
608 | do { \ | ||
609 | if (!(cond)) { \ | ||
610 | pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \ | ||
611 | return -1; \ | ||
612 | } \ | ||
613 | } while (0) | ||
614 | |||
615 | static int test__checkevent_tracepoint(struct perf_evlist *evlist) | ||
616 | { | ||
617 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
618 | struct perf_evsel, node); | ||
619 | |||
620 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
621 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); | ||
622 | TEST_ASSERT_VAL("wrong sample_type", | ||
623 | (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | PERF_SAMPLE_CPU) == | ||
624 | evsel->attr.sample_type); | ||
625 | TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); | ||
626 | return 0; | ||
627 | } | ||
628 | |||
629 | static int test__checkevent_tracepoint_multi(struct perf_evlist *evlist) | ||
630 | { | ||
631 | struct perf_evsel *evsel; | ||
632 | |||
633 | TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); | ||
634 | |||
635 | list_for_each_entry(evsel, &evlist->entries, node) { | ||
636 | TEST_ASSERT_VAL("wrong type", | ||
637 | PERF_TYPE_TRACEPOINT == evsel->attr.type); | ||
638 | TEST_ASSERT_VAL("wrong sample_type", | ||
639 | (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | PERF_SAMPLE_CPU) | ||
640 | == evsel->attr.sample_type); | ||
641 | TEST_ASSERT_VAL("wrong sample_period", | ||
642 | 1 == evsel->attr.sample_period); | ||
643 | } | ||
644 | return 0; | ||
645 | } | ||
646 | |||
647 | static int test__checkevent_raw(struct perf_evlist *evlist) | ||
648 | { | ||
649 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
650 | struct perf_evsel, node); | ||
651 | |||
652 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
653 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | ||
654 | TEST_ASSERT_VAL("wrong config", 0x1a == evsel->attr.config); | ||
655 | return 0; | ||
656 | } | ||
657 | |||
658 | static int test__checkevent_numeric(struct perf_evlist *evlist) | ||
659 | { | ||
660 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
661 | struct perf_evsel, node); | ||
662 | |||
663 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
664 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); | ||
665 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | ||
666 | return 0; | ||
667 | } | ||
668 | |||
669 | static int test__checkevent_symbolic_name(struct perf_evlist *evlist) | ||
670 | { | ||
671 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
672 | struct perf_evsel, node); | ||
673 | |||
674 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
675 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
676 | TEST_ASSERT_VAL("wrong config", | ||
677 | PERF_COUNT_HW_INSTRUCTIONS == evsel->attr.config); | ||
678 | return 0; | ||
679 | } | ||
680 | |||
681 | static int test__checkevent_symbolic_name_config(struct perf_evlist *evlist) | ||
682 | { | ||
683 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
684 | struct perf_evsel, node); | ||
685 | |||
686 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
687 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HARDWARE == evsel->attr.type); | ||
688 | TEST_ASSERT_VAL("wrong config", | ||
689 | PERF_COUNT_HW_CPU_CYCLES == evsel->attr.config); | ||
690 | TEST_ASSERT_VAL("wrong period", | ||
691 | 100000 == evsel->attr.sample_period); | ||
692 | TEST_ASSERT_VAL("wrong config1", | ||
693 | 0 == evsel->attr.config1); | ||
694 | TEST_ASSERT_VAL("wrong config2", | ||
695 | 1 == evsel->attr.config2); | ||
696 | return 0; | ||
697 | } | ||
698 | |||
699 | static int test__checkevent_symbolic_alias(struct perf_evlist *evlist) | ||
700 | { | ||
701 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
702 | struct perf_evsel, node); | ||
703 | |||
704 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
705 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_SOFTWARE == evsel->attr.type); | ||
706 | TEST_ASSERT_VAL("wrong config", | ||
707 | PERF_COUNT_SW_PAGE_FAULTS == evsel->attr.config); | ||
708 | return 0; | ||
709 | } | ||
710 | |||
711 | static int test__checkevent_genhw(struct perf_evlist *evlist) | ||
712 | { | ||
713 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
714 | struct perf_evsel, node); | ||
715 | |||
716 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
717 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_HW_CACHE == evsel->attr.type); | ||
718 | TEST_ASSERT_VAL("wrong config", (1 << 16) == evsel->attr.config); | ||
719 | return 0; | ||
720 | } | ||
721 | |||
722 | static int test__checkevent_breakpoint(struct perf_evlist *evlist) | ||
723 | { | ||
724 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
725 | struct perf_evsel, node); | ||
726 | |||
727 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
728 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); | ||
729 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | ||
730 | TEST_ASSERT_VAL("wrong bp_type", (HW_BREAKPOINT_R | HW_BREAKPOINT_W) == | ||
731 | evsel->attr.bp_type); | ||
732 | TEST_ASSERT_VAL("wrong bp_len", HW_BREAKPOINT_LEN_4 == | ||
733 | evsel->attr.bp_len); | ||
734 | return 0; | ||
735 | } | ||
736 | |||
737 | static int test__checkevent_breakpoint_x(struct perf_evlist *evlist) | ||
738 | { | ||
739 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
740 | struct perf_evsel, node); | ||
741 | |||
742 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
743 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_BREAKPOINT == evsel->attr.type); | ||
744 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | ||
745 | TEST_ASSERT_VAL("wrong bp_type", | ||
746 | HW_BREAKPOINT_X == evsel->attr.bp_type); | ||
747 | TEST_ASSERT_VAL("wrong bp_len", sizeof(long) == evsel->attr.bp_len); | ||
748 | return 0; | ||
749 | } | ||
750 | |||
751 | static int test__checkevent_breakpoint_r(struct perf_evlist *evlist) | ||
752 | { | ||
753 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
754 | struct perf_evsel, node); | ||
755 | |||
756 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
757 | TEST_ASSERT_VAL("wrong type", | ||
758 | PERF_TYPE_BREAKPOINT == evsel->attr.type); | ||
759 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | ||
760 | TEST_ASSERT_VAL("wrong bp_type", | ||
761 | HW_BREAKPOINT_R == evsel->attr.bp_type); | ||
762 | TEST_ASSERT_VAL("wrong bp_len", | ||
763 | HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); | ||
764 | return 0; | ||
765 | } | ||
766 | |||
767 | static int test__checkevent_breakpoint_w(struct perf_evlist *evlist) | ||
768 | { | ||
769 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
770 | struct perf_evsel, node); | ||
771 | |||
772 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
773 | TEST_ASSERT_VAL("wrong type", | ||
774 | PERF_TYPE_BREAKPOINT == evsel->attr.type); | ||
775 | TEST_ASSERT_VAL("wrong config", 0 == evsel->attr.config); | ||
776 | TEST_ASSERT_VAL("wrong bp_type", | ||
777 | HW_BREAKPOINT_W == evsel->attr.bp_type); | ||
778 | TEST_ASSERT_VAL("wrong bp_len", | ||
779 | HW_BREAKPOINT_LEN_4 == evsel->attr.bp_len); | ||
780 | return 0; | ||
781 | } | ||
782 | |||
783 | static int test__checkevent_tracepoint_modifier(struct perf_evlist *evlist) | ||
784 | { | ||
785 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
786 | struct perf_evsel, node); | ||
787 | |||
788 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
789 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
790 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
791 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
792 | |||
793 | return test__checkevent_tracepoint(evlist); | ||
794 | } | ||
795 | |||
796 | static int | ||
797 | test__checkevent_tracepoint_multi_modifier(struct perf_evlist *evlist) | ||
798 | { | ||
799 | struct perf_evsel *evsel; | ||
800 | |||
801 | TEST_ASSERT_VAL("wrong number of entries", evlist->nr_entries > 1); | ||
802 | |||
803 | list_for_each_entry(evsel, &evlist->entries, node) { | ||
804 | TEST_ASSERT_VAL("wrong exclude_user", | ||
805 | !evsel->attr.exclude_user); | ||
806 | TEST_ASSERT_VAL("wrong exclude_kernel", | ||
807 | evsel->attr.exclude_kernel); | ||
808 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
809 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
810 | } | ||
811 | |||
812 | return test__checkevent_tracepoint_multi(evlist); | ||
813 | } | ||
814 | |||
815 | static int test__checkevent_raw_modifier(struct perf_evlist *evlist) | ||
816 | { | ||
817 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
818 | struct perf_evsel, node); | ||
819 | |||
820 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
821 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
822 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
823 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | ||
824 | |||
825 | return test__checkevent_raw(evlist); | ||
826 | } | ||
827 | |||
828 | static int test__checkevent_numeric_modifier(struct perf_evlist *evlist) | ||
829 | { | ||
830 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
831 | struct perf_evsel, node); | ||
832 | |||
833 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
834 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
835 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
836 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | ||
837 | |||
838 | return test__checkevent_numeric(evlist); | ||
839 | } | ||
840 | |||
841 | static int test__checkevent_symbolic_name_modifier(struct perf_evlist *evlist) | ||
842 | { | ||
843 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
844 | struct perf_evsel, node); | ||
845 | |||
846 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
847 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
848 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
849 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
850 | |||
851 | return test__checkevent_symbolic_name(evlist); | ||
852 | } | ||
853 | |||
854 | static int test__checkevent_exclude_host_modifier(struct perf_evlist *evlist) | ||
855 | { | ||
856 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
857 | struct perf_evsel, node); | ||
858 | |||
859 | TEST_ASSERT_VAL("wrong exclude guest", !evsel->attr.exclude_guest); | ||
860 | TEST_ASSERT_VAL("wrong exclude host", evsel->attr.exclude_host); | ||
861 | |||
862 | return test__checkevent_symbolic_name(evlist); | ||
863 | } | ||
864 | |||
865 | static int test__checkevent_exclude_guest_modifier(struct perf_evlist *evlist) | ||
866 | { | ||
867 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
868 | struct perf_evsel, node); | ||
869 | |||
870 | TEST_ASSERT_VAL("wrong exclude guest", evsel->attr.exclude_guest); | ||
871 | TEST_ASSERT_VAL("wrong exclude host", !evsel->attr.exclude_host); | ||
872 | |||
873 | return test__checkevent_symbolic_name(evlist); | ||
874 | } | ||
875 | |||
876 | static int test__checkevent_symbolic_alias_modifier(struct perf_evlist *evlist) | ||
877 | { | ||
878 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
879 | struct perf_evsel, node); | ||
880 | |||
881 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
882 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
883 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
884 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
885 | |||
886 | return test__checkevent_symbolic_alias(evlist); | ||
887 | } | ||
888 | |||
889 | static int test__checkevent_genhw_modifier(struct perf_evlist *evlist) | ||
890 | { | ||
891 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
892 | struct perf_evsel, node); | ||
893 | |||
894 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
895 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
896 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
897 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | ||
898 | |||
899 | return test__checkevent_genhw(evlist); | ||
900 | } | ||
901 | |||
902 | static int test__checkevent_breakpoint_modifier(struct perf_evlist *evlist) | ||
903 | { | ||
904 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
905 | struct perf_evsel, node); | ||
906 | |||
907 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
908 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
909 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
910 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
911 | |||
912 | return test__checkevent_breakpoint(evlist); | ||
913 | } | ||
914 | |||
915 | static int test__checkevent_breakpoint_x_modifier(struct perf_evlist *evlist) | ||
916 | { | ||
917 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
918 | struct perf_evsel, node); | ||
919 | |||
920 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
921 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
922 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
923 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
924 | |||
925 | return test__checkevent_breakpoint_x(evlist); | ||
926 | } | ||
927 | |||
928 | static int test__checkevent_breakpoint_r_modifier(struct perf_evlist *evlist) | ||
929 | { | ||
930 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
931 | struct perf_evsel, node); | ||
932 | |||
933 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
934 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
935 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
936 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | ||
937 | |||
938 | return test__checkevent_breakpoint_r(evlist); | ||
939 | } | ||
940 | |||
941 | static int test__checkevent_breakpoint_w_modifier(struct perf_evlist *evlist) | ||
942 | { | ||
943 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
944 | struct perf_evsel, node); | ||
945 | |||
946 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
947 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
948 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
949 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | ||
950 | |||
951 | return test__checkevent_breakpoint_w(evlist); | ||
952 | } | ||
953 | |||
954 | static int test__checkevent_pmu(struct perf_evlist *evlist) | ||
955 | { | ||
956 | |||
957 | struct perf_evsel *evsel = list_entry(evlist->entries.next, | ||
958 | struct perf_evsel, node); | ||
959 | |||
960 | TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->nr_entries); | ||
961 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | ||
962 | TEST_ASSERT_VAL("wrong config", 10 == evsel->attr.config); | ||
963 | TEST_ASSERT_VAL("wrong config1", 1 == evsel->attr.config1); | ||
964 | TEST_ASSERT_VAL("wrong config2", 3 == evsel->attr.config2); | ||
965 | TEST_ASSERT_VAL("wrong period", 1000 == evsel->attr.sample_period); | ||
966 | |||
967 | return 0; | ||
968 | } | ||
969 | |||
970 | static int test__checkevent_list(struct perf_evlist *evlist) | ||
971 | { | ||
972 | struct perf_evsel *evsel; | ||
973 | |||
974 | TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->nr_entries); | ||
975 | |||
976 | /* r1 */ | ||
977 | evsel = list_entry(evlist->entries.next, struct perf_evsel, node); | ||
978 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_RAW == evsel->attr.type); | ||
979 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | ||
980 | TEST_ASSERT_VAL("wrong config1", 0 == evsel->attr.config1); | ||
981 | TEST_ASSERT_VAL("wrong config2", 0 == evsel->attr.config2); | ||
982 | TEST_ASSERT_VAL("wrong exclude_user", !evsel->attr.exclude_user); | ||
983 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
984 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
985 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
986 | |||
987 | /* syscalls:sys_enter_open:k */ | ||
988 | evsel = list_entry(evsel->node.next, struct perf_evsel, node); | ||
989 | TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->attr.type); | ||
990 | TEST_ASSERT_VAL("wrong sample_type", | ||
991 | (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | PERF_SAMPLE_CPU) == | ||
992 | evsel->attr.sample_type); | ||
993 | TEST_ASSERT_VAL("wrong sample_period", 1 == evsel->attr.sample_period); | ||
994 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
995 | TEST_ASSERT_VAL("wrong exclude_kernel", !evsel->attr.exclude_kernel); | ||
996 | TEST_ASSERT_VAL("wrong exclude_hv", evsel->attr.exclude_hv); | ||
997 | TEST_ASSERT_VAL("wrong precise_ip", !evsel->attr.precise_ip); | ||
998 | |||
999 | /* 1:1:hp */ | ||
1000 | evsel = list_entry(evsel->node.next, struct perf_evsel, node); | ||
1001 | TEST_ASSERT_VAL("wrong type", 1 == evsel->attr.type); | ||
1002 | TEST_ASSERT_VAL("wrong config", 1 == evsel->attr.config); | ||
1003 | TEST_ASSERT_VAL("wrong exclude_user", evsel->attr.exclude_user); | ||
1004 | TEST_ASSERT_VAL("wrong exclude_kernel", evsel->attr.exclude_kernel); | ||
1005 | TEST_ASSERT_VAL("wrong exclude_hv", !evsel->attr.exclude_hv); | ||
1006 | TEST_ASSERT_VAL("wrong precise_ip", evsel->attr.precise_ip); | ||
1007 | |||
1008 | return 0; | ||
1009 | } | ||
1010 | |||
1011 | static struct test__event_st { | ||
1012 | const char *name; | ||
1013 | __u32 type; | ||
1014 | int (*check)(struct perf_evlist *evlist); | ||
1015 | } test__events[] = { | ||
1016 | { | ||
1017 | .name = "syscalls:sys_enter_open", | ||
1018 | .check = test__checkevent_tracepoint, | ||
1019 | }, | ||
1020 | { | ||
1021 | .name = "syscalls:*", | ||
1022 | .check = test__checkevent_tracepoint_multi, | ||
1023 | }, | ||
1024 | { | ||
1025 | .name = "r1a", | ||
1026 | .check = test__checkevent_raw, | ||
1027 | }, | ||
1028 | { | ||
1029 | .name = "1:1", | ||
1030 | .check = test__checkevent_numeric, | ||
1031 | }, | ||
1032 | { | ||
1033 | .name = "instructions", | ||
1034 | .check = test__checkevent_symbolic_name, | ||
1035 | }, | ||
1036 | { | ||
1037 | .name = "cycles/period=100000,config2/", | ||
1038 | .check = test__checkevent_symbolic_name_config, | ||
1039 | }, | ||
1040 | { | ||
1041 | .name = "faults", | ||
1042 | .check = test__checkevent_symbolic_alias, | ||
1043 | }, | ||
1044 | { | ||
1045 | .name = "L1-dcache-load-miss", | ||
1046 | .check = test__checkevent_genhw, | ||
1047 | }, | ||
1048 | { | ||
1049 | .name = "mem:0", | ||
1050 | .check = test__checkevent_breakpoint, | ||
1051 | }, | ||
1052 | { | ||
1053 | .name = "mem:0:x", | ||
1054 | .check = test__checkevent_breakpoint_x, | ||
1055 | }, | ||
1056 | { | ||
1057 | .name = "mem:0:r", | ||
1058 | .check = test__checkevent_breakpoint_r, | ||
1059 | }, | ||
1060 | { | ||
1061 | .name = "mem:0:w", | ||
1062 | .check = test__checkevent_breakpoint_w, | ||
1063 | }, | ||
1064 | { | ||
1065 | .name = "syscalls:sys_enter_open:k", | ||
1066 | .check = test__checkevent_tracepoint_modifier, | ||
1067 | }, | ||
1068 | { | ||
1069 | .name = "syscalls:*:u", | ||
1070 | .check = test__checkevent_tracepoint_multi_modifier, | ||
1071 | }, | ||
1072 | { | ||
1073 | .name = "r1a:kp", | ||
1074 | .check = test__checkevent_raw_modifier, | ||
1075 | }, | ||
1076 | { | ||
1077 | .name = "1:1:hp", | ||
1078 | .check = test__checkevent_numeric_modifier, | ||
1079 | }, | ||
1080 | { | ||
1081 | .name = "instructions:h", | ||
1082 | .check = test__checkevent_symbolic_name_modifier, | ||
1083 | }, | ||
1084 | { | ||
1085 | .name = "faults:u", | ||
1086 | .check = test__checkevent_symbolic_alias_modifier, | ||
1087 | }, | ||
1088 | { | ||
1089 | .name = "L1-dcache-load-miss:kp", | ||
1090 | .check = test__checkevent_genhw_modifier, | ||
1091 | }, | ||
1092 | { | ||
1093 | .name = "mem:0:u", | ||
1094 | .check = test__checkevent_breakpoint_modifier, | ||
1095 | }, | ||
1096 | { | ||
1097 | .name = "mem:0:x:k", | ||
1098 | .check = test__checkevent_breakpoint_x_modifier, | ||
1099 | }, | ||
1100 | { | ||
1101 | .name = "mem:0:r:hp", | ||
1102 | .check = test__checkevent_breakpoint_r_modifier, | ||
1103 | }, | ||
1104 | { | ||
1105 | .name = "mem:0:w:up", | ||
1106 | .check = test__checkevent_breakpoint_w_modifier, | ||
1107 | }, | ||
1108 | { | ||
1109 | .name = "cpu/config=10,config1,config2=3,period=1000/u", | ||
1110 | .check = test__checkevent_pmu, | ||
1111 | }, | ||
1112 | { | ||
1113 | .name = "r1,syscalls:sys_enter_open:k,1:1:hp", | ||
1114 | .check = test__checkevent_list, | ||
1115 | }, | ||
1116 | { | ||
1117 | .name = "instructions:G", | ||
1118 | .check = test__checkevent_exclude_host_modifier, | ||
1119 | }, | ||
1120 | { | ||
1121 | .name = "instructions:H", | ||
1122 | .check = test__checkevent_exclude_guest_modifier, | ||
1123 | }, | ||
1124 | }; | ||
1125 | |||
1126 | #define TEST__EVENTS_CNT (sizeof(test__events) / sizeof(struct test__event_st)) | ||
1127 | |||
1128 | static int test__parse_events(void) | ||
1129 | { | ||
1130 | struct perf_evlist *evlist; | ||
1131 | u_int i; | ||
1132 | int ret = 0; | ||
1133 | |||
1134 | for (i = 0; i < TEST__EVENTS_CNT; i++) { | ||
1135 | struct test__event_st *e = &test__events[i]; | ||
1136 | |||
1137 | evlist = perf_evlist__new(NULL, NULL); | ||
1138 | if (evlist == NULL) | ||
1139 | break; | ||
1140 | |||
1141 | ret = parse_events(evlist, e->name, 0); | ||
1142 | if (ret) { | ||
1143 | pr_debug("failed to parse event '%s', err %d\n", | ||
1144 | e->name, ret); | ||
1145 | break; | ||
1146 | } | ||
1147 | |||
1148 | ret = e->check(evlist); | ||
1149 | perf_evlist__delete(evlist); | ||
1150 | if (ret) | ||
1151 | break; | ||
1152 | } | ||
1153 | |||
1154 | return ret; | ||
1155 | } | ||
1156 | |||
1157 | static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t **maskp, | 607 | static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t **maskp, |
1158 | size_t *sizep) | 608 | size_t *sizep) |
1159 | { | 609 | { |
@@ -1675,7 +1125,7 @@ static struct test { | |||
1675 | }, | 1125 | }, |
1676 | { | 1126 | { |
1677 | .desc = "parse events tests", | 1127 | .desc = "parse events tests", |
1678 | .func = test__parse_events, | 1128 | .func = parse_events__test, |
1679 | }, | 1129 | }, |
1680 | #if defined(__x86_64__) || defined(__i386__) | 1130 | #if defined(__x86_64__) || defined(__i386__) |
1681 | { | 1131 | { |