[IA64] restore_sigcontext is not preempt safe
authorKeith Owens <kaos@sgi.com>
Fri, 1 Jul 2005 05:53:00 +0000 (22:53 -0700)
committerTony Luck <tony.luck@intel.com>
Wed, 6 Jul 2005 22:31:15 +0000 (15:31 -0700)
restore_sigcontext calls ia64_set_local_fpu_owner() which requires that
preempt be disabled.

Signed-off-by: Keith Owens <kaos@sgi.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/kernel/signal.c

index edd9f07860b227a230ab981d1a8691a68bd01a7a..b8a0a7d257a9b3f427561faadb6d98eaf7b4648f 100644 (file)
@@ -143,6 +143,7 @@ restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
 
                __copy_from_user(current->thread.fph, &sc->sc_fr[32], 96*16);
                psr->mfh = 0;   /* drop signal handler's fph contents... */
+               preempt_disable();
                if (psr->dfh)
                        ia64_drop_fpu(current);
                else {
@@ -150,6 +151,7 @@ restore_sigcontext (struct sigcontext __user *sc, struct sigscratch *scr)
                        __ia64_load_fpu(current->thread.fph);
                        ia64_set_local_fpu_owner(current);
                }
+               preempt_enable();
        }
        return err;
 }