forked from SLFO-pool/xen
61 lines
2.6 KiB
Diff
61 lines
2.6 KiB
Diff
|
# Commit 656ae8f1091bcefec9c46ec3ea3ac2118742d4f6
|
||
|
# Date 2024-04-25 16:37:01 +0200
|
||
|
# Author Roger Pau Monné <roger.pau@citrix.com>
|
||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||
|
x86/spec: adjust logic that elides lfence
|
||
|
|
||
|
It's currently too restrictive by just checking whether there's a BHB clearing
|
||
|
sequence selected. It should instead check whether BHB clearing is used on
|
||
|
entry from PV or HVM specifically.
|
||
|
|
||
|
Switch to use opt_bhb_entry_{pv,hvm} instead, and then remove cpu_has_bhb_seq
|
||
|
since it no longer has any users.
|
||
|
|
||
|
Reported-by: Jan Beulich <jbeulich@suse.com>
|
||
|
Fixes: 954c983abcee ('x86/spec-ctrl: Software BHB-clearing sequences')
|
||
|
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
|
||
|
Reviewed-by: Jan Beulich <jbeulich@suse.com>
|
||
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||
|
|
||
|
--- a/xen/arch/x86/include/asm/cpufeature.h
|
||
|
+++ b/xen/arch/x86/include/asm/cpufeature.h
|
||
|
@@ -228,9 +228,6 @@ static inline bool boot_cpu_has(unsigned
|
||
|
#define cpu_bug_fpu_ptrs boot_cpu_has(X86_BUG_FPU_PTRS)
|
||
|
#define cpu_bug_null_seg boot_cpu_has(X86_BUG_NULL_SEG)
|
||
|
|
||
|
-#define cpu_has_bhb_seq (boot_cpu_has(X86_SPEC_BHB_TSX) || \
|
||
|
- boot_cpu_has(X86_SPEC_BHB_LOOPS))
|
||
|
-
|
||
|
enum _cache_type {
|
||
|
CACHE_TYPE_NULL = 0,
|
||
|
CACHE_TYPE_DATA = 1,
|
||
|
--- a/xen/arch/x86/spec_ctrl.c
|
||
|
+++ b/xen/arch/x86/spec_ctrl.c
|
||
|
@@ -2328,7 +2328,7 @@ void __init init_speculation_mitigations
|
||
|
* unconditional WRMSR. If we do have it, or we're not using any
|
||
|
* prior conditional block, then it's safe to drop the LFENCE.
|
||
|
*/
|
||
|
- if ( !cpu_has_bhb_seq &&
|
||
|
+ if ( !opt_bhb_entry_pv &&
|
||
|
(boot_cpu_has(X86_FEATURE_SC_MSR_PV) ||
|
||
|
!boot_cpu_has(X86_FEATURE_IBPB_ENTRY_PV)) )
|
||
|
setup_force_cpu_cap(X86_SPEC_NO_LFENCE_ENTRY_PV);
|
||
|
@@ -2344,7 +2344,7 @@ void __init init_speculation_mitigations
|
||
|
* active in the block that is skipped when interrupting guest
|
||
|
* context, then it's safe to drop the LFENCE.
|
||
|
*/
|
||
|
- if ( !cpu_has_bhb_seq &&
|
||
|
+ if ( !opt_bhb_entry_pv &&
|
||
|
(boot_cpu_has(X86_FEATURE_SC_MSR_PV) ||
|
||
|
(!boot_cpu_has(X86_FEATURE_IBPB_ENTRY_PV) &&
|
||
|
!boot_cpu_has(X86_FEATURE_SC_RSB_PV))) )
|
||
|
@@ -2356,7 +2356,7 @@ void __init init_speculation_mitigations
|
||
|
* A BHB sequence, if used, is the only conditional action, so if we
|
||
|
* don't have it, we don't need the safety LFENCE.
|
||
|
*/
|
||
|
- if ( !cpu_has_bhb_seq )
|
||
|
+ if ( !opt_bhb_entry_hvm )
|
||
|
setup_force_cpu_cap(X86_SPEC_NO_LFENCE_ENTRY_VMX);
|
||
|
}
|
||
|
|