diff options
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/Kconfig | 2 | ||||
-rw-r--r-- | arch/sparc/include/asm/thread_info_32.h | 2 | ||||
-rw-r--r-- | arch/sparc/include/asm/thread_info_64.h | 3 | ||||
-rw-r--r-- | arch/sparc/include/asm/timex_64.h | 19 | ||||
-rw-r--r-- | arch/sparc/include/asm/trace-clock.h | 44 | ||||
-rw-r--r-- | arch/sparc/kernel/entry.S | 8 | ||||
-rw-r--r-- | arch/sparc/kernel/process_32.c | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/time_64.c | 3 |
8 files changed, 78 insertions, 7 deletions
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 95695e97703e..76f95707b976 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -40,6 +40,7 @@ config SPARC64 select HAVE_KPROBES select HAVE_MEMBLOCK select HAVE_SYSCALL_WRAPPERS + select HAVE_GET_CYCLES select HAVE_DYNAMIC_FTRACE select HAVE_FTRACE_MCOUNT_RECORD select HAVE_SYSCALL_TRACEPOINTS @@ -50,6 +51,7 @@ config SPARC64 select RTC_DRV_STARFIRE select HAVE_PERF_EVENTS select PERF_USE_VMALLOC + select HAVE_TRACE_CLOCK select HAVE_GENERIC_HARDIRQS config ARCH_DEFCONFIG diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h index 9dd0318d3ddf..654899022445 100644 --- a/arch/sparc/include/asm/thread_info_32.h +++ b/arch/sparc/include/asm/thread_info_32.h @@ -128,6 +128,7 @@ BTFIXUPDEF_CALL(void, free_thread_info, struct thread_info *) #define TIF_SIGPENDING 2 /* signal pending */ #define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_RESTORE_SIGMASK 4 /* restore signal mask in do_signal() */ +#define TIF_KERNEL_TRACE 5 /* kernel trace active */ #define TIF_USEDFPU 8 /* FPU was used by this task * this quantum (SMP) */ #define TIF_POLLING_NRFLAG 9 /* true if poll_idle() is polling @@ -137,6 +138,7 @@ BTFIXUPDEF_CALL(void, free_thread_info, struct thread_info *) /* as above, but as bit values */ #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) +#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE) #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h index fb2ea7705a46..9de58956acec 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h @@ -214,7 +214,7 @@ register struct thread_info *current_thread_info_reg asm("g6"); #define TIF_UNALIGNED 5 /* allowed to do unaligned accesses */ /* flag bit 6 is available */ #define TIF_32BIT 7 /* 32-bit binary */ -/* flag bit 8 is available */ +#define TIF_KERNEL_TRACE 8 /* kernel trace active */ #define TIF_SECCOMP 9 /* secure computing */ #define TIF_SYSCALL_AUDIT 10 /* syscall auditing active */ #define TIF_SYSCALL_TRACEPOINT 11 /* syscall tracepoint instrumentation */ @@ -233,6 +233,7 @@ register struct thread_info *current_thread_info_reg asm("g6"); #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) #define _TIF_UNALIGNED (1<<TIF_UNALIGNED) #define _TIF_32BIT (1<<TIF_32BIT) +#define _TIF_KERNEL_TRACE (1<<TIF_KERNEL_TRACE) #define _TIF_SECCOMP (1<<TIF_SECCOMP) #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) #define _TIF_SYSCALL_TRACEPOINT (1<<TIF_SYSCALL_TRACEPOINT) diff --git a/arch/sparc/include/asm/timex_64.h b/arch/sparc/include/asm/timex_64.h index 18b30bc9823b..905443a88894 100644 --- a/arch/sparc/include/asm/timex_64.h +++ b/arch/sparc/include/asm/timex_64.h @@ -12,7 +12,24 @@ /* Getting on the cycle counter on sparc64. */ typedef unsigned long cycles_t; -#define get_cycles() tick_ops->get_tick() + +static inline cycles_t get_cycles(void) +{ + return tick_ops->get_tick(); +} + +/* get_cycles instruction is synchronized on sparc64 */ +static inline void get_cycles_barrier(void) +{ + return; +} + +extern unsigned long tb_ticks_per_usec; + +static inline cycles_t get_cycles_rate(void) +{ + return (cycles_t)tb_ticks_per_usec * 1000000UL; +} #define ARCH_HAS_READ_CURRENT_TIMER diff --git a/arch/sparc/include/asm/trace-clock.h b/arch/sparc/include/asm/trace-clock.h new file mode 100644 index 000000000000..306fdf7b7ba0 --- /dev/null +++ b/arch/sparc/include/asm/trace-clock.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2008, Mathieu Desnoyers + * + * Trace clock definitions for Sparc64. + */ + +#ifndef _ASM_SPARC_TRACE_CLOCK_H +#define _ASM_SPARC_TRACE_CLOCK_H + +#include <linux/timex.h> + +static inline u32 trace_clock_read32(void) +{ + return get_cycles(); +} + +static inline u64 trace_clock_read64(void) +{ + return get_cycles(); +} + +static inline unsigned int trace_clock_frequency(void) +{ + return get_cycles_rate(); +} + +static inline u32 trace_clock_freq_scale(void) +{ + return 1; +} + +static inline int get_trace_clock(void) +{ + return 0; +} + +static inline void put_trace_clock(void) +{ +} + +static inline void set_trace_clock_is_sync(int state) +{ +} +#endif /* _ASM_SPARC_TRACE_CLOCK_H */ diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S index 1504df8ddf70..54210d48dbad 100644 --- a/arch/sparc/kernel/entry.S +++ b/arch/sparc/kernel/entry.S @@ -1151,7 +1151,7 @@ sys_sigreturn: add %sp, STACKFRAME_SZ, %o0 ld [%curptr + TI_FLAGS], %l5 - andcc %l5, _TIF_SYSCALL_TRACE, %g0 + andcc %l5, (_TIF_SYSCALL_TRACE|_TIF_KERNEL_TRACE), %g0 be 1f nop @@ -1171,7 +1171,7 @@ sys_rt_sigreturn: add %sp, STACKFRAME_SZ, %o0 ld [%curptr + TI_FLAGS], %l5 - andcc %l5, _TIF_SYSCALL_TRACE, %g0 + andcc %l5, (_TIF_SYSCALL_TRACE|_TIF_KERNEL_TRACE), %g0 be 1f nop @@ -1313,7 +1313,7 @@ syscall_is_too_hard: ld [%curptr + TI_FLAGS], %l5 mov %i3, %o3 - andcc %l5, _TIF_SYSCALL_TRACE, %g0 + andcc %l5, (_TIF_SYSCALL_TRACE|_TIF_KERNEL_TRACE), %g0 mov %i4, %o4 bne linux_syscall_trace mov %i0, %l5 @@ -1330,7 +1330,7 @@ ret_sys_call: ld [%sp + STACKFRAME_SZ + PT_PSR], %g3 set PSR_C, %g2 bgeu 1f - andcc %l6, _TIF_SYSCALL_TRACE, %g0 + andcc %l6, (_TIF_SYSCALL_TRACE|_TIF_KERNEL_TRACE), %g0 /* System call success, clear Carry condition code. */ andn %g3, %g2, %g3 diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c index 17529298c50a..57c0d67b5c4c 100644 --- a/arch/sparc/kernel/process_32.c +++ b/arch/sparc/kernel/process_32.c @@ -24,6 +24,7 @@ #include <linux/pm.h> #include <linux/init.h> #include <linux/slab.h> +#include <trace/sched.h> #include <asm/auxio.h> #include <asm/oplib.h> @@ -39,6 +40,8 @@ #include <asm/prom.h> #include <asm/unistd.h> +DEFINE_TRACE(sched_kthread_create); + /* * Power management idle function * Set in pm platform drivers (apc.c and pmc.c) @@ -674,6 +677,7 @@ pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) "i" (__NR_clone), "r" (flags | CLONE_VM | CLONE_UNTRACED), "i" (__NR_exit), "r" (fn), "r" (arg) : "g1", "g2", "g3", "o0", "o1", "memory", "cc"); + trace_sched_kthread_create(fn, retval); return retval; } EXPORT_SYMBOL(kernel_thread); diff --git a/arch/sparc/kernel/time_64.c b/arch/sparc/kernel/time_64.c index 3bc9c9979b92..d57935a02459 100644 --- a/arch/sparc/kernel/time_64.c +++ b/arch/sparc/kernel/time_64.c @@ -782,7 +782,8 @@ static struct clocksource clocksource_tick = { .flags = CLOCK_SOURCE_IS_CONTINUOUS, }; -static unsigned long tb_ticks_per_usec __read_mostly; +unsigned long tb_ticks_per_usec __read_mostly; +EXPORT_SYMBOL_GPL(tb_ticks_per_usec); void __delay(unsigned long loops) { |