sparc: add basic support for 'perf'
authorJens Axboe <jens.axboe@oracle.com>
Fri, 4 Sep 2009 09:56:22 +0000 (02:56 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 4 Sep 2009 09:56:22 +0000 (02:56 -0700)
This wires up the perf_counter_open() syscall so that basic
software support for perf is working.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/Kconfig
arch/sparc/include/asm/perf_counter.h [new file with mode: 0644]
arch/sparc/include/asm/unistd.h
arch/sparc/kernel/systbls_32.S
arch/sparc/kernel/systbls_64.S
tools/perf/perf.h

index b847f880eeca4c1126d0eb9bfb3799f22eb13b99..2aa7cd39b481016885fff037a1bc7f4a62862842 100644 (file)
@@ -25,6 +25,7 @@ config SPARC
        select ARCH_WANT_OPTIONAL_GPIOLIB
        select RTC_CLASS
        select RTC_DRV_M48T59
+       select HAVE_PERF_COUNTERS
 
 config SPARC32
        def_bool !64BIT
@@ -44,6 +45,7 @@ config SPARC64
        select RTC_DRV_BQ4802
        select RTC_DRV_SUN4V
        select RTC_DRV_STARFIRE
+       select HAVE_PERF_COUNTERS
 
 config ARCH_DEFCONFIG
        string
diff --git a/arch/sparc/include/asm/perf_counter.h b/arch/sparc/include/asm/perf_counter.h
new file mode 100644 (file)
index 0000000..f07c587
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef __ASM_SPARC_PERF_COUNTER_H
+#define __ASM_SPARC_PERF_COUNTER_H
+
+static inline void set_perf_counter_pending(void) { }
+
+#define        PERF_COUNTER_INDEX_OFFSET       0
+
+#endif
index b2c406de7d4fd75e1d00aed701dd2d9807edbaa6..706df669f3b8129b459ae79eb619dc0973694fc7 100644 (file)
 #define __NR_preadv            324
 #define __NR_pwritev           325
 #define __NR_rt_tgsigqueueinfo 326
+#define __NR_perf_counter_open 327
 
-#define NR_SYSCALLS            327
+#define NR_SYSCALLS            328
 
 #ifdef __32bit_syscall_numbers__
 /* Sparc 32-bit only has the "setresuid32", "getresuid32" variants,
index 690901657291db9f641bc17a9c45cd26f542c8fa..04181577cb659d349b1812f55eb9fc7d54c82f29 100644 (file)
@@ -82,5 +82,5 @@ sys_call_table:
 /*310*/        .long sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
 /*315*/        .long sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1
 /*320*/        .long sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv
-/*325*/        .long sys_pwritev, sys_rt_tgsigqueueinfo
+/*325*/        .long sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_counter_open
 
index 2ee7250ba7ae6b50f08300cdaf064369e9dc47c1..91b06b7f7acf6f1b4efc74e44d589742d6655156 100644 (file)
@@ -83,7 +83,7 @@ sys_call_table32:
 /*310*/        .word compat_sys_utimensat, compat_sys_signalfd, sys_timerfd_create, sys_eventfd, compat_sys_fallocate
        .word compat_sys_timerfd_settime, compat_sys_timerfd_gettime, compat_sys_signalfd4, sys_eventfd2, sys_epoll_create1
 /*320*/        .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, compat_sys_preadv
-       .word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo
+       .word compat_sys_pwritev, compat_sys_rt_tgsigqueueinfo, sys_perf_counter_open
 
 #endif /* CONFIG_COMPAT */
 
@@ -158,4 +158,4 @@ sys_call_table:
 /*310*/        .word sys_utimensat, sys_signalfd, sys_timerfd_create, sys_eventfd, sys_fallocate
        .word sys_timerfd_settime, sys_timerfd_gettime, sys_signalfd4, sys_eventfd2, sys_epoll_create1
 /*320*/        .word sys_dup3, sys_pipe2, sys_inotify_init1, sys_accept4, sys_preadv
-       .word sys_pwritev, sys_rt_tgsigqueueinfo
+       .word sys_pwritev, sys_rt_tgsigqueueinfo, sys_perf_counter_open
index e5148e2b6134242f3b42c3dd59fafd54a7acb60f..2abeb20d0bf371d34c9d6c7a9fe7fe16b202e2c9 100644 (file)
 #define cpu_relax()    asm volatile("" ::: "memory");
 #endif
 
+#ifdef __sparc__
+#include "../../arch/sparc/include/asm/unistd.h"
+#define rmb()          asm volatile("":::"memory")
+#define cpu_relax()    asm volatile("":::"memory")
+#endif
+
 #include <time.h>
 #include <unistd.h>
 #include <sys/types.h>