s390/kernel: dynamically allocate FP register save area
authorHendrik Brueckner <brueckner@linux.vnet.ibm.com>
Thu, 11 Jun 2015 14:57:20 +0000 (16:57 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 22 Jul 2015 07:58:00 +0000 (09:58 +0200)
Make the floating-point save area dynamically allocated and uses a flag
to distinguish whether a task uses floating-point or vector registers.

Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/fpu-internal.h
arch/s390/kernel/process.c
arch/s390/kernel/traps.c

index 04b4cfc..cc44c75 100644 (file)
@@ -8,6 +8,10 @@
 #ifndef _ASM_S390_FPU_INTERNAL_H
 #define _ASM_S390_FPU_INTERNAL_H
 
+#define FPU_USE_VX             1       /* Vector extension is active */
+
+#ifndef __ASSEMBLY__
+
 #include <linux/errno.h>
 #include <linux/string.h>
 #include <asm/linkage.h>
 
 struct fpu {
        __u32 fpc;                      /* Floating-point control */
-       __u32 pad;
-       freg_t fprs[__NUM_FPRS];        /* Floating-point register save area */
-       __vector128 *vxrs;              /* Vector register save area */
+       __u32 flags;
+       union {
+               void *regs;
+               freg_t *fprs;           /* Floating-point register save area */
+               __vector128 *vxrs;      /* Vector register save area */
+       };
 };
 
-#define is_vx_fpu(fpu) (!!(fpu)->vxrs)
-#define is_vx_task(tsk) (!!(tsk)->thread.fpu.vxrs)
+#define is_vx_fpu(fpu) (!!((fpu)->flags & FPU_USE_VX))
+#define is_vx_task(tsk) (!!((tsk)->thread.fpu.flags & FPU_USE_VX))
 
 static inline int test_fp_ctl(u32 fpc)
 {
@@ -188,4 +195,6 @@ static inline void restore_fpu_regs(struct fpu *fpu)
                restore_fp_regs(fpu->fprs);
 }
 
+#endif
+
 #endif /* _ASM_S390_FPU_INTERNAL_H */
Simple merge
Simple merge