summaryrefslogtreecommitdiff
path: root/arch/s390/include/asm/fpu
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2016-02-19 14:29:05 (GMT)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-02-22 08:29:35 (GMT)
commit1b17cb796f5d40ffa239c6926385abd83a77a49b (patch)
treec6c5fd79a1215194de5c685868830f190e2bf1e1 /arch/s390/include/asm/fpu
parent342300cc9cd3428bc6bfe5809bfcc1b9a0f06702 (diff)
downloadlinux-1b17cb796f5d40ffa239c6926385abd83a77a49b.tar.xz
s390/fpu: signals vs. floating point control register
git commit 904818e2f229f3d94ec95f6932a6358c81e73d78 "s390/kernel: introduce fpu-internal.h with fpu helper functions" introduced the fpregs_store / fp_regs_load helper. These function fail to save and restore the floating pointer control registers. The effect is that the FPC is not correctly handled on signal delivery and signal return. Cc: stable@vger.kernel.org # 4.4 Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/include/asm/fpu')
-rw-r--r--arch/s390/include/asm/fpu/internal.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/s390/include/asm/fpu/internal.h b/arch/s390/include/asm/fpu/internal.h
index ea91ddf..629c908 100644
--- a/arch/s390/include/asm/fpu/internal.h
+++ b/arch/s390/include/asm/fpu/internal.h
@@ -40,6 +40,7 @@ static inline void convert_fp_to_vx(__vector128 *vxrs, freg_t *fprs)
static inline void fpregs_store(_s390_fp_regs *fpregs, struct fpu *fpu)
{
fpregs->pad = 0;
+ fpregs->fpc = fpu->fpc;
if (MACHINE_HAS_VX)
convert_vx_to_fp((freg_t *)&fpregs->fprs, fpu->vxrs);
else
@@ -49,6 +50,7 @@ static inline void fpregs_store(_s390_fp_regs *fpregs, struct fpu *fpu)
static inline void fpregs_load(_s390_fp_regs *fpregs, struct fpu *fpu)
{
+ fpu->fpc = fpregs->fpc;
if (MACHINE_HAS_VX)
convert_fp_to_vx(fpu->vxrs, (freg_t *)&fpregs->fprs);
else