KVM: VMX: Preserve callee-save registers in vCPU-run asm sub-routine
...to make it callable from C code. Note that because KVM chooses to be ultra paranoid about guest register values, all callee-save registers are still cleared after VM-Exit even though the host's values are now reloaded from the stack. Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e75c3c3a04
commit
3b895ef486
|
@ -92,6 +92,16 @@ ENDPROC(vmx_vmexit)
|
||||||
ENTRY(__vmx_vcpu_run)
|
ENTRY(__vmx_vcpu_run)
|
||||||
push %_ASM_BP
|
push %_ASM_BP
|
||||||
mov %_ASM_SP, %_ASM_BP
|
mov %_ASM_SP, %_ASM_BP
|
||||||
|
#ifdef CONFIG_X86_64
|
||||||
|
push %r15
|
||||||
|
push %r14
|
||||||
|
push %r13
|
||||||
|
push %r12
|
||||||
|
#else
|
||||||
|
push %edi
|
||||||
|
push %esi
|
||||||
|
#endif
|
||||||
|
push %_ASM_BX
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Save @regs, _ASM_ARG2 may be modified by vmx_update_host_rsp() and
|
* Save @regs, _ASM_ARG2 may be modified by vmx_update_host_rsp() and
|
||||||
|
@ -195,6 +205,17 @@ ENTRY(__vmx_vcpu_run)
|
||||||
|
|
||||||
/* "POP" @regs. */
|
/* "POP" @regs. */
|
||||||
add $WORD_SIZE, %_ASM_SP
|
add $WORD_SIZE, %_ASM_SP
|
||||||
|
pop %_ASM_BX
|
||||||
|
|
||||||
|
#ifdef CONFIG_X86_64
|
||||||
|
pop %r12
|
||||||
|
pop %r13
|
||||||
|
pop %r14
|
||||||
|
pop %r15
|
||||||
|
#else
|
||||||
|
pop %esi
|
||||||
|
pop %edi
|
||||||
|
#endif
|
||||||
pop %_ASM_BP
|
pop %_ASM_BP
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
|
@ -6456,10 +6456,7 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu)
|
||||||
#endif
|
#endif
|
||||||
: "cc", "memory"
|
: "cc", "memory"
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
, "rbx", "rcx"
|
, "rcx", "r8", "r9", "r10", "r11"
|
||||||
, "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
|
|
||||||
#else
|
|
||||||
, "ebx", "edi", "esi"
|
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue