KVM: VMX: Call vCPU-run asm sub-routine from C and remove clobbering
authorSean Christopherson <sean.j.christopherson@intel.com>
Fri, 25 Jan 2019 15:41:19 +0000 (07:41 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 20 Feb 2019 21:48:18 +0000 (22:48 +0100)
...now that the sub-routine follows standard calling conventions.

Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx/vmx.c

index 43723d0007be4f918e0bd0a7dd5bbabdd1f34c64..c39f1c38b878b6e3387010319b1df22c5d7ee606 100644 (file)
@@ -6371,6 +6371,8 @@ void vmx_update_host_rsp(struct vcpu_vmx *vmx, unsigned long host_rsp)
        }
 }
 
+bool __vmx_vcpu_run(struct vcpu_vmx *vmx, unsigned long *regs, bool launched);
+
 static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
 {
        struct vcpu_vmx *vmx = to_vmx(vcpu);
@@ -6444,21 +6446,8 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
        if (vcpu->arch.cr2 != read_cr2())
                write_cr2(vcpu->arch.cr2);
 
-       asm(
-               "call __vmx_vcpu_run \n\t"
-             : ASM_CALL_CONSTRAINT, "=a"(vmx->fail),
-#ifdef CONFIG_X86_64
-               "=D"((int){0}), "=S"((int){0}), "=d"((int){0})
-             : "D"(vmx), "S"(&vcpu->arch.regs), "d"(vmx->loaded_vmcs->launched)
-#else
-               "=d"((int){0}), "=c"((int){0})
-             : "a"(vmx), "d"(&vcpu->arch.regs), "c"(vmx->loaded_vmcs->launched)
-#endif
-             : "cc", "memory"
-#ifdef CONFIG_X86_64
-               , "rcx", "r8", "r9", "r10", "r11"
-#endif
-             );
+       vmx->fail = __vmx_vcpu_run(vmx, (unsigned long *)&vcpu->arch.regs,
+                                  vmx->loaded_vmcs->launched);
 
        vcpu->arch.cr2 = read_cr2();