mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/spec-ctrl: Improve all SPEC_CTRL_{ENTER,EXIT}_* comments
... to better explain how they're used. Doing so highlights that SPEC_CTRL_EXIT_TO_XEN is missing a VERW flush for the corner case when e.g. an NMI hits late in an exit-to-guest path. Leave a TODO, which will be addressed in subsequent patches which arrange for VERW flushing to be safe within SPEC_CTRL_EXIT_TO_XEN. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
7125429aaf
commit
45f0055735
1 file changed
+31
-5
@@ -218,7 +218,10 @@
|
||||
wrmsr
|
||||
.endm
|
||||
|
||||
/* Use after an entry from PV context (syscall/sysenter/int80/int82/etc). */
|
||||
/*
|
||||
* Used after an entry from PV context: SYSCALL, SYSENTER, INT,
|
||||
* etc. There is always a guest speculation state in context.
|
||||
*/
|
||||
.macro SPEC_CTRL_ENTRY_FROM_PV
|
||||
/*
|
||||
* Requires %rsp=regs/cpuinfo, %rdx=0
|
||||
@@ -233,7 +236,11 @@
|
||||
X86_FEATURE_SC_MSR_PV
|
||||
.endm
|
||||
|
||||
/* Use in interrupt/exception context. May interrupt Xen or PV context. */
|
||||
/*
|
||||
* Used after an exception or maskable interrupt, hitting Xen or PV context.
|
||||
* There will either be a guest speculation context, or (barring fatal
|
||||
* exceptions) a well-formed Xen speculation context.
|
||||
*/
|
||||
.macro SPEC_CTRL_ENTRY_FROM_INTR
|
||||
/*
|
||||
* Requires %rsp=regs, %r14=stack_end, %rdx=0
|
||||
@@ -248,7 +255,10 @@
|
||||
X86_FEATURE_SC_MSR_PV
|
||||
.endm
|
||||
|
||||
/* Use when exiting to PV guest context. */
|
||||
/*
|
||||
* Used when exiting from any entry context, back to PV context. This
|
||||
* includes from an IST entry which moved onto the primary stack.
|
||||
*/
|
||||
.macro SPEC_CTRL_EXIT_TO_PV
|
||||
/*
|
||||
* Requires %rax=spec_ctrl, %rsp=regs/info
|
||||
@@ -260,7 +270,13 @@
|
||||
.endm
|
||||
|
||||
/*
|
||||
* Use in IST interrupt/exception context. May interrupt Xen or PV context.
|
||||
* Used after an IST entry hitting Xen or PV context. Special care is needed,
|
||||
* because when hitting Xen context, there may not be a well-formed
|
||||
* speculation context. (i.e. it can hit in the middle of
|
||||
* SPEC_CTRL_{ENTRY,EXIT}_* regions.)
|
||||
*
|
||||
* An IST entry which hits PV context moves onto the primary stack and leaves
|
||||
* via SPEC_CTRL_EXIT_TO_PV, *not* SPEC_CTRL_EXIT_TO_XEN.
|
||||
*/
|
||||
.macro SPEC_CTRL_ENTRY_FROM_INTR_IST
|
||||
/*
|
||||
@@ -319,7 +335,14 @@ UNLIKELY_DISPATCH_LABEL(\@_serialise):
|
||||
UNLIKELY_END(\@_serialise)
|
||||
.endm
|
||||
|
||||
/* Use when exiting to Xen context. */
|
||||
/*
|
||||
* Use when exiting from any entry context, back to Xen context. This
|
||||
* includes returning to other SPEC_CTRL_{ENTRY,EXIT}_* regions with an
|
||||
* incomplete speculation context.
|
||||
*
|
||||
* Because we might have interrupted Xen beyond SPEC_CTRL_EXIT_TO_$GUEST, we
|
||||
* need to treat this as if it were an EXIT_TO_$GUEST case too.
|
||||
*/
|
||||
.macro SPEC_CTRL_EXIT_TO_XEN
|
||||
/*
|
||||
* Requires %rbx=stack_end
|
||||
@@ -344,6 +367,9 @@ UNLIKELY_DISPATCH_LABEL(\@_serialise):
|
||||
wrmsr
|
||||
|
||||
.L\@_skip_sc_msr:
|
||||
|
||||
/* TODO VERW */
|
||||
|
||||
.endm
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||