On it's own not much of a cleanup but it prepares for more/similar code.
Unified · Split
| @@ -50,6 +50,13 @@ · 49 unmodified lines | |||
| 50 | # define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31)) | 50 | # define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31)) |
| 51 | #endif | 51 | #endif |
| 52 | 52 | ||
| 53 | #ifdef CONFIG_RETPOLINE | ||
| 54 | # define DISABLE_RETPOLINE 0 | ||
| 55 | #else | ||
| 56 | # define DISABLE_RETPOLINE ((1 << (X86_FEATURE_RETPOLINE & 31)) | \ | ||
| 57 | (1 << (X86_FEATURE_RETPOLINE_LFENCE & 31))) | ||
| 58 | #endif | ||
| 59 | |||
| 53 | #ifdef CONFIG_INTEL_IOMMU_SVM | 60 | #ifdef CONFIG_INTEL_IOMMU_SVM |
| 54 | # define DISABLE_ENQCMD 0 | 61 | # define DISABLE_ENQCMD 0 |
| 55 | #else | 62 | #else |
| @@ -82,7 +89,7 @@ · 26 unmodified lines | |||
| 82 | #define DISABLED_MASK8 (DISABLE_TDX_GUEST) | 89 | #define DISABLED_MASK8 (DISABLE_TDX_GUEST) |
| 83 | #define DISABLED_MASK9 (DISABLE_SGX) | 90 | #define DISABLED_MASK9 (DISABLE_SGX) |
| 84 | #define DISABLED_MASK10 0 | 91 | #define DISABLED_MASK10 0 |
| 85 | #define DISABLED_MASK11 0 | 92 | #define DISABLED_MASK11 (DISABLE_RETPOLINE) |
| 86 | #define DISABLED_MASK12 0 | 93 | #define DISABLED_MASK12 0 |
| 87 | #define DISABLED_MASK13 0 | 94 | #define DISABLED_MASK13 0 |
| 88 | #define DISABLED_MASK14 0 | 95 | #define DISABLED_MASK14 0 |
| @@ -120,17 +120,16 @@ · 119 unmodified lines | |||
| 120 | _ASM_PTR " 999b\n\t" \ | 120 | _ASM_PTR " 999b\n\t" \ |
| 121 | ".popsection\n\t" | 121 | ".popsection\n\t" |
| 122 | 122 | ||
| 123 | #ifdef CONFIG_RETPOLINE | ||
| 124 | |||
| 125 | typedef u8 retpoline_thunk_t[RETPOLINE_THUNK_SIZE]; | 123 | typedef u8 retpoline_thunk_t[RETPOLINE_THUNK_SIZE]; |
| 124 | extern retpoline_thunk_t __x86_indirect_thunk_array[]; | ||
| 125 | |||
| 126 | #ifdef CONFIG_RETPOLINE | ||
| 126 | 127 | ||
| 127 | #define GEN(reg) \ | 128 | #define GEN(reg) \ |
| 128 | extern retpoline_thunk_t __x86_indirect_thunk_ ## reg; | 129 | extern retpoline_thunk_t __x86_indirect_thunk_ ## reg; |
| 129 | #include <asm/GEN-for-each-reg.h> | 130 | #include <asm/GEN-for-each-reg.h> |
| 130 | #undef GEN | 131 | #undef GEN |
| 131 | 132 | ||
| 132 | extern retpoline_thunk_t __x86_indirect_thunk_array[]; | ||
| 133 | |||
| 134 | #ifdef CONFIG_X86_64 | 133 | #ifdef CONFIG_X86_64 |
| 135 | 134 | ||
| 136 | /* | 135 | /* |
| @@ -412,16 +412,15 @@ static void emit_indirect_jump(u8 **pprog, int reg, u8 *ip) · 411 unmodified lines | |||
| 412 | { | 412 | { |
| 413 | u8 *prog = *pprog; | 413 | u8 *prog = *pprog; |
| 414 | 414 | ||
| 415 | #ifdef CONFIG_RETPOLINE | ||
| 416 | if (cpu_feature_enabled(X86_FEATURE_RETPOLINE_LFENCE)) { | 415 | if (cpu_feature_enabled(X86_FEATURE_RETPOLINE_LFENCE)) { |
| 417 | EMIT_LFENCE(); | 416 | EMIT_LFENCE(); |
| 418 | EMIT2(0xFF, 0xE0 + reg); | 417 | EMIT2(0xFF, 0xE0 + reg); |
| 419 | } else if (cpu_feature_enabled(X86_FEATURE_RETPOLINE)) { | 418 | } else if (cpu_feature_enabled(X86_FEATURE_RETPOLINE)) { |
| 420 | OPTIMIZER_HIDE_VAR(reg); | 419 | OPTIMIZER_HIDE_VAR(reg); |
| 421 | emit_jump(&prog, &__x86_indirect_thunk_array[reg], ip); | 420 | emit_jump(&prog, &__x86_indirect_thunk_array[reg], ip); |
| 422 | } else | 421 | } else { |
| 423 | #endif | 422 | EMIT2(0xFF, 0xE0 + reg); |
| 424 | EMIT2(0xFF, 0xE0 + reg); | 423 | } |
| 425 | 424 | ||
| 426 | *pprog = prog; | 425 | *pprog = prog; |
| 427 | } | 426 | } |