diff options
Diffstat (limited to 'arch/sparc/kernel/sys_sparc_64.c')
-rw-r--r-- | arch/sparc/kernel/sys_sparc_64.c | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index d77f5431694..cb1bef6f14b 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c | |||
@@ -27,7 +27,6 @@ | |||
27 | 27 | ||
28 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
29 | #include <asm/utrap.h> | 29 | #include <asm/utrap.h> |
30 | #include <asm/perfctr.h> | ||
31 | #include <asm/unistd.h> | 30 | #include <asm/unistd.h> |
32 | 31 | ||
33 | #include "entry.h" | 32 | #include "entry.h" |
@@ -766,109 +765,6 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act, | |||
766 | return ret; | 765 | return ret; |
767 | } | 766 | } |
768 | 767 | ||
769 | /* Invoked by rtrap code to update performance counters in | ||
770 | * user space. | ||
771 | */ | ||
772 | asmlinkage void update_perfctrs(void) | ||
773 | { | ||
774 | unsigned long pic, tmp; | ||
775 | |||
776 | read_pic(pic); | ||
777 | tmp = (current_thread_info()->kernel_cntd0 += (unsigned int)pic); | ||
778 | __put_user(tmp, current_thread_info()->user_cntd0); | ||
779 | tmp = (current_thread_info()->kernel_cntd1 += (pic >> 32)); | ||
780 | __put_user(tmp, current_thread_info()->user_cntd1); | ||
781 | reset_pic(); | ||
782 | } | ||
783 | |||
784 | SYSCALL_DEFINE4(perfctr, int, opcode, unsigned long, arg0, | ||
785 | unsigned long, arg1, unsigned long, arg2) | ||
786 | { | ||
787 | int err = 0; | ||
788 | |||
789 | switch(opcode) { | ||
790 | case PERFCTR_ON: | ||
791 | current_thread_info()->pcr_reg = arg2; | ||
792 | current_thread_info()->user_cntd0 = (u64 __user *) arg0; | ||
793 | current_thread_info()->user_cntd1 = (u64 __user *) arg1; | ||
794 | current_thread_info()->kernel_cntd0 = | ||
795 | current_thread_info()->kernel_cntd1 = 0; | ||
796 | write_pcr(arg2); | ||
797 | reset_pic(); | ||
798 | set_thread_flag(TIF_PERFCTR); | ||
799 | break; | ||
800 | |||
801 | case PERFCTR_OFF: | ||
802 | err = -EINVAL; | ||
803 | if (test_thread_flag(TIF_PERFCTR)) { | ||
804 | current_thread_info()->user_cntd0 = | ||
805 | current_thread_info()->user_cntd1 = NULL; | ||
806 | current_thread_info()->pcr_reg = 0; | ||
807 | write_pcr(0); | ||
808 | clear_thread_flag(TIF_PERFCTR); | ||
809 | err = 0; | ||
810 | } | ||
811 | break; | ||
812 | |||
813 | case PERFCTR_READ: { | ||
814 | unsigned long pic, tmp; | ||
815 | |||
816 | if (!test_thread_flag(TIF_PERFCTR)) { | ||
817 | err = -EINVAL; | ||
818 | break; | ||
819 | } | ||
820 | read_pic(pic); | ||
821 | tmp = (current_thread_info()->kernel_cntd0 += (unsigned int)pic); | ||
822 | err |= __put_user(tmp, current_thread_info()->user_cntd0); | ||
823 | tmp = (current_thread_info()->kernel_cntd1 += (pic >> 32)); | ||
824 | err |= __put_user(tmp, current_thread_info()->user_cntd1); | ||
825 | reset_pic(); | ||
826 | break; | ||
827 | } | ||
828 | |||
829 | case PERFCTR_CLRPIC: | ||
830 | if (!test_thread_flag(TIF_PERFCTR)) { | ||
831 | err = -EINVAL; | ||
832 | break; | ||
833 | } | ||
834 | current_thread_info()->kernel_cntd0 = | ||
835 | current_thread_info()->kernel_cntd1 = 0; | ||
836 | reset_pic(); | ||
837 | break; | ||
838 | |||
839 | case PERFCTR_SETPCR: { | ||
840 | u64 __user *user_pcr = (u64 __user *)arg0; | ||
841 | |||
842 | if (!test_thread_flag(TIF_PERFCTR)) { | ||
843 | err = -EINVAL; | ||
844 | break; | ||
845 | } | ||
846 | err |= __get_user(current_thread_info()->pcr_reg, user_pcr); | ||
847 | write_pcr(current_thread_info()->pcr_reg); | ||
848 | current_thread_info()->kernel_cntd0 = | ||
849 | current_thread_info()->kernel_cntd1 = 0; | ||
850 | reset_pic(); | ||
851 | break; | ||
852 | } | ||
853 | |||
854 | case PERFCTR_GETPCR: { | ||
855 | u64 __user *user_pcr = (u64 __user *)arg0; | ||
856 | |||
857 | if (!test_thread_flag(TIF_PERFCTR)) { | ||
858 | err = -EINVAL; | ||
859 | break; | ||
860 | } | ||
861 | err |= __put_user(current_thread_info()->pcr_reg, user_pcr); | ||
862 | break; | ||
863 | } | ||
864 | |||
865 | default: | ||
866 | err = -EINVAL; | ||
867 | break; | ||
868 | }; | ||
869 | return err; | ||
870 | } | ||
871 | |||
872 | /* | 768 | /* |
873 | * Do a system call from kernel instead of calling sys_execve so we | 769 | * Do a system call from kernel instead of calling sys_execve so we |
874 | * end up with proper pt_regs. | 770 | * end up with proper pt_regs. |