Commit afb99ffb authored by Sean Christopherson's avatar Sean Christopherson
Browse files

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: default avatarBrendan Jackman <jackmanb@google.com>
Reviewed-by: default avatarPawan Gupta <pawan.kumar.gupta@linux.intel.com>
Link: https://patch.msgid.link/20251113233746.1703361-4-seanjc@google.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent aba7de60
Loading
Loading
Loading
Loading
+16 −11
Original line number Diff line number Diff line
@@ -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).
 * 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
#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