File xsa456-0l.patch of Package xen.33138
# Commit 2378d16a931de0e62c03669169989e9437306abe
# Date 2024-04-09 16:37:30 +0100
# Author Andrew Cooper <andrew.cooper3@citrix.com>
# Committer Andrew Cooper <andrew.cooper3@citrix.com>
x86/spec-ctrl: Simplify DO_COND_IBPB
With the prior refactoring, SPEC_CTRL_ENTRY_{PV,INTR} both load SCF into %ebx,
and handle the conditional safety including skipping if interrupting Xen.
Therefore, we can drop the maybexen parameter and the conditional safety.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
--- a/xen/include/asm-x86/spec_ctrl_asm.h
+++ b/xen/include/asm-x86/spec_ctrl_asm.h
@@ -79,33 +79,21 @@
* - SPEC_CTRL_EXIT_TO_{SVM,VMX}
*/
-.macro DO_SPEC_CTRL_COND_IBPB maybexen:req
+.macro DO_COND_IBPB
/*
- * Requires %rsp=regs (also cpuinfo if !maybexen)
- * Requires %r14=stack_end (if maybexen), %rdx=0
- * Clobbers %rax, %rcx, %rdx
+ * Requires %rbx=SCF, %rdx=0
+ * Clobbers %rax, %rcx
*
- * Conditionally issue IBPB if SCF_entry_ibpb is active. In the maybexen
- * case, we can safely look at UREGS_cs to skip taking the hit when
- * interrupting Xen.
+ * Conditionally issue IBPB if SCF_entry_ibpb is active.
*/
- .if \maybexen
- testb $SCF_entry_ibpb, STACK_CPUINFO_FIELD(scf)(%r14)
- jz .L\@_skip
- testb $3, UREGS_cs(%rsp)
- .else
- testb $SCF_entry_ibpb, CPUINFO_scf(%rsp)
- .endif
+ testb $SCF_entry_ibpb, %bl
jz .L\@_skip
mov $MSR_PRED_CMD, %ecx
mov $PRED_CMD_IBPB, %eax
wrmsr
- jmp .L\@_done
.L\@_skip:
- lfence
-.L\@_done:
.endm
.macro DO_OVERWRITE_RSB tmp=rax
@@ -275,8 +263,7 @@
*/
movzbl STACK_CPUINFO_FIELD(scf)(%r14), %ebx
- ALTERNATIVE "", __stringify(DO_SPEC_CTRL_COND_IBPB maybexen=0), \
- X86_FEATURE_IBPB_ENTRY_PV
+ ALTERNATIVE "", DO_COND_IBPB, X86_FEATURE_IBPB_ENTRY_PV
ALTERNATIVE "", DO_OVERWRITE_RSB, X86_FEATURE_SC_RSB_PV
@@ -305,8 +292,7 @@
testb $3, UREGS_cs(%rsp)
jz .L\@_skip
- ALTERNATIVE "", __stringify(DO_SPEC_CTRL_COND_IBPB maybexen=1), \
- X86_FEATURE_IBPB_ENTRY_PV
+ ALTERNATIVE "", DO_COND_IBPB, X86_FEATURE_IBPB_ENTRY_PV
ALTERNATIVE "", DO_OVERWRITE_RSB, X86_FEATURE_SC_RSB_PV
@@ -346,7 +332,7 @@
* Clobbers %rax, %rbx, %rcx, %rdx
*
* This is logical merge of:
- * DO_SPEC_CTRL_COND_IBPB maybexen=0
+ * DO_COND_IBPB
* DO_OVERWRITE_RSB
* DO_SPEC_CTRL_ENTRY maybexen=1
* but with conditionals rather than alternatives.