aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/signal32.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/kernel/signal32.c')
-rw-r--r--arch/mips/kernel/signal32.c10
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);