#define ARCH_MIN_TASKALIGN     8
 
+extern __vector128 init_task_fpu_regs[__NUM_VXRS];
 #define INIT_THREAD {                                                  \
        .ksp = sizeof(init_stack) + (unsigned long) &init_stack,        \
+       .fpu.regs = (void *)&init_task_fpu_regs,                        \
 }
 
 /*
 
        stfpc   __THREAD_FPU_fpc(%r2)
 .Lsave_fpu_regs_fpc_end:
        lg      %r3,__THREAD_FPU_regs(%r2)
-       ltgr    %r3,%r3
-       jz      .Lsave_fpu_regs_done      # no save area -> set CIF_FPU
        tm      __LC_MACHINE_FLAGS+5,4    # MACHINE_HAS_VX
        jz      .Lsave_fpu_regs_fp        # no -> store FP regs
 .Lsave_fpu_regs_vx_low:
        stfpc   __THREAD_FPU_fpc(%r2)
 1:     # Load register save area and check if VX is active
        lg      %r3,__THREAD_FPU_regs(%r2)
-       ltgr    %r3,%r3
-       jz      5f                        # no save area -> set CIF_FPU
        tm      __LC_MACHINE_FLAGS+5,4    # MACHINE_HAS_VX
        jz      4f                        # no VX -> store FP regs
 2:     # Store vector registers (V0-V15)
 
 #include <linux/kprobes.h>
 #include <linux/random.h>
 #include <linux/module.h>
+#include <linux/init_task.h>
 #include <asm/io.h>
 #include <asm/processor.h>
 #include <asm/vtimer.h>
 
 asmlinkage void ret_from_fork(void) asm ("ret_from_fork");
 
+/* FPU save area for the init task */
+__vector128 init_task_fpu_regs[__NUM_VXRS] __init_task_data;
+
 /*
  * Return saved PC of a blocked thread. used in kernel/sched.
  * resume in entry.S does not create a new stack frame, it