Commit 77df5495 authored by Sean Christopherson's avatar Sean Christopherson Committed by Paolo Bonzini
Browse files

KVM: VMX: Pass @launched to the vCPU-run asm via standard ABI regs



...to prepare for making the sub-routine callable from C code.

Signed-off-by: default avatarSean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent a62fd5a7
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -84,7 +84,7 @@ ENDPROC(vmx_vmexit)
 * __vmx_vcpu_run - Run a vCPU via a transition to VMX guest mode
 * __vmx_vcpu_run - Run a vCPU via a transition to VMX guest mode
 * @vmx:	struct vcpu_vmx *
 * @vmx:	struct vcpu_vmx *
 * @regs:	unsigned long * (to guest registers)
 * @regs:	unsigned long * (to guest registers)
 * %RBX:	VMCS launched status (non-zero indicates already launched)
 * @launched:	%true if the VMCS has been launched
 *
 *
 * Returns:
 * Returns:
 *	%RBX is 0 on VM-Exit, 1 on VM-Fail
 *	%RBX is 0 on VM-Exit, 1 on VM-Fail
@@ -99,6 +99,9 @@ ENTRY(__vmx_vcpu_run)
	 */
	 */
	push %_ASM_ARG2
	push %_ASM_ARG2


	/* Copy @launched to BL, _ASM_ARG3 is volatile. */
	mov %_ASM_ARG3B, %bl

	/* Adjust RSP to account for the CALL to vmx_vmenter(). */
	/* Adjust RSP to account for the CALL to vmx_vmenter(). */
	lea -WORD_SIZE(%_ASM_SP), %_ASM_ARG2
	lea -WORD_SIZE(%_ASM_SP), %_ASM_ARG2
	call vmx_update_host_rsp
	call vmx_update_host_rsp
+6 −7
Original line number Original line Diff line number Diff line
@@ -6448,19 +6448,18 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
		"call __vmx_vcpu_run \n\t"
		"call __vmx_vcpu_run \n\t"
	      : ASM_CALL_CONSTRAINT, "=b"(vmx->fail),
	      : ASM_CALL_CONSTRAINT, "=b"(vmx->fail),
#ifdef CONFIG_X86_64
#ifdef CONFIG_X86_64
		"=D"((int){0}), "=S"((int){0})
		"=D"((int){0}), "=S"((int){0}), "=d"((int){0})
	      : "D"(vmx), "S"(&vcpu->arch.regs),
	      : "D"(vmx), "S"(&vcpu->arch.regs), "d"(vmx->loaded_vmcs->launched)
#else
#else
		"=a"((int){0}), "=d"((int){0})
		"=a"((int){0}), "=d"((int){0}), "=c"((int){0})
	      : "a"(vmx), "d"(&vcpu->arch.regs),
	      : "a"(vmx), "d"(&vcpu->arch.regs), "c"(vmx->loaded_vmcs->launched)
#endif
#endif
		"b"(vmx->loaded_vmcs->launched)
	      : "cc", "memory"
	      : "cc", "memory"
#ifdef CONFIG_X86_64
#ifdef CONFIG_X86_64
		, "rax", "rcx", "rdx"
		, "rax", "rcx"
		, "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
		, "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
#else
#else
		, "ecx", "edi", "esi"
		, "edi", "esi"
#endif
#endif
	      );
	      );