Commit 3b895ef4 authored by Sean Christopherson's avatar Sean Christopherson Committed by Paolo Bonzini

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: default avatarSean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent e75c3c3a
...@@ -92,6 +92,16 @@ ENDPROC(vmx_vmexit) ...@@ -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) ...@@ -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) ...@@ -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
); );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment