mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
x86/bugs: Decouple ALTERNATIVE usage from VERW macro definition
Decouple the use of ALTERNATIVE from the encoding of VERW to clear CPU buffers so that KVM can use ALTERNATIVE_2 to handle "always clear buffers" and "clear if guest can access host MMIO" in a single statement. No functional change intended. Reviewed-by: Brendan Jackman <jackmanb@google.com> Reviewed-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com> Link: https://patch.msgid.link/20251113233746.1703361-4-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
@@ -308,24 +308,29 @@
|
||||
* CFLAGS.ZF.
|
||||
* Note: Only the memory operand variant of VERW clears the CPU buffers.
|
||||
*/
|
||||
.macro __CLEAR_CPU_BUFFERS feature
|
||||
#ifdef CONFIG_X86_64
|
||||
ALTERNATIVE "", "verw x86_verw_sel(%rip)", \feature
|
||||
#define VERW verw x86_verw_sel(%rip)
|
||||
#else
|
||||
/*
|
||||
* In 32bit mode, the memory operand must be a %cs reference. The data
|
||||
* segments may not be usable (vm86 mode), and the stack segment may not
|
||||
* be flat (ESPFIX32).
|
||||
*/
|
||||
ALTERNATIVE "", "verw %cs:x86_verw_sel", \feature
|
||||
/*
|
||||
* In 32bit mode, the memory operand must be a %cs reference. The data segments
|
||||
* may not be usable (vm86 mode), and the stack segment may not be flat (ESPFIX32).
|
||||
*/
|
||||
#define VERW verw %cs:x86_verw_sel
|
||||
#endif
|
||||
.endm
|
||||
|
||||
/*
|
||||
* Provide a stringified VERW macro for simple usage, and a non-stringified
|
||||
* VERW macro for use in more elaborate sequences, e.g. to encode a conditional
|
||||
* VERW within an ALTERNATIVE.
|
||||
*/
|
||||
#define __CLEAR_CPU_BUFFERS __stringify(VERW)
|
||||
|
||||
/* If necessary, emit VERW on exit-to-userspace to clear CPU buffers. */
|
||||
#define CLEAR_CPU_BUFFERS \
|
||||
__CLEAR_CPU_BUFFERS X86_FEATURE_CLEAR_CPU_BUF
|
||||
ALTERNATIVE "", __CLEAR_CPU_BUFFERS, X86_FEATURE_CLEAR_CPU_BUF
|
||||
|
||||
#define VM_CLEAR_CPU_BUFFERS \
|
||||
__CLEAR_CPU_BUFFERS X86_FEATURE_CLEAR_CPU_BUF_VM
|
||||
ALTERNATIVE "", __CLEAR_CPU_BUFFERS, X86_FEATURE_CLEAR_CPU_BUF_VM
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
.macro CLEAR_BRANCH_HISTORY
|
||||
|
||||
Reference in New Issue
Block a user