diff options
author | Paul Mundt <lethal@linux-sh.org> | 2010-01-18 11:39:49 (GMT) |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-01-18 11:39:49 (GMT) |
commit | 4291b730cd0f0cf98a90d946b6cabbd804397350 (patch) | |
tree | ffee832e1cef4c510275cb4b3a08df9bb5dcb6e1 /arch/sh/kernel | |
parent | 3d467676abf5f01f5ee99056273a58486968e252 (diff) | |
download | linux-fsl-qoriq-4291b730cd0f0cf98a90d946b6cabbd804397350.tar.xz |
sh: Need IRQs enabled for init_fpu().
This tosses in a local_irq_enable()/disable() pair around the init_fpu()
callsite in the FPU state restore exception handler. Fixes up a slab BUG
triggered by making a slab cache allocation that can sleep whilst
irqs_disabled(). This follows the behaviour undertaken by the x86
implementation.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel')
-rw-r--r-- | arch/sh/kernel/cpu/fpu.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/sh/kernel/cpu/fpu.c b/arch/sh/kernel/cpu/fpu.c index c23e672..f059ed6 100644 --- a/arch/sh/kernel/cpu/fpu.c +++ b/arch/sh/kernel/cpu/fpu.c @@ -56,6 +56,7 @@ void fpu_state_restore(struct pt_regs *regs) } if (!tsk_used_math(tsk)) { + local_irq_enable(); /* * does a slab alloc which can sleep */ @@ -66,6 +67,7 @@ void fpu_state_restore(struct pt_regs *regs) do_group_exit(SIGKILL); return; } + local_irq_disable(); } grab_fpu(regs); |