]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/x86/kernel/process.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux...
[karo-tx-linux.git] / arch / x86 / kernel / process.c
index f804dc935d2adffb37f587d34de9c4cd10ce70a3..e127ddaa2d5ad3e139ff7a99fb5485b43fb19416 100644 (file)
@@ -64,14 +64,16 @@ EXPORT_SYMBOL_GPL(task_xstate_cachep);
  */
 int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
 {
-       int ret;
-
        *dst = *src;
-       if (fpu_allocated(&src->thread.fpu)) {
-               memset(&dst->thread.fpu, 0, sizeof(dst->thread.fpu));
-               ret = fpu_alloc(&dst->thread.fpu);
-               if (ret)
-                       return ret;
+
+       dst->thread.fpu_counter = 0;
+       dst->thread.fpu.has_fpu = 0;
+       dst->thread.fpu.last_cpu = ~0;
+       dst->thread.fpu.state = NULL;
+       if (tsk_used_math(src)) {
+               int err = fpu_alloc(&dst->thread.fpu);
+               if (err)
+                       return err;
                fpu_copy(dst, src);
        }
        return 0;