KVM: VMX: Use named operands in inline asm

Convert the non-asm-goto version of the inline asm in __vmcs_readl() to
use named operands, similar to its asm-goto version.

Do this in preparation of changing the ASM_CALL_CONSTRAINT primitive.

Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Sean Christopherson <seanjc@google.com>
Cc: linux-kernel@vger.kernel.org
This commit is contained in:
Josh Poimboeuf 2025-03-02 17:20:59 -08:00 committed by Ingo Molnar
parent 0c53ba0984
commit e1c49eaee5

View File

@ -118,7 +118,7 @@ static __always_inline unsigned long __vmcs_readl(unsigned long field)
#else /* !CONFIG_CC_HAS_ASM_GOTO_OUTPUT */
asm volatile("1: vmread %2, %1\n\t"
asm volatile("1: vmread %[field], %[output]\n\t"
".byte 0x3e\n\t" /* branch taken hint */
"ja 3f\n\t"
@ -127,24 +127,26 @@ static __always_inline unsigned long __vmcs_readl(unsigned long field)
* @field, and bounce through the trampoline to preserve
* volatile registers.
*/
"xorl %k1, %k1\n\t"
"xorl %k[output], %k[output]\n\t"
"2:\n\t"
"push %1\n\t"
"push %2\n\t"
"push %[output]\n\t"
"push %[field]\n\t"
"call vmread_error_trampoline\n\t"
/*
* Unwind the stack. Note, the trampoline zeros out the
* memory for @fault so that the result is '0' on error.
*/
"pop %2\n\t"
"pop %1\n\t"
"pop %[field]\n\t"
"pop %[output]\n\t"
"3:\n\t"
/* VMREAD faulted. As above, except push '1' for @fault. */
_ASM_EXTABLE_TYPE_REG(1b, 2b, EX_TYPE_ONE_REG, %1)
_ASM_EXTABLE_TYPE_REG(1b, 2b, EX_TYPE_ONE_REG, %[output])
: ASM_CALL_CONSTRAINT, "=&r"(value) : "r"(field) : "cc");
: ASM_CALL_CONSTRAINT, [output] "=&r" (value)
: [field] "r" (field)
: "cc");
return value;
#endif /* CONFIG_CC_HAS_ASM_GOTO_OUTPUT */