Bläddra i källkod

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>
Paul Mundt 15 år sedan
förälder
incheckning
4291b730cd
1 ändrade filer med 2 tillägg och 0 borttagningar
  1. 2 0
      arch/sh/kernel/cpu/fpu.c

+ 2 - 0
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);