aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/kernel/kprobes.c31
-rw-r--r--arch/powerpc/kernel/process.c1
-rw-r--r--arch/powerpc/kernel/ptrace.c1
-rw-r--r--arch/powerpc/kernel/signal_32.c1
-rw-r--r--arch/powerpc/kernel/signal_64.c1
-rw-r--r--arch/powerpc/kernel/syscalls.c1
-rw-r--r--arch/powerpc/kernel/traps.c16
-rw-r--r--arch/powerpc/kernel/udbg.c19
-rw-r--r--arch/powerpc/kernel/vdso.c1
-rw-r--r--arch/powerpc/mm/fault.c2
-rw-r--r--arch/powerpc/mm/hugetlbpage.c1
-rw-r--r--arch/powerpc/mm/init_64.c5
-rw-r--r--arch/powerpc/platforms/cell/spufs/backing_ops.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/hw_ops.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/sched.c1
-rw-r--r--arch/powerpc/platforms/cell/spufs/switch.c1
-rw-r--r--arch/powerpc/platforms/chrp/smp.c1
-rw-r--r--arch/powerpc/platforms/iseries/smp.c1
-rw-r--r--arch/powerpc/platforms/iseries/viopath.c1
-rw-r--r--arch/powerpc/platforms/powermac/smp.c1
-rw-r--r--arch/powerpc/xmon/xmon.c3
21 files changed, 25 insertions, 66 deletions
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index c27f41870c8f..0c96611f02f4 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -30,8 +30,8 @@
30#include <linux/ptrace.h> 30#include <linux/ptrace.h>
31#include <linux/preempt.h> 31#include <linux/preempt.h>
32#include <linux/module.h> 32#include <linux/module.h>
33#include <linux/kdebug.h>
33#include <asm/cacheflush.h> 34#include <asm/cacheflush.h>
34#include <asm/kdebug.h>
35#include <asm/sstep.h> 35#include <asm/sstep.h>
36#include <asm/uaccess.h> 36#include <asm/uaccess.h>
37 37
@@ -126,22 +126,13 @@ static void __kprobes set_current_kprobe(struct kprobe *p, struct pt_regs *regs,
126} 126}
127 127
128/* Called with kretprobe_lock held */ 128/* Called with kretprobe_lock held */
129void __kprobes arch_prepare_kretprobe(struct kretprobe *rp, 129void __kprobes arch_prepare_kretprobe(struct kretprobe_instance *ri,
130 struct pt_regs *regs) 130 struct pt_regs *regs)
131{ 131{
132 struct kretprobe_instance *ri; 132 ri->ret_addr = (kprobe_opcode_t *)regs->link;
133 133
134 if ((ri = get_free_rp_inst(rp)) != NULL) { 134 /* Replace the return addr with trampoline addr */
135 ri->rp = rp; 135 regs->link = (unsigned long)kretprobe_trampoline;
136 ri->task = current;
137 ri->ret_addr = (kprobe_opcode_t *)regs->link;
138
139 /* Replace the return addr with trampoline addr */
140 regs->link = (unsigned long)kretprobe_trampoline;
141 add_rp_inst(ri);
142 } else {
143 rp->nmissed++;
144 }
145} 136}
146 137
147static int __kprobes kprobe_handler(struct pt_regs *regs) 138static int __kprobes kprobe_handler(struct pt_regs *regs)
@@ -336,7 +327,7 @@ int __kprobes trampoline_probe_handler(struct kprobe *p, struct pt_regs *regs)
336 break; 327 break;
337 } 328 }
338 329
339 BUG_ON(!orig_ret_address || (orig_ret_address == trampoline_address)); 330 kretprobe_assert(ri, orig_ret_address, trampoline_address);
340 regs->nip = orig_ret_address; 331 regs->nip = orig_ret_address;
341 332
342 reset_current_kprobe(); 333 reset_current_kprobe();
@@ -551,3 +542,11 @@ int __init arch_init_kprobes(void)
551{ 542{
552 return register_kprobe(&trampoline_p); 543 return register_kprobe(&trampoline_p);
553} 544}
545
546int __kprobes arch_trampoline_kprobe(struct kprobe *p)
547{
548 if (p->addr == (kprobe_opcode_t *)&kretprobe_trampoline)
549 return 1;
550
551 return 0;
552}
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index e509aae2feb3..6e2f03566b0d 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -19,7 +19,6 @@
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/mm.h> 20#include <linux/mm.h>
21#include <linux/smp.h> 21#include <linux/smp.h>
22#include <linux/smp_lock.h>
23#include <linux/stddef.h> 22#include <linux/stddef.h>
24#include <linux/unistd.h> 23#include <linux/unistd.h>
25#include <linux/ptrace.h> 24#include <linux/ptrace.h>
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index cc44c7b975aa..f4f391cdd8f5 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -19,7 +19,6 @@
19#include <linux/sched.h> 19#include <linux/sched.h>
20#include <linux/mm.h> 20#include <linux/mm.h>
21#include <linux/smp.h> 21#include <linux/smp.h>
22#include <linux/smp_lock.h>
23#include <linux/errno.h> 22#include <linux/errno.h>
24#include <linux/ptrace.h> 23#include <linux/ptrace.h>
25#include <linux/user.h> 24#include <linux/user.h>
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index 6b405a3f43f9..dd1dca5bfa81 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -20,7 +20,6 @@
20#include <linux/sched.h> 20#include <linux/sched.h>
21#include <linux/mm.h> 21#include <linux/mm.h>
22#include <linux/smp.h> 22#include <linux/smp.h>
23#include <linux/smp_lock.h>
24#include <linux/kernel.h> 23#include <linux/kernel.h>
25#include <linux/signal.h> 24#include <linux/signal.h>
26#include <linux/errno.h> 25#include <linux/errno.h>
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
index f72e8e823d78..1ce0ae3f6ffc 100644
--- a/arch/powerpc/kernel/signal_64.c
+++ b/arch/powerpc/kernel/signal_64.c
@@ -15,7 +15,6 @@
15#include <linux/sched.h> 15#include <linux/sched.h>
16#include <linux/mm.h> 16#include <linux/mm.h>
17#include <linux/smp.h> 17#include <linux/smp.h>
18#include <linux/smp_lock.h>
19#include <linux/kernel.h> 18#include <linux/kernel.h>
20#include <linux/signal.h> 19#include <linux/signal.h>
21#include <linux/errno.h> 20#include <linux/errno.h>
diff --git a/arch/powerpc/kernel/syscalls.c b/arch/powerpc/kernel/syscalls.c
index d358866b880f..fc6647d332cb 100644
--- a/arch/powerpc/kernel/syscalls.c
+++ b/arch/powerpc/kernel/syscalls.c
@@ -24,7 +24,6 @@
24#include <linux/syscalls.h> 24#include <linux/syscalls.h>
25#include <linux/mm.h> 25#include <linux/mm.h>
26#include <linux/smp.h> 26#include <linux/smp.h>
27#include <linux/smp_lock.h>
28#include <linux/sem.h> 27#include <linux/sem.h>
29#include <linux/msg.h> 28#include <linux/msg.h>
30#include <linux/shm.h> 29#include <linux/shm.h>
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index f7862224fe85..bf6445ac9f1c 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -33,8 +33,8 @@
33#include <linux/kexec.h> 33#include <linux/kexec.h>
34#include <linux/backlight.h> 34#include <linux/backlight.h>
35#include <linux/bug.h> 35#include <linux/bug.h>
36#include <linux/kdebug.h>
36 37
37#include <asm/kdebug.h>
38#include <asm/pgtable.h> 38#include <asm/pgtable.h>
39#include <asm/uaccess.h> 39#include <asm/uaccess.h>
40#include <asm/system.h> 40#include <asm/system.h>
@@ -72,20 +72,6 @@ EXPORT_SYMBOL(__debugger_dabr_match);
72EXPORT_SYMBOL(__debugger_fault_handler); 72EXPORT_SYMBOL(__debugger_fault_handler);
73#endif 73#endif
74 74
75ATOMIC_NOTIFIER_HEAD(powerpc_die_chain);
76
77int register_die_notifier(struct notifier_block *nb)
78{
79 return atomic_notifier_chain_register(&powerpc_die_chain, nb);
80}
81EXPORT_SYMBOL(register_die_notifier);
82
83int unregister_die_notifier(struct notifier_block *nb)
84{
85 return atomic_notifier_chain_unregister(&powerpc_die_chain, nb);
86}
87EXPORT_SYMBOL(unregister_die_notifier);
88
89/* 75/*
90 * Trap & Exception support 76 * Trap & Exception support
91 */ 77 */
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
index 7ef97ea8b3ef..87703df87509 100644
--- a/arch/powerpc/kernel/udbg.c
+++ b/arch/powerpc/kernel/udbg.c
@@ -145,29 +145,22 @@ static void udbg_console_write(struct console *con, const char *s,
145static struct console udbg_console = { 145static struct console udbg_console = {
146 .name = "udbg", 146 .name = "udbg",
147 .write = udbg_console_write, 147 .write = udbg_console_write,
148 .flags = CON_PRINTBUFFER | CON_ENABLED, 148 .flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT,
149 .index = -1, 149 .index = -1,
150}; 150};
151 151
152static int early_console_initialized; 152static int early_console_initialized;
153 153
154void __init disable_early_printk(void)
155{
156 if (!early_console_initialized)
157 return;
158 if (strstr(boot_command_line, "udbg-immortal")) {
159 printk(KERN_INFO "early console immortal !\n");
160 return;
161 }
162 unregister_console(&udbg_console);
163 early_console_initialized = 0;
164}
165
166/* called by setup_system */ 154/* called by setup_system */
167void register_early_udbg_console(void) 155void register_early_udbg_console(void)
168{ 156{
169 if (early_console_initialized) 157 if (early_console_initialized)
170 return; 158 return;
159
160 if (strstr(boot_command_line, "udbg-immortal")) {
161 printk(KERN_INFO "early console immortal !\n");
162 udbg_console.flags &= ~CON_BOOT;
163 }
171 early_console_initialized = 1; 164 early_console_initialized = 1;
172 register_console(&udbg_console); 165 register_console(&udbg_console);
173} 166}
diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c
index e46c31b36641..4245579edb4e 100644
--- a/arch/powerpc/kernel/vdso.c
+++ b/arch/powerpc/kernel/vdso.c
@@ -14,7 +14,6 @@
14#include <linux/kernel.h> 14#include <linux/kernel.h>
15#include <linux/mm.h> 15#include <linux/mm.h>
16#include <linux/smp.h> 16#include <linux/smp.h>
17#include <linux/smp_lock.h>
18#include <linux/stddef.h> 17#include <linux/stddef.h>
19#include <linux/unistd.h> 18#include <linux/unistd.h>
20#include <linux/slab.h> 19#include <linux/slab.h>
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index a0f88026e464..bfe901353142 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -28,6 +28,7 @@
28#include <linux/highmem.h> 28#include <linux/highmem.h>
29#include <linux/module.h> 29#include <linux/module.h>
30#include <linux/kprobes.h> 30#include <linux/kprobes.h>
31#include <linux/kdebug.h>
31 32
32#include <asm/page.h> 33#include <asm/page.h>
33#include <asm/pgtable.h> 34#include <asm/pgtable.h>
@@ -36,7 +37,6 @@
36#include <asm/system.h> 37#include <asm/system.h>
37#include <asm/uaccess.h> 38#include <asm/uaccess.h>
38#include <asm/tlbflush.h> 39#include <asm/tlbflush.h>
39#include <asm/kdebug.h>
40#include <asm/siginfo.h> 40#include <asm/siginfo.h>
41 41
42 42
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 1f07f70ac89f..fb959264c104 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -12,7 +12,6 @@
12#include <linux/mm.h> 12#include <linux/mm.h>
13#include <linux/hugetlb.h> 13#include <linux/hugetlb.h>
14#include <linux/pagemap.h> 14#include <linux/pagemap.h>
15#include <linux/smp_lock.h>
16#include <linux/slab.h> 15#include <linux/slab.h>
17#include <linux/err.h> 16#include <linux/err.h>
18#include <linux/sysctl.h> 17#include <linux/sysctl.h>
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index 4416d5140c53..fe1fe852181a 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -183,11 +183,8 @@ void pgtable_cache_init(void)
183 "for size: %08x...\n", name, i, size); 183 "for size: %08x...\n", name, i, size);
184 pgtable_cache[i] = kmem_cache_create(name, 184 pgtable_cache[i] = kmem_cache_create(name,
185 size, size, 185 size, size,
186 0, 186 SLAB_PANIC,
187 zero_ctor, 187 zero_ctor,
188 NULL); 188 NULL);
189 if (! pgtable_cache[i])
190 panic("pgtable_cache_init(): could not create %s!\n",
191 name);
192 } 189 }
193} 190}
diff --git a/arch/powerpc/platforms/cell/spufs/backing_ops.c b/arch/powerpc/platforms/cell/spufs/backing_ops.c
index 3322528fa6eb..d32db9ffc6eb 100644
--- a/arch/powerpc/platforms/cell/spufs/backing_ops.c
+++ b/arch/powerpc/platforms/cell/spufs/backing_ops.c
@@ -28,7 +28,6 @@
28#include <linux/mm.h> 28#include <linux/mm.h>
29#include <linux/vmalloc.h> 29#include <linux/vmalloc.h>
30#include <linux/smp.h> 30#include <linux/smp.h>
31#include <linux/smp_lock.h>
32#include <linux/stddef.h> 31#include <linux/stddef.h>
33#include <linux/unistd.h> 32#include <linux/unistd.h>
34#include <linux/poll.h> 33#include <linux/poll.h>
diff --git a/arch/powerpc/platforms/cell/spufs/hw_ops.c b/arch/powerpc/platforms/cell/spufs/hw_ops.c
index 428875c5e4ec..fc4ed1ffbd4f 100644
--- a/arch/powerpc/platforms/cell/spufs/hw_ops.c
+++ b/arch/powerpc/platforms/cell/spufs/hw_ops.c
@@ -25,7 +25,6 @@
25#include <linux/mm.h> 25#include <linux/mm.h>
26#include <linux/poll.h> 26#include <linux/poll.h>
27#include <linux/smp.h> 27#include <linux/smp.h>
28#include <linux/smp_lock.h>
29#include <linux/stddef.h> 28#include <linux/stddef.h>
30#include <linux/unistd.h> 29#include <linux/unistd.h>
31 30
diff --git a/arch/powerpc/platforms/cell/spufs/sched.c b/arch/powerpc/platforms/cell/spufs/sched.c
index 91030b8abdca..b6ecb30e7d58 100644
--- a/arch/powerpc/platforms/cell/spufs/sched.c
+++ b/arch/powerpc/platforms/cell/spufs/sched.c
@@ -30,7 +30,6 @@
30#include <linux/completion.h> 30#include <linux/completion.h>
31#include <linux/vmalloc.h> 31#include <linux/vmalloc.h>
32#include <linux/smp.h> 32#include <linux/smp.h>
33#include <linux/smp_lock.h>
34#include <linux/stddef.h> 33#include <linux/stddef.h>
35#include <linux/unistd.h> 34#include <linux/unistd.h>
36#include <linux/numa.h> 35#include <linux/numa.h>
diff --git a/arch/powerpc/platforms/cell/spufs/switch.c b/arch/powerpc/platforms/cell/spufs/switch.c
index 8347c4a3f894..29dc59cefc38 100644
--- a/arch/powerpc/platforms/cell/spufs/switch.c
+++ b/arch/powerpc/platforms/cell/spufs/switch.c
@@ -39,7 +39,6 @@
39#include <linux/mm.h> 39#include <linux/mm.h>
40#include <linux/vmalloc.h> 40#include <linux/vmalloc.h>
41#include <linux/smp.h> 41#include <linux/smp.h>
42#include <linux/smp_lock.h>
43#include <linux/stddef.h> 42#include <linux/stddef.h>
44#include <linux/unistd.h> 43#include <linux/unistd.h>
45 44
diff --git a/arch/powerpc/platforms/chrp/smp.c b/arch/powerpc/platforms/chrp/smp.c
index 1d2307e87c30..3ea0eb78568e 100644
--- a/arch/powerpc/platforms/chrp/smp.c
+++ b/arch/powerpc/platforms/chrp/smp.c
@@ -11,7 +11,6 @@
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/sched.h> 12#include <linux/sched.h>
13#include <linux/smp.h> 13#include <linux/smp.h>
14#include <linux/smp_lock.h>
15#include <linux/interrupt.h> 14#include <linux/interrupt.h>
16#include <linux/kernel_stat.h> 15#include <linux/kernel_stat.h>
17#include <linux/delay.h> 16#include <linux/delay.h>
diff --git a/arch/powerpc/platforms/iseries/smp.c b/arch/powerpc/platforms/iseries/smp.c
index aee5908df700..722335e32fd4 100644
--- a/arch/powerpc/platforms/iseries/smp.c
+++ b/arch/powerpc/platforms/iseries/smp.c
@@ -18,7 +18,6 @@
18#include <linux/module.h> 18#include <linux/module.h>
19#include <linux/sched.h> 19#include <linux/sched.h>
20#include <linux/smp.h> 20#include <linux/smp.h>
21#include <linux/smp_lock.h>
22#include <linux/interrupt.h> 21#include <linux/interrupt.h>
23#include <linux/kernel_stat.h> 22#include <linux/kernel_stat.h>
24#include <linux/delay.h> 23#include <linux/delay.h>
diff --git a/arch/powerpc/platforms/iseries/viopath.c b/arch/powerpc/platforms/iseries/viopath.c
index 2ca2d8a9de97..354b8dd2a2c1 100644
--- a/arch/powerpc/platforms/iseries/viopath.c
+++ b/arch/powerpc/platforms/iseries/viopath.c
@@ -36,7 +36,6 @@
36#include <linux/dma-mapping.h> 36#include <linux/dma-mapping.h>
37#include <linux/wait.h> 37#include <linux/wait.h>
38#include <linux/seq_file.h> 38#include <linux/seq_file.h>
39#include <linux/smp_lock.h>
40#include <linux/interrupt.h> 39#include <linux/interrupt.h>
41 40
42#include <asm/system.h> 41#include <asm/system.h>
diff --git a/arch/powerpc/platforms/powermac/smp.c b/arch/powerpc/platforms/powermac/smp.c
index 84f1860493bb..686ed82bde79 100644
--- a/arch/powerpc/platforms/powermac/smp.c
+++ b/arch/powerpc/platforms/powermac/smp.c
@@ -24,7 +24,6 @@
24#include <linux/kernel.h> 24#include <linux/kernel.h>
25#include <linux/sched.h> 25#include <linux/sched.h>
26#include <linux/smp.h> 26#include <linux/smp.h>
27#include <linux/smp_lock.h>
28#include <linux/interrupt.h> 27#include <linux/interrupt.h>
29#include <linux/kernel_stat.h> 28#include <linux/kernel_stat.h>
30#include <linux/delay.h> 29#include <linux/delay.h>
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index b481db1dacb4..28fdf4f50c27 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -1217,7 +1217,6 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
1217{ 1217{
1218 unsigned long size, offset; 1218 unsigned long size, offset;
1219 const char *name; 1219 const char *name;
1220 char *modname;
1221 1220
1222 *startp = *endp = 0; 1221 *startp = *endp = 0;
1223 if (pc == 0) 1222 if (pc == 0)
@@ -1225,7 +1224,7 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
1225 if (setjmp(bus_error_jmp) == 0) { 1224 if (setjmp(bus_error_jmp) == 0) {
1226 catch_memory_errors = 1; 1225 catch_memory_errors = 1;
1227 sync(); 1226 sync();
1228 name = kallsyms_lookup(pc, &size, &offset, &modname, tmpstr); 1227 name = kallsyms_lookup(pc, &size, &offset, NULL, tmpstr);
1229 if (name != NULL) { 1228 if (name != NULL) {
1230 *startp = pc - offset; 1229 *startp = pc - offset;
1231 *endp = pc - offset + size; 1230 *endp = pc - offset + size;