diff options
Diffstat (limited to 'arch/mips/kernel/signal32.c')
-rw-r--r-- | arch/mips/kernel/signal32.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/mips/kernel/signal32.c b/arch/mips/kernel/signal32.c index 151fd2f0893a..53a337cfeb66 100644 --- a/arch/mips/kernel/signal32.c +++ b/arch/mips/kernel/signal32.c | |||
@@ -209,10 +209,10 @@ static int setup_sigcontext32(struct pt_regs *regs, | |||
209 | * Save FPU state to signal context. Signal handler | 209 | * Save FPU state to signal context. Signal handler |
210 | * will "inherit" current FPU state. | 210 | * will "inherit" current FPU state. |
211 | */ | 211 | */ |
212 | preempt_disable(); | ||
212 | own_fpu(1); | 213 | own_fpu(1); |
213 | enable_fp_in_kernel(); | ||
214 | err |= save_fp_context32(sc); | 214 | err |= save_fp_context32(sc); |
215 | disable_fp_in_kernel(); | 215 | preempt_enable(); |
216 | } | 216 | } |
217 | return err; | 217 | return err; |
218 | } | 218 | } |
@@ -225,7 +225,10 @@ check_and_restore_fp_context32(struct sigcontext32 __user *sc) | |||
225 | err = sig = fpcsr_pending(&sc->sc_fpc_csr); | 225 | err = sig = fpcsr_pending(&sc->sc_fpc_csr); |
226 | if (err > 0) | 226 | if (err > 0) |
227 | err = 0; | 227 | err = 0; |
228 | preempt_disable(); | ||
229 | own_fpu(0); | ||
228 | err |= restore_fp_context32(sc); | 230 | err |= restore_fp_context32(sc); |
231 | preempt_enable(); | ||
229 | return err ?: sig; | 232 | return err ?: sig; |
230 | } | 233 | } |
231 | 234 | ||
@@ -261,11 +264,8 @@ static int restore_sigcontext32(struct pt_regs *regs, | |||
261 | 264 | ||
262 | if (used_math) { | 265 | if (used_math) { |
263 | /* restore fpu context if we have used it before */ | 266 | /* restore fpu context if we have used it before */ |
264 | own_fpu(0); | ||
265 | enable_fp_in_kernel(); | ||
266 | if (!err) | 267 | if (!err) |
267 | err = check_and_restore_fp_context32(sc); | 268 | err = check_and_restore_fp_context32(sc); |
268 | disable_fp_in_kernel(); | ||
269 | } else { | 269 | } else { |
270 | /* signal handler may have used FPU. Give it up. */ | 270 | /* signal handler may have used FPU. Give it up. */ |
271 | lose_fpu(0); | 271 | lose_fpu(0); |