aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-03-03 01:11:40 -0500
committerPaul Mackerras <paulus@samba.org>2006-03-03 01:11:40 -0500
commitcd8a5673e9abb3fde0a1c25ee63a60fe1908c6f5 (patch)
treef8bc6f147866659a2fc6ba820df16e4738922971
parentc499ec24c31edf270e777a868ffd0daddcfe7ebd (diff)
powerpc: Fix might-sleep warning in program check exception handler
On 32-bit, the exception prolog for the program check exception doesn't enable interrupts early on. If it is an illegal instruction exception, we read the instruction in order to emulate certain instructions, and the get_user of the instruction triggers a WARN_ON since interrupts are still disabled. This adds a local_irq_enable() to enable interrupts before reading the instruction. Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/kernel/traps.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 7509aa6474f2..98660aedeeb7 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -814,6 +814,8 @@ void __kprobes program_check_exception(struct pt_regs *regs)
814 return; 814 return;
815 } 815 }
816 816
817 local_irq_enable();
818
817 /* Try to emulate it if we should. */ 819 /* Try to emulate it if we should. */
818 if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) { 820 if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) {
819 switch (emulate_instruction(regs)) { 821 switch (emulate_instruction(regs)) {