s390/nmi: use vector instruction macros instead of byte patterns
authorHeiko Carstens <hca@linux.ibm.com>
Thu, 1 Dec 2022 17:01:36 +0000 (18:01 +0100)
committerAlexander Gordeev <agordeev@linux.ibm.com>
Tue, 6 Dec 2022 15:18:23 +0000 (16:18 +0100)
Use vector instruction macros instead of byte patterns to increase
readability. The generated code is nearly identical:

- 1e8:  e7 0f 10 00 00 36       vlm     %v0,%v15,0(%r1)
- 1ee:  e7 0f 11 00 0c 36       vlm     %v16,%v31,256(%r1)
+ 1e8:  e7 0f 10 00 30 36       vlm     %v0,%v15,0(%r1),3
+ 1ee:  e7 0f 11 00 3c 36       vlm     %v16,%v31,256(%r1),3

By using the VLM macro the alignment hint is automatically specified
too. Even though from a performance perspective it doesn't matter at
all for the machine check code, this shows yet another benefit when
using the macros.

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
arch/s390/kernel/nmi.c

index 31cb9b0..f384f2d 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/time.h>
 #include <linux/module.h>
 #include <linux/sched/signal.h>
-
+#include <linux/kvm_host.h>
 #include <linux/export.h>
 #include <asm/lowcore.h>
 #include <asm/smp.h>
@@ -31,8 +31,7 @@
 #include <asm/ctl_reg.h>
 #include <asm/asm-offsets.h>
 #include <asm/pai.h>
-
-#include <linux/kvm_host.h>
+#include <asm/vx-insn.h>
 
 struct mcck_struct {
        unsigned int kill_task : 1;
@@ -293,8 +292,8 @@ static int notrace s390_validate_registers(union mci mci, int umode)
                __ctl_load(cr0.val, 0, 0);
                asm volatile(
                        "       la      1,%0\n"
-                       "       .word   0xe70f,0x1000,0x0036\n" /* vlm 0,15,0(1) */
-                       "       .word   0xe70f,0x1100,0x0c36\n" /* vlm 16,31,256(1) */
+                       "       VLM     0,15,0,1\n"
+                       "       VLM     16,31,256,1\n"
                        :
                        : "Q" (*(struct vx_array *)mcesa->vector_save_area)
                        : "1");