s390/fpu: use KERNEL_VXR_LOW instead of KERNEL_VXR_V0V7
authorHeiko Carstens <hca@linux.ibm.com>
Sat, 3 Feb 2024 10:45:00 +0000 (11:45 +0100)
committerHeiko Carstens <hca@linux.ibm.com>
Fri, 16 Feb 2024 13:30:14 +0000 (14:30 +0100)
Use KERNEL_VXR_LOW instead of KERNEL_VXR_V0V7 for configurations without
vector registers in order to decide if floating point registers need to be
saved and restored.

Kernel FPU areas which use floating point registers are supposed to use the
KERNEL_FPR mask, however users may also open-code this and specify
KERNEL_VXR_V0V7 and/or KERNEL_VXR_V8V15. If only KERNEL_VXR_V8V15 is
specified floating point registers wouldn't be saved and restored. Improve
this and check for both bits.

There are currently no users where this would fix a bug.

Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/kernel/fpu.c

index a4f3449cc814162b9972faa67e33481b8a42a65f..21c9885cfb211dd091b4384d398b803cb6c2654d 100644 (file)
@@ -25,7 +25,7 @@ void __kernel_fpu_begin(struct kernel_fpu *state, u32 flags)
                asm volatile("stfpc %0" : "=Q" (state->fpc));
 
        if (!cpu_has_vx()) {
-               if (flags & KERNEL_VXR_V0V7) {
+               if (flags & KERNEL_VXR_LOW) {
                        /* Save floating-point registers */
                        asm volatile("std 0,%0" : "=Q" (state->fprs[0]));
                        asm volatile("std 1,%0" : "=Q" (state->fprs[1]));
@@ -107,7 +107,7 @@ void __kernel_fpu_end(struct kernel_fpu *state, u32 flags)
                asm volatile("lfpc %0" : : "Q" (state->fpc));
 
        if (!cpu_has_vx()) {
-               if (flags & KERNEL_VXR_V0V7) {
+               if (flags & KERNEL_VXR_LOW) {
                        /* Restore floating-point registers */
                        asm volatile("ld 0,%0" : : "Q" (state->fprs[0]));
                        asm volatile("ld 1,%0" : : "Q" (state->fprs[1]));