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 | 50 | # define DISABLE_PTI (1 << (X86_FEATURE_PTI & 31)) |
| 51 | 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 | 60 | #ifdef CONFIG_INTEL_IOMMU_SVM |
| 54 | 61 | # define DISABLE_ENQCMD 0 |
| 55 | 62 | #else |
| @@ -82,7 +89,7 @@ · 26 unmodified lines | ||
| 82 | 89 | #define DISABLED_MASK8 (DISABLE_TDX_GUEST) |
| 83 | 90 | #define DISABLED_MASK9 (DISABLE_SGX) |
| 84 | 91 | #define DISABLED_MASK10 0 |
| 85 | −#define DISABLED_MASK11 0 | |
| 92 | +#define DISABLED_MASK11 (DISABLE_RETPOLINE) | |
| 86 | 93 | #define DISABLED_MASK12 0 |
| 87 | 94 | #define DISABLED_MASK13 0 |
| 88 | 95 | #define DISABLED_MASK14 0 |
| @@ -120,17 +120,16 @@ · 119 unmodified lines | ||
| 120 | 120 | _ASM_PTR " 999b\n\t" \ |
| 121 | 121 | ".popsection\n\t" |
| 122 | 122 | |
| 123 | −#ifdef CONFIG_RETPOLINE | |
| 124 | − | |
| 125 | 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 | 128 | #define GEN(reg) \ |
| 128 | 129 | extern retpoline_thunk_t __x86_indirect_thunk_ ## reg; |
| 129 | 130 | #include <asm/GEN-for-each-reg.h> |
| 130 | 131 | #undef GEN |
| 131 | 132 | |
| 132 | −extern retpoline_thunk_t __x86_indirect_thunk_array[]; | |
| 133 | − | |
| 134 | 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 | 413 | u8 *prog = *pprog; |
| 414 | 414 | |
| 415 | −#ifdef CONFIG_RETPOLINE | |
| 416 | 415 | if (cpu_feature_enabled(X86_FEATURE_RETPOLINE_LFENCE)) { |
| 417 | 416 | EMIT_LFENCE(); |
| 418 | 417 | EMIT2(0xFF, 0xE0 + reg); |
| 419 | 418 | } else if (cpu_feature_enabled(X86_FEATURE_RETPOLINE)) { |
| 420 | 419 | OPTIMIZER_HIDE_VAR(reg); |
| 421 | 420 | emit_jump(&prog, &__x86_indirect_thunk_array[reg], ip); |
| 422 | − } else | |
| 423 | −#endif | |
| 424 | − EMIT2(0xFF, 0xE0 + reg); | |
| 421 | + } else { | |
| 422 | + EMIT2(0xFF, 0xE0 + reg); | |
| 423 | + } | |
| 425 | 424 | |
| 426 | 425 | *pprog = prog; |
| 427 | 426 | } |