Переглянути джерело

[IA64] restore_sigcontext is not preempt safe

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>
Keith Owens 20 роки тому
батько
коміт
2ba3e3e65c
1 змінених файлів з 2 додано та 0 видалено
  1. 2 0
      arch/ia64/kernel/signal.c

+ 2 - 0
arch/ia64/kernel/signal.c

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