KVM: SVM: adjust register allocation for __svm_vcpu_run()
32-bit ABI uses RAX/RCX/RDX as its argument registers, so they are in
the way of instructions that hardcode their operands such as RDMSR/WRMSR
or VMLOAD/VMRUN/VMSAVE.
In preparation for moving vmload/vmsave to __svm_vcpu_run(), keep
the pointer to the struct vcpu_svm in %rdi. In particular, it is now
possible to load svm->vmcb01.pa in %rax without clobbering the struct
vcpu_svm pointer.
No functional change intended.
Cc: stable@vger.kernel.org
Fixes: a149180fbc
("x86: Add magic AMD return-thunk")
Reviewed-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
16fdc1de16
commit
f7ef280132
@ -54,30 +54,30 @@ SYM_FUNC_START(__svm_vcpu_run)
|
||||
/* Save @vmcb. */
|
||||
push %_ASM_ARG1
|
||||
|
||||
/* Move @svm to RAX. */
|
||||
mov %_ASM_ARG2, %_ASM_AX
|
||||
|
||||
/* Load guest registers. */
|
||||
mov VCPU_RCX(%_ASM_AX), %_ASM_CX
|
||||
mov VCPU_RDX(%_ASM_AX), %_ASM_DX
|
||||
mov VCPU_RBX(%_ASM_AX), %_ASM_BX
|
||||
mov VCPU_RBP(%_ASM_AX), %_ASM_BP
|
||||
mov VCPU_RSI(%_ASM_AX), %_ASM_SI
|
||||
mov VCPU_RDI(%_ASM_AX), %_ASM_DI
|
||||
#ifdef CONFIG_X86_64
|
||||
mov VCPU_R8 (%_ASM_AX), %r8
|
||||
mov VCPU_R9 (%_ASM_AX), %r9
|
||||
mov VCPU_R10(%_ASM_AX), %r10
|
||||
mov VCPU_R11(%_ASM_AX), %r11
|
||||
mov VCPU_R12(%_ASM_AX), %r12
|
||||
mov VCPU_R13(%_ASM_AX), %r13
|
||||
mov VCPU_R14(%_ASM_AX), %r14
|
||||
mov VCPU_R15(%_ASM_AX), %r15
|
||||
#endif
|
||||
/* Move @svm to RDI. */
|
||||
mov %_ASM_ARG2, %_ASM_DI
|
||||
|
||||
/* "POP" @vmcb to RAX. */
|
||||
pop %_ASM_AX
|
||||
|
||||
/* Load guest registers. */
|
||||
mov VCPU_RCX(%_ASM_DI), %_ASM_CX
|
||||
mov VCPU_RDX(%_ASM_DI), %_ASM_DX
|
||||
mov VCPU_RBX(%_ASM_DI), %_ASM_BX
|
||||
mov VCPU_RBP(%_ASM_DI), %_ASM_BP
|
||||
mov VCPU_RSI(%_ASM_DI), %_ASM_SI
|
||||
#ifdef CONFIG_X86_64
|
||||
mov VCPU_R8 (%_ASM_DI), %r8
|
||||
mov VCPU_R9 (%_ASM_DI), %r9
|
||||
mov VCPU_R10(%_ASM_DI), %r10
|
||||
mov VCPU_R11(%_ASM_DI), %r11
|
||||
mov VCPU_R12(%_ASM_DI), %r12
|
||||
mov VCPU_R13(%_ASM_DI), %r13
|
||||
mov VCPU_R14(%_ASM_DI), %r14
|
||||
mov VCPU_R15(%_ASM_DI), %r15
|
||||
#endif
|
||||
mov VCPU_RDI(%_ASM_DI), %_ASM_DI
|
||||
|
||||
/* Enter guest mode */
|
||||
sti
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user