VirtualBox

Changeset 74532 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Sep 29, 2018 2:37:16 AM (6 years ago)
Author:
vboxsync
Message:

VMM/IEM: Nested VMX: bugref:9180 VM-exit intercept for CPUID.

Location:
trunk/src/VBox/VMM/VMMAll
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r74520 r74532  
    389389 * Check if the guest has entered VMX root operation.
    390390 */
    391 #define IEM_VMX_IS_ROOT_MODE(a_pVCpu)                        (CPUMIsGuestInVmxRootMode(IEM_GET_CTX(a_pVCpu)))
     391# define IEM_VMX_IS_ROOT_MODE(a_pVCpu)                              (CPUMIsGuestInVmxRootMode(IEM_GET_CTX(a_pVCpu)))
    392392
    393393/**
    394394 * Check if the guest has entered VMX non-root operation.
    395395 */
    396 #define IEM_VMX_IS_NON_ROOT_MODE(a_pVCpu)                    (CPUMIsGuestInVmxNonRootMode(IEM_GET_CTX(a_pVCpu)))
     396# define IEM_VMX_IS_NON_ROOT_MODE(a_pVCpu)                          (CPUMIsGuestInVmxNonRootMode(IEM_GET_CTX(a_pVCpu)))
     397
     398/**
     399 * Invokes the VMX VM-exit handler for an instruction intercept.
     400 */
     401# define IEM_VMX_VMEXIT_INSTR_RET(a_pVCpu, a_uExitReason, a_cbInstr) \
     402    do { return iemVmxVmexitInstr((a_pVCpu), (a_uExitReason), (a_cbInstr)); } while (0)
    397403
    398404#else
    399 # define IEM_VMX_IS_ROOT_MODE(a_pVCpu)                       (false)
    400 # define IEM_VMX_IS_NON_ROOT_MODE(a_pVCpu)                   (false)
    401 
     405# define IEM_VMX_IS_ROOT_MODE(a_pVCpu)                              (false)
     406# define IEM_VMX_IS_NON_ROOT_MODE(a_pVCpu)                          (false)
     407# define IEM_VMX_VMEXIT_INSTR_RET(a_pVCpu, a_Reason, a_cbInstr)     do { return VERR_VMX_IPE_1; } while (0)
    402408#endif
    403409
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp.h

    r74522 r74532  
    68506850    }
    68516851
     6852    if (IEM_VMX_IS_NON_ROOT_MODE(pVCpu))
     6853    {
     6854        Log2(("cpuid: Guest intercept -> VM-exit\n"));
     6855        IEM_VMX_VMEXIT_INSTR_RET(pVCpu, VMX_EXIT_CPUID, cbInstr);
     6856    }
     6857
    68526858    CPUMGetGuestCpuId(pVCpu, pVCpu->cpum.GstCtx.eax, pVCpu->cpum.GstCtx.ecx,
    68536859                      &pVCpu->cpum.GstCtx.eax, &pVCpu->cpum.GstCtx.ebx, &pVCpu->cpum.GstCtx.ecx, &pVCpu->cpum.GstCtx.edx);
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h

    r74523 r74532  
    2929 *  VMX_EXIT_NMI_WINDOW
    3030 *  VMX_EXIT_TASK_SWITCH
    31  *  VMX_EXIT_CPUID
    3231 *  VMX_EXIT_GETSEC
    3332 *  VMX_EXIT_HLT
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette