x86/paravirt: Remove clobber bitmask from .parainstructions
authorKees Cook <keescook@chromium.org>
Sat, 3 Sep 2022 07:37:06 +0000 (00:37 -0700)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 24 Nov 2022 12:53:54 +0000 (13:53 +0100)
The u16 "clobber" value is not used in .parainstructions since commit
27876f3882fd ("x86/paravirt: Remove clobbers from struct paravirt_patch_site")

Remove the u16 from the section macro, the argument from all macros, and
all now-unused CLBR_* macros.

Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Reviewed-by: Juergen Gross <jgross@suse.com>
Link: https://lore.kernel.org/r/20220903073706.3193746-1-keescook@chromium.org
arch/x86/include/asm/paravirt_types.h

index 27c6927..8c1da41 100644 (file)
@@ -20,37 +20,6 @@ enum paravirt_lazy_mode {
 
 #ifdef CONFIG_PARAVIRT
 
-/* Bitmask of what can be clobbered: usually at least eax. */
-#define CLBR_EAX  (1 << 0)
-#define CLBR_ECX  (1 << 1)
-#define CLBR_EDX  (1 << 2)
-#define CLBR_EDI  (1 << 3)
-
-#ifdef CONFIG_X86_32
-/* CLBR_ANY should match all regs platform has. For i386, that's just it */
-#define CLBR_ANY  ((1 << 4) - 1)
-
-#define CLBR_ARG_REGS  (CLBR_EAX | CLBR_EDX | CLBR_ECX)
-#define CLBR_RET_REG   (CLBR_EAX | CLBR_EDX)
-#else
-#define CLBR_RAX  CLBR_EAX
-#define CLBR_RCX  CLBR_ECX
-#define CLBR_RDX  CLBR_EDX
-#define CLBR_RDI  CLBR_EDI
-#define CLBR_RSI  (1 << 4)
-#define CLBR_R8   (1 << 5)
-#define CLBR_R9   (1 << 6)
-#define CLBR_R10  (1 << 7)
-#define CLBR_R11  (1 << 8)
-
-#define CLBR_ANY  ((1 << 9) - 1)
-
-#define CLBR_ARG_REGS  (CLBR_RDI | CLBR_RSI | CLBR_RDX | \
-                        CLBR_RCX | CLBR_R8 | CLBR_R9)
-#define CLBR_RET_REG   (CLBR_RAX)
-
-#endif /* X86_64 */
-
 #ifndef __ASSEMBLY__
 
 #include <asm/desc_defs.h>
@@ -297,27 +266,23 @@ extern struct paravirt_patch_template pv_ops;
 #define paravirt_type(op)                              \
        [paravirt_typenum] "i" (PARAVIRT_PATCH(op)),    \
        [paravirt_opptr] "m" (pv_ops.op)
-#define paravirt_clobber(clobber)              \
-       [paravirt_clobber] "i" (clobber)
-
 /*
  * Generate some code, and mark it as patchable by the
  * apply_paravirt() alternate instruction patcher.
  */
-#define _paravirt_alt(insn_string, type, clobber)      \
+#define _paravirt_alt(insn_string, type)               \
        "771:\n\t" insn_string "\n" "772:\n"            \
        ".pushsection .parainstructions,\"a\"\n"        \
        _ASM_ALIGN "\n"                                 \
        _ASM_PTR " 771b\n"                              \
        "  .byte " type "\n"                            \
        "  .byte 772b-771b\n"                           \
-       "  .short " clobber "\n"                        \
        _ASM_ALIGN "\n"                                 \
        ".popsection\n"
 
 /* Generate patchable code, with the default asm parameters. */
 #define paravirt_alt(insn_string)                                      \
-       _paravirt_alt(insn_string, "%c[paravirt_typenum]", "%c[paravirt_clobber]")
+       _paravirt_alt(insn_string, "%c[paravirt_typenum]")
 
 /* Simple instruction patching code. */
 #define NATIVE_LABEL(a,x,b) "\n\t.globl " a #x "_" #b "\n" a #x "_" #b ":\n\t"
@@ -469,20 +434,19 @@ int paravirt_disable_iospace(void);
        })
 
 
