[PATCH v3 1/3] x86/retpoline: Add X86_FEATURE_RETPOLINE_GENERIC
From: Andi Kleen
Date: Tue Jan 09 2018 - 21:29:18 EST
From: Andi Kleen <ak@xxxxxxxxxxxxxxx>
On 64bit we want to split X86_FEATURE_RETPOLINE and X86_FEATURE_RETPOLINE_AMD,
so that only one is set. This enables new simpler ALTERNATIVE sequences.
But 32bit requires a common flag because it uses common code for both.
Rename the existing X86_FEATURE_RETPOLINE to X86_FEATURE_GENERIC
Use the existing X86_FEATURE_RETPOLINE as a common flag
that is set for both the AMD and generic Retpoline.
Then don't set the generic RETPOLINE flag for AMD.
Signed-off-by: Andi Kleen <ak@xxxxxxxxxxxxxxx>
---
arch/x86/include/asm/cpufeatures.h | 3 ++-
arch/x86/kernel/cpu/bugs.c | 4 +++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
index f275447862f4..9db5ed0e01a9 100644
--- a/arch/x86/include/asm/cpufeatures.h
+++ b/arch/x86/include/asm/cpufeatures.h
@@ -203,7 +203,7 @@
#define X86_FEATURE_PROC_FEEDBACK ( 7*32+ 9) /* AMD ProcFeedbackInterface */
#define X86_FEATURE_SME ( 7*32+10) /* AMD Secure Memory Encryption */
#define X86_FEATURE_PTI ( 7*32+11) /* Kernel Page Table Isolation enabled */
-#define X86_FEATURE_RETPOLINE ( 7*32+12) /* Generic Retpoline mitigation for Spectre variant 2 */
+#define X86_FEATURE_RETPOLINE_GENERIC ( 7*32+12) /* Generic Retpoline mitigation for Spectre variant 2 */
#define X86_FEATURE_RETPOLINE_AMD ( 7*32+13) /* AMD Retpoline mitigation for Spectre variant 2 */
#define X86_FEATURE_INTEL_PPIN ( 7*32+14) /* Intel Processor Inventory Number */
#define X86_FEATURE_INTEL_PT ( 7*32+15) /* Intel Processor Trace */
@@ -211,6 +211,7 @@
#define X86_FEATURE_AVX512_4FMAPS ( 7*32+17) /* AVX-512 Multiply Accumulation Single precision */
#define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */
+#define X86_FEATURE_RETPOLINE ( 7*32+19) /* Common code for both RETPOLINE_GENERIC and RETPOLINE_AMD */
/* Virtualization flags: Linux defined, word 8 */
#define X86_FEATURE_TPR_SHADOW ( 8*32+ 0) /* Intel TPR Shadow */
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index b957f771a5b7..68b08967a6e1 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -155,6 +155,7 @@ void __init spectre_v2_check_boottime_disable(void)
retpoline_generic:
spectre_v2_enabled = retp_compiler() ?
SPECTRE_V2_RETPOLINE_GENERIC : SPECTRE_V2_RETPOLINE_MINIMAL;
+ setup_force_cpu_cap(X86_FEATURE_RETPOLINE_GENERIC);
}
setup_force_cpu_cap(X86_FEATURE_RETPOLINE);
return;
@@ -165,8 +166,9 @@ void __init spectre_v2_check_boottime_disable(void)
pr_err("kernel not compiled with retpoline; no mitigation available!");
#endif
disable:
- setup_clear_cpu_cap(X86_FEATURE_RETPOLINE);
+ setup_clear_cpu_cap(X86_FEATURE_RETPOLINE_GENERIC);
setup_clear_cpu_cap(X86_FEATURE_RETPOLINE_AMD);
+ setup_clear_cpu_cap(X86_FEATURE_RETPOLINE);
return;
}
--
2.14.3