s390/alternatives: use instructions instead of byte patterns
authorHeiko Carstens <hca@linux.ibm.com>
Sun, 13 Mar 2022 21:04:10 +0000 (22:04 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Sun, 27 Mar 2022 20:18:38 +0000 (22:18 +0200)
Use readable nop instructions within the code which generates
the padding areas, instead of unreadable byte patterns.

The generated code is identical.

Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/alternative-asm.h
arch/s390/include/asm/alternative.h

index 955d620..221d790 100644 (file)
  * a 2-byte nop if the size of the area is not divisible by 6.
  */
 .macro alt_pad_fill bytes
-       .fill   ( \bytes ) / 6, 6, 0xc0040000
-       .fill   ( \bytes ) % 6 / 4, 4, 0x47000000
-       .fill   ( \bytes ) % 6 % 4 / 2, 2, 0x0700
+       .rept   ( \bytes ) / 6
+       jgnop   .
+       .endr
+       .rept   ( \bytes ) % 6 / 4
+       nop
+       .endr
+       .rept   ( \bytes ) % 6 % 4 / 2
+       nopr
+       .endr
 .endm
 
 /*
index d3880ca..6c72495 100644 (file)
@@ -71,11 +71,18 @@ void apply_alternatives(struct alt_instr *start, struct alt_instr *end);
        ".if " oldinstr_pad_len(num) " > 6\n"                           \
        "\tjg " e_oldinstr_pad_end "f\n"                                \
        "6620:\n"                                                       \
-       "\t.fill (" oldinstr_pad_len(num) " - (6620b-662b)) / 2, 2, 0x0700\n" \
+       "\t.rept (" oldinstr_pad_len(num) " - (6620b-662b)) / 2\n"      \
+       "\tnopr\n"                                                      \
        ".else\n"                                                       \
-       "\t.fill " oldinstr_pad_len(num) " / 6, 6, 0xc0040000\n"        \
-       "\t.fill " oldinstr_pad_len(num) " %% 6 / 4, 4, 0x47000000\n"   \
-       "\t.fill " oldinstr_pad_len(num) " %% 6 %% 4 / 2, 2, 0x0700\n"  \
+       "\t.rept " oldinstr_pad_len(num) " / 6\n"                       \
+       "\t.jgnop .\n"                                                  \
+       "\t.endr\n"                                                     \
+       "\t.rept " oldinstr_pad_len(num) " %% 6 / 4\n"                  \
+       "\tnop\n"                                                       \
+       "\t.endr\n"                                                     \
+       "\t.rept " oldinstr_pad_len(num) " %% 6 %% 4 / 2\n"             \
+       "\tnopr\n"                                                      \
+       ".endr\n"                                                       \
        ".endif\n"
 
 #define OLDINSTR(oldinstr, num)                                                \