Commit 860dba45 authored by Martin Schwidefsky's avatar Martin Schwidefsky Committed by Martin Schwidefsky

[S390] add kprobes annotations

Add kprobes annotations to get the massive 'probe kernel.function("*") {}'
stress test working.
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 4a188635
...@@ -188,6 +188,8 @@ STACK_SIZE = 1 << STACK_SHIFT ...@@ -188,6 +188,8 @@ STACK_SIZE = 1 << STACK_SHIFT
ssm __SF_EMPTY(%r15) ssm __SF_EMPTY(%r15)
.endm .endm
.section .kprobes.text, "ax"
/* /*
* Scheduler resume function, called by switch_to * Scheduler resume function, called by switch_to
* gpr2 = (task_struct *) prev * gpr2 = (task_struct *) prev
...@@ -861,6 +863,8 @@ restart_crash: ...@@ -861,6 +863,8 @@ restart_crash:
restart_go: restart_go:
#endif #endif
.section .kprobes.text, "ax"
#ifdef CONFIG_CHECK_STACK #ifdef CONFIG_CHECK_STACK
/* /*
* The synchronous or the asynchronous stack overflowed. We are dead. * The synchronous or the asynchronous stack overflowed. We are dead.
......
...@@ -197,6 +197,8 @@ _TIF_SYSCALL = (_TIF_SYSCALL_TRACE>>8 | _TIF_SYSCALL_AUDIT>>8 | \ ...@@ -197,6 +197,8 @@ _TIF_SYSCALL = (_TIF_SYSCALL_TRACE>>8 | _TIF_SYSCALL_AUDIT>>8 | \
ssm __SF_EMPTY(%r15) ssm __SF_EMPTY(%r15)
.endm .endm
.section .kprobes.text, "ax"
/* /*
* Scheduler resume function, called by switch_to * Scheduler resume function, called by switch_to
* gpr2 = (task_struct *) prev * gpr2 = (task_struct *) prev
...@@ -868,6 +870,8 @@ restart_crash: ...@@ -868,6 +870,8 @@ restart_crash:
restart_go: restart_go:
#endif #endif
.section .kprobes.text, "ax"
#ifdef CONFIG_CHECK_STACK #ifdef CONFIG_CHECK_STACK
/* /*
* The synchronous or the asynchronous stack overflowed. We are dead. * The synchronous or the asynchronous stack overflowed. We are dead.
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
.section .kprobes.text, "ax"
.globl ftrace_stub .globl ftrace_stub
ftrace_stub: ftrace_stub:
br %r14 br %r14
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
.section .kprobes.text, "ax"
.globl ftrace_stub .globl ftrace_stub
ftrace_stub: ftrace_stub:
br %r14 br %r14
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/kernel_stat.h> #include <linux/kernel_stat.h>
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <linux/compat.h> #include <linux/compat.h>
#include <linux/kprobes.h>
#include <asm/compat.h> #include <asm/compat.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
...@@ -116,15 +117,17 @@ void cpu_idle(void) ...@@ -116,15 +117,17 @@ void cpu_idle(void)
} }
} }
extern void kernel_thread_starter(void); extern void __kprobes kernel_thread_starter(void);
asm( asm(
".align 4\n" ".section .kprobes.text, \"ax\"\n"
".global kernel_thread_starter\n"
"kernel_thread_starter:\n" "kernel_thread_starter:\n"
" la 2,0(10)\n" " la 2,0(10)\n"
" basr 14,9\n" " basr 14,9\n"
" la 2,0\n" " la 2,0\n"
" br 11\n"); " br 11\n"
".previous\n");
int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{ {
......
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <linux/clocksource.h> #include <linux/clocksource.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/gfp.h> #include <linux/gfp.h>
#include <linux/kprobes.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/delay.h> #include <asm/delay.h>
#include <asm/s390_ext.h> #include <asm/s390_ext.h>
...@@ -60,7 +61,7 @@ static DEFINE_PER_CPU(struct clock_event_device, comparators); ...@@ -60,7 +61,7 @@ static DEFINE_PER_CPU(struct clock_event_device, comparators);
/* /*
* Scheduler clock - returns current time in nanosec units. * Scheduler clock - returns current time in nanosec units.
*/ */
unsigned long long notrace sched_clock(void) unsigned long long notrace __kprobes sched_clock(void)
{ {
return (get_clock_monotonic() * 125) >> 9; return (get_clock_monotonic() * 125) >> 9;
} }
......
...@@ -451,7 +451,7 @@ static inline void do_fp_trap(struct pt_regs *regs, void __user *location, ...@@ -451,7 +451,7 @@ static inline void do_fp_trap(struct pt_regs *regs, void __user *location,
"floating point exception", regs, &si); "floating point exception", regs, &si);
} }
static void illegal_op(struct pt_regs *regs, long pgm_int_code, static void __kprobes illegal_op(struct pt_regs *regs, long pgm_int_code,
unsigned long trans_exc_code) unsigned long trans_exc_code)
{ {
siginfo_t info; siginfo_t info;
...@@ -688,7 +688,7 @@ static void space_switch_exception(struct pt_regs *regs, long pgm_int_code, ...@@ -688,7 +688,7 @@ static void space_switch_exception(struct pt_regs *regs, long pgm_int_code,
do_trap(pgm_int_code, SIGILL, "space switch event", regs, &info); do_trap(pgm_int_code, SIGILL, "space switch event", regs, &info);
} }
asmlinkage void kernel_stack_overflow(struct pt_regs * regs) asmlinkage void __kprobes kernel_stack_overflow(struct pt_regs * regs)
{ {
bust_spinlocks(1); bust_spinlocks(1);
printk("Kernel stack overflow.\n"); printk("Kernel stack overflow.\n");
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <linux/rcupdate.h> #include <linux/rcupdate.h>
#include <linux/posix-timers.h> #include <linux/posix-timers.h>
#include <linux/cpu.h> #include <linux/cpu.h>
#include <linux/kprobes.h>
#include <asm/s390_ext.h> #include <asm/s390_ext.h>
#include <asm/timer.h> #include <asm/timer.h>
...@@ -122,7 +123,7 @@ void account_system_vtime(struct task_struct *tsk) ...@@ -122,7 +123,7 @@ void account_system_vtime(struct task_struct *tsk)
} }
EXPORT_SYMBOL_GPL(account_system_vtime); EXPORT_SYMBOL_GPL(account_system_vtime);
void vtime_start_cpu(__u64 int_clock, __u64 enter_timer) void __kprobes vtime_start_cpu(__u64 int_clock, __u64 enter_timer)
{ {
struct s390_idle_data *idle = &__get_cpu_var(s390_idle); struct s390_idle_data *idle = &__get_cpu_var(s390_idle);
struct vtimer_queue *vq = &__get_cpu_var(virt_cpu_timer); struct vtimer_queue *vq = &__get_cpu_var(virt_cpu_timer);
...@@ -162,7 +163,7 @@ void vtime_start_cpu(__u64 int_clock, __u64 enter_timer) ...@@ -162,7 +163,7 @@ void vtime_start_cpu(__u64 int_clock, __u64 enter_timer)
idle->sequence++; idle->sequence++;
} }
void vtime_stop_cpu(void) void __kprobes vtime_stop_cpu(void)
{ {
struct s390_idle_data *idle = &__get_cpu_var(s390_idle); struct s390_idle_data *idle = &__get_cpu_var(s390_idle);
struct vtimer_queue *vq = &__get_cpu_var(virt_cpu_timer); struct vtimer_queue *vq = &__get_cpu_var(virt_cpu_timer);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment