static void vmfail(struct cpu_user_regs *regs, enum vmx_insn_errno errno)
{
+ if ( errno == VMX_INSN_SUCCEED )
+ return;
+
if ( vcpu_nestedhvm(current).nv_vvmcxaddr != INVALID_PADDR &&
errno != VMX_INSN_FAIL_INVALID )
vmfail_valid(regs, errno);
/* VM Instruction error numbers */
enum vmx_insn_errno
{
+ VMX_INSN_SUCCEED = 0,
VMX_INSN_VMCLEAR_INVALID_PHYADDR = 2,
VMX_INSN_VMLAUNCH_NONCLEAR_VMCS = 4,
VMX_INSN_VMRESUME_NONLAUNCHED_VMCS = 5,
static inline enum vmx_insn_errno vmread_safe(unsigned long field,
unsigned long *value)
{
- unsigned long ret = 0;
+ unsigned long ret = VMX_INSN_SUCCEED;
bool fail_invalid, fail_valid;
asm volatile ( GAS_VMX_OP("vmread %[field], %[value]\n\t",
static inline enum vmx_insn_errno vmwrite_safe(unsigned long field,
unsigned long value)
{
- unsigned long ret = 0;
+ unsigned long ret = VMX_INSN_SUCCEED;
bool fail_invalid, fail_valid;
asm volatile ( GAS_VMX_OP("vmwrite %[value], %[field]\n\t",