mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
58 lines
1.1 KiB
ArmAsm
58 lines
1.1 KiB
ArmAsm
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
#include <linux/linkage.h>
|
||
|
#include <asm/asm.h>
|
||
|
|
||
|
.text
|
||
|
|
||
|
/**
|
||
|
* vmx_vmenter - VM-Enter the current loaded VMCS
|
||
|
*
|
||
|
* %RFLAGS.ZF: !VMCS.LAUNCHED, i.e. controls VMLAUNCH vs. VMRESUME
|
||
|
*
|
||
|
* Returns:
|
||
|
* %RFLAGS.CF is set on VM-Fail Invalid
|
||
|
* %RFLAGS.ZF is set on VM-Fail Valid
|
||
|
* %RFLAGS.{CF,ZF} are cleared on VM-Success, i.e. VM-Exit
|
||
|
*
|
||
|
* Note that VMRESUME/VMLAUNCH fall-through and return directly if
|
||
|
* they VM-Fail, whereas a successful VM-Enter + VM-Exit will jump
|
||
|
* to vmx_vmexit.
|
||
|
*/
|
||
|
ENTRY(vmx_vmenter)
|
||
|
/* EFLAGS.ZF is set if VMCS.LAUNCHED == 0 */
|
||
|
je 2f
|
||
|
|
||
|
1: vmresume
|
||
|
ret
|
||
|
|
||
|
2: vmlaunch
|
||
|
ret
|
||
|
|
||
|
3: cmpb $0, kvm_rebooting
|
||
|
jne 4f
|
||
|
call kvm_spurious_fault
|
||
|
4: ret
|
||
|
|
||
|
.pushsection .fixup, "ax"
|
||
|
5: jmp 3b
|
||
|
.popsection
|
||
|
|
||
|
_ASM_EXTABLE(1b, 5b)
|
||
|
_ASM_EXTABLE(2b, 5b)
|
||
|
|
||
|
ENDPROC(vmx_vmenter)
|
||
|
|
||
|
/**
|
||
|
* vmx_vmexit - Handle a VMX VM-Exit
|
||
|
*
|
||
|
* Returns:
|
||
|
* %RFLAGS.{CF,ZF} are cleared on VM-Success, i.e. VM-Exit
|
||
|
*
|
||
|
* This is vmx_vmenter's partner in crime. On a VM-Exit, control will jump
|
||
|
* here after hardware loads the host's state, i.e. this is the destination
|
||
|
* referred to by VMCS.HOST_RIP.
|
||
|
*/
|
||
|
ENTRY(vmx_vmexit)
|
||
|
ret
|
||
|
ENDPROC(vmx_vmexit)
|