-#define ____PVOP_CALL(ret, op, clbr, call_clbr, extra_clbr, ...)       \
+#define ____PVOP_CALL(ret, op, call_clbr, extra_clbr, ...)     \
        ({                                                              \
                PVOP_CALL_ARGS;                                         \
                PVOP_TEST_NULL(op);                                     \
                asm volatile(paravirt_alt(PARAVIRT_CALL)                \
                             : call_clbr, ASM_CALL_CONSTRAINT           \
                             : paravirt_type(op),                       \
-                              paravirt_clobber(clbr),                  \
                               ##__VA_ARGS__                            \
                             : "memory", "cc" extra_clbr);              \
                ret;                                                    \
        })
 
-#define ____PVOP_ALT_CALL(ret, op, alt, cond, clbr, call_clbr,         \
+#define ____PVOP_ALT_CALL(ret, op, alt, cond, call_clbr,               \
                          extra_clbr, ...)                              \
        ({                                                              \
                PVOP_CALL_ARGS;                                         \
@@ -491,45 +455,44 @@ int paravirt_disable_iospace(void);
                                         alt, cond)                     \
                             : call_clbr, ASM_CALL_CONSTRAINT           \
                             : paravirt_type(op),                       \
-                              paravirt_clobber(clbr),                  \
                               ##__VA_ARGS__                            \
                             : "memory", "cc" extra_clbr);              \
                ret;                                                    \
        })
 
 #define __PVOP_CALL(rettype, op, ...)                                  \
-       ____PVOP_CALL(PVOP_RETVAL(rettype), op, CLBR_ANY,               \
+       ____PVOP_CALL(PVOP_RETVAL(rettype), op,                         \
                      PVOP_CALL_CLOBBERS, EXTRA_CLOBBERS, ##__VA_ARGS__)
 
 #define __PVOP_ALT_CALL(rettype, op, alt, cond, ...)                   \
-       ____PVOP_ALT_CALL(PVOP_RETVAL(rettype), op, alt, cond, CLBR_ANY,\
+       ____PVOP_ALT_CALL(PVOP_RETVAL(rettype), op, alt, cond,          \
                          PVOP_CALL_CLOBBERS, EXTRA_CLOBBERS,           \
                          ##__VA_ARGS__)
 
 #define __PVOP_CALLEESAVE(rettype, op, ...)                            \
-       ____PVOP_CALL(PVOP_RETVAL(rettype), op.func, CLBR_RET_REG,      \
+       ____PVOP_CALL(PVOP_RETVAL(rettype), op.func,                    \
                      PVOP_CALLEE_CLOBBERS, , ##__VA_ARGS__)
 
 #define __PVOP_ALT_CALLEESAVE(rettype, op, alt, cond, ...)             \
        ____PVOP_ALT_CALL(PVOP_RETVAL(rettype), op.func, alt, cond,     \
-                         CLBR_RET_REG, PVOP_CALLEE_CLOBBERS, , ##__VA_ARGS__)
+                         PVOP_CALLEE_CLOBBERS, , ##__VA_ARGS__)
 
 
 #define __PVOP_VCALL(op, ...)                                          \
-       (void)____PVOP_CALL(, op, CLBR_ANY, PVOP_VCALL_CLOBBERS,        \
+       (void)____PVOP_CALL(, op, PVOP_VCALL_CLOBBERS,                  \
                       VEXTRA_CLOBBERS, ##__VA_ARGS__)
 
 #define __PVOP_ALT_VCALL(op, alt, cond, ...)                           \
-       (void)____PVOP_ALT_CALL(, op, alt, cond, CLBR_ANY,              \
+       (void)____PVOP_ALT_CALL(, op, alt, cond,                        \
                                PVOP_VCALL_CLOBBERS, VEXTRA_CLOBBERS,   \
                                ##__VA_ARGS__)
 
 #define __PVOP_VCALLEESAVE(op, ...)                                    \
-       (void)____PVOP_CALL(, op.func, CLBR_RET_REG,                    \
+       (void)____PVOP_CALL(, op.func,                                  \
                            PVOP_VCALLEE_CLOBBERS, , ##__VA_ARGS__)
 
 #define __PVOP_ALT_VCALLEESAVE(op, alt, cond, ...)                     \
-       (void)____PVOP_ALT_CALL(, op.func, alt, cond, CLBR_RET_REG,     \
+       (void)____PVOP_ALT_CALL(, op.func, alt, cond,                   \
                                PVOP_VCALLEE_CLOBBERS, , ##__VA_ARGS__)