mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
KVM: VMX: Call vCPU-run asm sub-routine from C and remove clobbering
...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>
This commit is contained in:
committed by
Paolo Bonzini
parent
3b895ef486
commit
fc2ba5a27a
@@ -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)
|
static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct vcpu_vmx *vmx = to_vmx(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())
|
if (vcpu->arch.cr2 != read_cr2())
|
||||||
write_cr2(vcpu->arch.cr2);
|
write_cr2(vcpu->arch.cr2);
|
||||||
|
|
||||||
asm(
|
vmx->fail = __vmx_vcpu_run(vmx, (unsigned long *)&vcpu->arch.regs,
|
||||||
"call __vmx_vcpu_run \n\t"
|
vmx->loaded_vmcs->launched);
|
||||||
: 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
|
|
||||||
);
|
|
||||||
|
|
||||||
vcpu->arch.cr2 = read_cr2();
|
vcpu->arch.cr2 = read_cr2();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user