Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ac27779 authored by Hendrik Brueckner's avatar Hendrik Brueckner Committed by Martin Schwidefsky
Browse files

s390/fpu: add static FPU save area for init_task



Previously, the init task did not have an allocated FPU save area and
saving an FPU state was not possible.  Now if the vector extension is
always enabled, provide a static FPU save area to save FPU states of
vector instructions that can be executed quite early.

Signed-off-by: default avatarHendrik Brueckner <brueckner@linux.vnet.ibm.com>
Reviewed-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent b5510d9b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -139,8 +139,10 @@ struct stack_frame {

#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,			\
}

/*
+0 −4
Original line number Diff line number Diff line
@@ -762,8 +762,6 @@ ENTRY(save_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:
@@ -1193,8 +1191,6 @@ cleanup_critical:
	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)
+4 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#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>
@@ -36,6 +37,9 @@

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