diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2011-01-05 06:47:25 -0500 |
---|---|---|
committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2011-01-05 06:47:24 -0500 |
commit | 860dba45e81be2e1ba977617652ae36084daebaf (patch) | |
tree | edeb79a565754fcec0d6bcfb225e36ad761cba48 | |
parent | 4a1886358b2d68f6f8745bfc10399c2376681acc (diff) |
[S390] add kprobes annotations
Add kprobes annotations to get the massive 'probe kernel.function("*") {}'
stress test working.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | arch/s390/kernel/entry.S | 4 | ||||
-rw-r--r-- | arch/s390/kernel/entry64.S | 4 | ||||
-rw-r--r-- | arch/s390/kernel/mcount.S | 2 | ||||
-rw-r--r-- | arch/s390/kernel/mcount64.S | 2 | ||||
-rw-r--r-- | arch/s390/kernel/process.c | 9 | ||||
-rw-r--r-- | arch/s390/kernel/time.c | 3 | ||||
-rw-r--r-- | arch/s390/kernel/traps.c | 6 | ||||
-rw-r--r-- | arch/s390/kernel/vtime.c | 5 |
8 files changed, 26 insertions, 9 deletions
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 1ecc337fb67..68d1a02db6b 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S | |||
@@ -188,6 +188,8 @@ STACK_SIZE = 1 << STACK_SHIFT | |||
188 | ssm __SF_EMPTY(%r15) | 188 | ssm __SF_EMPTY(%r15) |
189 | .endm | 189 | .endm |
190 | 190 | ||
191 | .section .kprobes.text, "ax" | ||
192 | |||
191 | /* | 193 | /* |
192 | * Scheduler resume function, called by switch_to | 194 | * Scheduler resume function, called by switch_to |
193 | * gpr2 = (task_struct *) prev | 195 | * gpr2 = (task_struct *) prev |
@@ -861,6 +863,8 @@ restart_crash: | |||
861 | restart_go: | 863 | restart_go: |
862 | #endif | 864 | #endif |
863 | 865 | ||
866 | .section .kprobes.text, "ax" | ||
867 | |||
864 | #ifdef CONFIG_CHECK_STACK | 868 | #ifdef CONFIG_CHECK_STACK |
865 | /* | 869 | /* |
866 | * The synchronous or the asynchronous stack overflowed. We are dead. | 870 | * The synchronous or the asynchronous stack overflowed. We are dead. |
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 8f3e802174d..1c0dce58933 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
@@ -197,6 +197,8 @@ _TIF_SYSCALL = (_TIF_SYSCALL_TRACE>>8 | _TIF_SYSCALL_AUDIT>>8 | \ | |||
197 | ssm __SF_EMPTY(%r15) | 197 | ssm __SF_EMPTY(%r15) |
198 | .endm | 198 | .endm |
199 | 199 | ||
200 | .section .kprobes.text, "ax" | ||
201 | |||
200 | /* | 202 | /* |
201 | * Scheduler resume function, called by switch_to | 203 | * Scheduler resume function, called by switch_to |
202 | * gpr2 = (task_struct *) prev | 204 | * gpr2 = (task_struct *) prev |
@@ -868,6 +870,8 @@ restart_crash: | |||
868 | restart_go: | 870 | restart_go: |
869 | #endif | 871 | #endif |
870 | 872 | ||
873 | .section .kprobes.text, "ax" | ||
874 | |||
871 | #ifdef CONFIG_CHECK_STACK | 875 | #ifdef CONFIG_CHECK_STACK |
872 | /* | 876 | /* |
873 | * The synchronous or the asynchronous stack overflowed. We are dead. | 877 | * The synchronous or the asynchronous stack overflowed. We are dead. |
diff --git a/arch/s390/kernel/mcount.S b/arch/s390/kernel/mcount.S index dfe015d7398..4a6e1a575f9 100644 --- a/arch/s390/kernel/mcount.S +++ b/arch/s390/kernel/mcount.S | |||
@@ -7,6 +7,8 @@ | |||
7 | 7 | ||
8 | #include <asm/asm-offsets.h> | 8 | #include <asm/asm-offsets.h> |
9 | 9 | ||
10 | .section .kprobes.text, "ax" | ||
11 | |||
10 | .globl ftrace_stub | 12 | .globl ftrace_stub |
11 | ftrace_stub: | 13 | ftrace_stub: |
12 | br %r14 | 14 | br %r14 |
diff --git a/arch/s390/kernel/mcount64.S b/arch/s390/kernel/mcount64.S index c37211c6092..b2bae06ad6c 100644 --- a/arch/s390/kernel/mcount64.S +++ b/arch/s390/kernel/mcount64.S | |||
@@ -7,6 +7,8 @@ | |||
7 | 7 | ||
8 | #include <asm/asm-offsets.h> | 8 | #include <asm/asm-offsets.h> |
9 | 9 | ||
10 | .section .kprobes.text, "ax" | ||
11 | |||
10 | .globl ftrace_stub | 12 | .globl ftrace_stub |
11 | ftrace_stub: | 13 | ftrace_stub: |
12 | br %r14 | 14 | br %r14 |
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index ec2e03b22ea..b825b3e1cb1 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/kernel_stat.h> | 32 | #include <linux/kernel_stat.h> |
33 | #include <linux/syscalls.h> | 33 | #include <linux/syscalls.h> |
34 | #include <linux/compat.h> | 34 | #include <linux/compat.h> |
35 | #include <linux/kprobes.h> | ||
35 | #include <asm/compat.h> | 36 | #include <asm/compat.h> |
36 | #include <asm/uaccess.h> | 37 | #include <asm/uaccess.h> |
37 | #include <asm/pgtable.h> | 38 | #include <asm/pgtable.h> |
@@ -116,15 +117,17 @@ void cpu_idle(void) | |||
116 | } | 117 | } |
117 | } | 118 | } |
118 | 119 | ||
119 | extern void kernel_thread_starter(void); | 120 | extern void __kprobes kernel_thread_starter(void); |
120 | 121 | ||
121 | asm( | 122 | asm( |
122 | ".align 4\n" | 123 | ".section .kprobes.text, \"ax\"\n" |
124 | ".global kernel_thread_starter\n" | ||
123 | "kernel_thread_starter:\n" | 125 | "kernel_thread_starter:\n" |
124 | " la 2,0(10)\n" | 126 | " la 2,0(10)\n" |
125 | " basr 14,9\n" | 127 | " basr 14,9\n" |
126 | " la 2,0\n" | 128 | " la 2,0\n" |
127 | " br 11\n"); | 129 | " br 11\n" |
130 | ".previous\n"); | ||
128 | 131 | ||
129 | int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) | 132 | int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) |
130 | { | 133 | { |
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index f754a6dc4f9..4c9d72d2e27 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/clocksource.h> | 37 | #include <linux/clocksource.h> |
38 | #include <linux/clockchips.h> | 38 | #include <linux/clockchips.h> |
39 | #include <linux/gfp.h> | 39 | #include <linux/gfp.h> |
40 | #include <linux/kprobes.h> | ||
40 | #include <asm/uaccess.h> | 41 | #include <asm/uaccess.h> |
41 | #include <asm/delay.h> | 42 | #include <asm/delay.h> |
42 | #include <asm/s390_ext.h> | 43 | #include <asm/s390_ext.h> |
@@ -60,7 +61,7 @@ static DEFINE_PER_CPU(struct clock_event_device, comparators); | |||
60 | /* | 61 | /* |
61 | * Scheduler clock - returns current time in nanosec units. | 62 | * Scheduler clock - returns current time in nanosec units. |
62 | */ | 63 | */ |
63 | unsigned long long notrace sched_clock(void) | 64 | unsigned long long notrace __kprobes sched_clock(void) |
64 | { | 65 | { |
65 | return (get_clock_monotonic() * 125) >> 9; | 66 | return (get_clock_monotonic() * 125) >> 9; |
66 | } | 67 | } |
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index 70640822621..bc4f32fcfa5 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c | |||
@@ -451,8 +451,8 @@ static inline void do_fp_trap(struct pt_regs *regs, void __user *location, | |||
451 | "floating point exception", regs, &si); | 451 | "floating point exception", regs, &si); |
452 | } | 452 | } |
453 | 453 | ||
454 | static void illegal_op(struct pt_regs *regs, long pgm_int_code, | 454 | static void __kprobes illegal_op(struct pt_regs *regs, long pgm_int_code, |
455 | unsigned long trans_exc_code) | 455 | unsigned long trans_exc_code) |
456 | { | 456 | { |
457 | siginfo_t info; | 457 | siginfo_t info; |
458 | __u8 opcode[6]; | 458 | __u8 opcode[6]; |
@@ -688,7 +688,7 @@ static void space_switch_exception(struct pt_regs *regs, long pgm_int_code, | |||
688 | do_trap(pgm_int_code, SIGILL, "space switch event", regs, &info); | 688 | do_trap(pgm_int_code, SIGILL, "space switch event", regs, &info); |
689 | } | 689 | } |
690 | 690 | ||
691 | asmlinkage void kernel_stack_overflow(struct pt_regs * regs) | 691 | asmlinkage void __kprobes kernel_stack_overflow(struct pt_regs * regs) |
692 | { | 692 | { |
693 | bust_spinlocks(1); | 693 | bust_spinlocks(1); |
694 | printk("Kernel stack overflow.\n"); | 694 | printk("Kernel stack overflow.\n"); |
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index 7eff9b7347c..8636dd00e39 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/rcupdate.h> | 20 | #include <linux/rcupdate.h> |
21 | #include <linux/posix-timers.h> | 21 | #include <linux/posix-timers.h> |
22 | #include <linux/cpu.h> | 22 | #include <linux/cpu.h> |
23 | #include <linux/kprobes.h> | ||
23 | 24 | ||
24 | #include <asm/s390_ext.h> | 25 | #include <asm/s390_ext.h> |
25 | #include <asm/timer.h> | 26 | #include <asm/timer.h> |
@@ -122,7 +123,7 @@ void account_system_vtime(struct task_struct *tsk) | |||
122 | } | 123 | } |
123 | EXPORT_SYMBOL_GPL(account_system_vtime); | 124 | EXPORT_SYMBOL_GPL(account_system_vtime); |
124 | 125 | ||
125 | void vtime_start_cpu(__u64 int_clock, __u64 enter_timer) | 126 | void __kprobes vtime_start_cpu(__u64 int_clock, __u64 enter_timer) |
126 | { | 127 | { |
127 | struct s390_idle_data *idle = &__get_cpu_var(s390_idle); | 128 | struct s390_idle_data *idle = &__get_cpu_var(s390_idle); |
128 | struct vtimer_queue *vq = &__get_cpu_var(virt_cpu_timer); | 129 | 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 | idle->sequence++; | 163 | idle->sequence++; |
163 | } | 164 | } |
164 | 165 | ||
165 | void vtime_stop_cpu(void) | 166 | void __kprobes vtime_stop_cpu(void) |
166 | { | 167 | { |
167 | struct s390_idle_data *idle = &__get_cpu_var(s390_idle); | 168 | struct s390_idle_data *idle = &__get_cpu_var(s390_idle); |
168 | struct vtimer_queue *vq = &__get_cpu_var(virt_cpu_timer); | 169 | struct vtimer_queue *vq = &__get_cpu_var(virt_cpu_timer); |