VirtualBox

Changeset 93963 in vbox


Ignore:
Timestamp:
Feb 28, 2022 8:39:08 AM (3 years ago)
Author:
vboxsync
Message:

VMM: Nested VMX: bugref:10092 Add HM ring-0 API for querying transient VMX/SVM info.

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/hm.h

    r93725 r93963  
    208208 * @{
    209209 */
     210
     211/** @name HMVMX_READ_XXX - Flags for reading auxiliary VM-exit VMCS fields.
     212 *
     213 * These flags allow reading VMCS fields that are not necessarily part of the
     214 * guest-CPU state but are needed while handling VM-exits.
     215 *
     216 * @note If you add any fields here, make sure to update VMXR0GetExitAuxInfo.
     217 *
     218 * @{
     219 */
     220#define HMVMX_READ_IDT_VECTORING_INFO               RT_BIT_32(0)
     221#define HMVMX_READ_IDT_VECTORING_ERROR_CODE         RT_BIT_32(1)
     222#define HMVMX_READ_EXIT_QUALIFICATION               RT_BIT_32(2)
     223#define HMVMX_READ_EXIT_INSTR_LEN                   RT_BIT_32(3)
     224#define HMVMX_READ_EXIT_INTERRUPTION_INFO           RT_BIT_32(4)
     225#define HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE     RT_BIT_32(5)
     226#define HMVMX_READ_EXIT_INSTR_INFO                  RT_BIT_32(6)
     227#define HMVMX_READ_GUEST_LINEAR_ADDR                RT_BIT_32(7)
     228#define HMVMX_READ_GUEST_PHYSICAL_ADDR              RT_BIT_32(8)
     229#define HMVMX_READ_GUEST_PENDING_DBG_XCPTS          RT_BIT_32(9)
     230
     231/** All the VMCS fields required for processing of exception/NMI VM-exits. */
     232#define HMVMX_READ_XCPT_INFO                        (  HMVMX_READ_EXIT_INTERRUPTION_INFO        \
     233                                                     | HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE  \
     234                                                     | HMVMX_READ_EXIT_INSTR_LEN                \
     235                                                     | HMVMX_READ_IDT_VECTORING_INFO            \
     236                                                     | HMVMX_READ_IDT_VECTORING_ERROR_CODE)
     237
     238/** Mask of all valid HMVMX_READ_XXX flags. */
     239#define HMVMX_READ_VALID_MASK                       (  HMVMX_READ_IDT_VECTORING_INFO           \
     240                                                     | HMVMX_READ_IDT_VECTORING_ERROR_CODE     \
     241                                                     | HMVMX_READ_EXIT_QUALIFICATION           \
     242                                                     | HMVMX_READ_EXIT_INSTR_LEN               \
     243                                                     | HMVMX_READ_EXIT_INTERRUPTION_INFO       \
     244                                                     | HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE \
     245                                                     | HMVMX_READ_EXIT_INSTR_INFO              \
     246                                                     | HMVMX_READ_GUEST_LINEAR_ADDR            \
     247                                                     | HMVMX_READ_GUEST_PHYSICAL_ADDR          \
     248                                                     | HMVMX_READ_GUEST_PENDING_DBG_XCPTS)
     249/** @} */
     250
     251/**
     252 * HM VM-exit auxiliary info.
     253 */
     254typedef union
     255{
     256    /** VMX VM-exit auxiliary info. */
     257    VMXEXITAUX     Vmx;
     258    /** SVM \#VMEXIT auxiliary info. */
     259    SVMEXITAUX     Svm;
     260} HMEXITAUX;
     261/** Pointer to HM-exit auxiliary info union. */
     262typedef HMEXITAUX *PHMEXITAUX;
     263/** Pointer to a const HM-exit auxiliary info union. */
     264typedef const HMEXITAUX *PCHMEXITAUX;
     265
    210266VMMR0_INT_DECL(int)             HMR0Init(void);
    211267VMMR0_INT_DECL(int)             HMR0Term(void);
     
    228284VMMR0_INT_DECL(int)             HMR0InvalidatePage(PVMCPUCC pVCpu, RTGCPTR GCVirt);
    229285VMMR0_INT_DECL(int)             HMR0ImportStateOnDemand(PVMCPUCC pVCpu, uint64_t fWhat);
    230 
     286VMMR0_INT_DECL(int)             HMR0GetExitAuxInfo(PVMCPUCC pVCpu, PHMEXITAUX pHmExitAux, uint32_t fWhat);
    231287/** @} */
    232288#endif /* IN_RING0 */
  • trunk/include/VBox/vmm/hm_svm.h

    r93115 r93963  
    10621062
    10631063/**
     1064 * SVM VM-exit auxiliary information.
     1065 *
     1066 * This includes information that isn't necessarily stored in the guest-CPU
     1067 * context but provided as part of \#VMEXITs.
     1068 */
     1069typedef struct
     1070{
     1071    uint64_t        u64ExitCode;
     1072    uint64_t        u64ExitInfo1;
     1073    uint64_t        u64ExitInfo2;
     1074    SVMEVENT        ExitIntInfo;
     1075} SVMEXITAUX;
     1076/** Pointer to a SVMEXITAUX struct. */
     1077typedef SVMEXITAUX *PSVMEXITAUX;
     1078/** Pointer to a const SVMEXITAUX struct. */
     1079typedef const SVMEXITAUX *PCSVMEXITAUX;
     1080
     1081/**
    10641082 * Segment attribute conversion between CPU and AMD-V VMCB format.
    10651083 *
  • trunk/include/VBox/vmm/hm_vmx.h

    r93946 r93963  
    36533653                            (BP0, BP1, BP2, BP3, RSVD_4_11, EN_BP, RSVD_13, BS, RSVD_15, RTM, RSVD_17_63));
    36543654/** @} */
     3655
     3656
     3657/**
     3658 * VM-exit auxiliary information.
     3659 *
     3660 * This includes information that isn't necessarily stored in the guest-CPU
     3661 * context but provided as part of VM-exits.
     3662 */
     3663typedef struct
     3664{
     3665    /** The VM-exit reason. */
     3666    uint32_t                uReason;
     3667    /** The Exit qualification field. */
     3668    uint64_t                u64Qual;
     3669    /** The Guest-linear address field. */
     3670    uint64_t                u64GuestLinearAddr;
     3671    /** The Guest-physical address field. */
     3672    uint64_t                u64GuestPhysAddr;
     3673    /** The guest pending-debug exceptions. */
     3674    uint64_t                u64GuestPendingDbgXcpts;
     3675    /** The VM-exit instruction length. */
     3676    uint32_t                cbInstr;
     3677    /** The VM-exit instruction information. */
     3678    VMXEXITINSTRINFO        InstrInfo;
     3679    /** VM-exit interruption information. */
     3680    uint32_t                uExitIntInfo;
     3681    /** VM-exit interruption error code. */
     3682    uint32_t                uExitIntErrCode;
     3683    /** IDT-vectoring information. */
     3684    uint32_t                uIdtVectoringInfo;
     3685    /** IDT-vectoring error code. */
     3686    uint32_t                uIdtVectoringErrCode;
     3687} VMXEXITAUX;
     3688/** Pointer to a VMXEXITAUX struct. */
     3689typedef VMXEXITAUX *PVMXEXITAUX;
     3690/** Pointer to a const VMXEXITAUX struct. */
     3691typedef const VMXEXITAUX *PCVMXEXITAUX;
    36553692
    36563693
  • trunk/src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h

    r93931 r93963  
    3838#define HMVMX_FLUSH_TAGGED_TLB_VPID                 2
    3939#define HMVMX_FLUSH_TAGGED_TLB_NONE                 3
    40 
    41 /**
    42  * Flags to skip redundant reads of some common VMCS fields that are not part of
    43  * the guest-CPU or VCPU state but are needed while handling VM-exits.
    44  */
    45 #define HMVMX_READ_IDT_VECTORING_INFO               RT_BIT_32(0)
    46 #define HMVMX_READ_IDT_VECTORING_ERROR_CODE         RT_BIT_32(1)
    47 #define HMVMX_READ_EXIT_QUALIFICATION               RT_BIT_32(2)
    48 #define HMVMX_READ_EXIT_INSTR_LEN                   RT_BIT_32(3)
    49 #define HMVMX_READ_EXIT_INTERRUPTION_INFO           RT_BIT_32(4)
    50 #define HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE     RT_BIT_32(5)
    51 #define HMVMX_READ_EXIT_INSTR_INFO                  RT_BIT_32(6)
    52 #define HMVMX_READ_GUEST_LINEAR_ADDR                RT_BIT_32(7)
    53 #define HMVMX_READ_GUEST_PHYSICAL_ADDR              RT_BIT_32(8)
    54 #define HMVMX_READ_GUEST_PENDING_DBG_XCPTS          RT_BIT_32(9)
    55 
    56 /** All the VMCS fields required for processing of exception/NMI VM-exits. */
    57 #define HMVMX_READ_XCPT_INFO         (  HMVMX_READ_EXIT_INTERRUPTION_INFO        \
    58                                       | HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE  \
    59                                       | HMVMX_READ_EXIT_INSTR_LEN                \
    60                                       | HMVMX_READ_IDT_VECTORING_INFO            \
    61                                       | HMVMX_READ_IDT_VECTORING_ERROR_CODE)
    6240
    6341/** Assert that all the given fields have been read from the VMCS. */
  • trunk/src/VBox/VMM/VMMR0/HMR0.cpp

    r93655 r93963  
    16331633    return SVMR0ImportStateOnDemand(pVCpu, fWhat);
    16341634}
     1635
     1636
     1637/**
     1638 * Gets HM VM-exit auxiliary information.
     1639 *
     1640 * @returns VBox status code.
     1641 * @param   pVCpu           The cross context CPU structure.
     1642 * @param   pHmExitAux      Where to store the auxiliary info.
     1643 * @param   fWhat           What to get, see HMVMX_READ_XXX. This is ignored/unused
     1644 *                          on AMD-V.
     1645 *
     1646 * @remarks Currently this works only when executing a nested-guest using
     1647 *          hardware-assisted execution as it's where the auxiliary information is
     1648 *          required outside of HM. In the future we can make this available while
     1649 *          executing a regular (non-nested) guest if necessary.
     1650 */
     1651VMMR0_INT_DECL(int) HMR0GetExitAuxInfo(PVMCPUCC pVCpu, PHMEXITAUX pHmExitAux, uint32_t fWhat)
     1652{
     1653    Assert(pHmExitAux);
     1654    Assert(!(fWhat & ~HMVMX_READ_VALID_MASK));
     1655    if (pVCpu->CTX_SUFF(pVM)->hm.s.vmx.fSupported)
     1656        return VMXR0GetExitAuxInfo(pVCpu, &pHmExitAux->Vmx, fWhat);
     1657    return SVMR0GetExitAuxInfo(pVCpu, &pHmExitAux->Svm);
     1658}
     1659
    16351660
    16361661#ifdef VBOX_STRICT
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r93931 r93963  
    287287                                                 | HMSVM_VMCB_CLEAN_AVIC)
    288288/** @} */
    289 
    290 /** @name SVM transient.
    291  *
    292  * A state structure for holding miscellaneous information across AMD-V
    293  * VMRUN/\#VMEXIT operation, restored after the transition.
    294  *
    295  * @{ */
    296 typedef struct SVMTRANSIENT
    297 {
    298     /** The host's rflags/eflags. */
    299     RTCCUINTREG     fEFlags;
    300     /** The \#VMEXIT exit code (the EXITCODE field in the VMCB). */
    301     uint64_t        u64ExitCode;
    302 
    303     /** The guest's TPR value used for TPR shadowing. */
    304     uint8_t         u8GuestTpr;
    305     /** Alignment. */
    306     uint8_t         abAlignment0[7];
    307 
    308     /** Pointer to the currently executing VMCB. */
    309     PSVMVMCB        pVmcb;
    310 
    311     /** Whether we are currently executing a nested-guest. */
    312     bool            fIsNestedGuest;
    313     /** Whether the guest debug state was active at the time of \#VMEXIT. */
    314     bool            fWasGuestDebugStateActive;
    315     /** Whether the hyper debug state was active at the time of \#VMEXIT. */
    316     bool            fWasHyperDebugStateActive;
    317     /** Whether the TSC offset mode needs to be updated. */
    318     bool            fUpdateTscOffsetting;
    319     /** Whether the TSC_AUX MSR needs restoring on \#VMEXIT. */
    320     bool            fRestoreTscAuxMsr;
    321     /** Whether the \#VMEXIT was caused by a page-fault during delivery of a
    322      *  contributary exception or a page-fault. */
    323     bool            fVectoringDoublePF;
    324     /** Whether the \#VMEXIT was caused by a page-fault during delivery of an
    325      *  external interrupt or NMI. */
    326     bool            fVectoringPF;
    327     /** Padding. */
    328     bool            afPadding0;
    329 } SVMTRANSIENT;
    330 /** Pointer to SVM transient state. */
    331 typedef SVMTRANSIENT *PSVMTRANSIENT;
    332 /** Pointer to a const SVM transient state. */
    333 typedef const SVMTRANSIENT *PCSVMTRANSIENT;
    334 
    335 AssertCompileSizeAlignment(SVMTRANSIENT, sizeof(uint64_t));
    336 AssertCompileMemberAlignment(SVMTRANSIENT, u64ExitCode, sizeof(uint64_t));
    337 AssertCompileMemberAlignment(SVMTRANSIENT, pVmcb,       sizeof(uint64_t));
    338 /** @}  */
    339289
    340290/**
     
    29592909
    29602910/**
     2911 * Gets SVM \#VMEXIT auxiliary information.
     2912 *
     2913 * @returns VBox status code.
     2914 * @param   pVCpu           The cross context virtual CPU structure.
     2915 * @param   pSvmExitAux     Where to store the auxiliary info.
     2916 */
     2917VMMR0DECL(int) SVMR0GetExitAuxInfo(PVMCPUCC pVCpu, PSVMEXITAUX pSvmExitAux)
     2918{
     2919    PCSVMTRANSIENT pSvmTransient = pVCpu->hmr0.s.svm.pSvmTransient;
     2920    if (RT_LIKELY(pSvmTransient))
     2921    {
     2922        PCSVMVMCB pVmcb = pSvmTransient->pVmcb;
     2923        if (RT_LIKELY(pVmcb))
     2924        {
     2925            pSvmExitAux->u64ExitCode  = pVmcb->ctrl.u64ExitCode;
     2926            pSvmExitAux->u64ExitInfo1 = pVmcb->ctrl.u64ExitInfo1;
     2927            pSvmExitAux->u64ExitInfo2 = pVmcb->ctrl.u64ExitInfo2;
     2928            pSvmExitAux->ExitIntInfo  = pVmcb->ctrl.ExitIntInfo;
     2929            return VINF_SUCCESS;
     2930        }
     2931        return VERR_SVM_IPE_5;
     2932    }
     2933    return VERR_NOT_AVAILABLE;
     2934}
     2935
     2936
     2937/**
    29612938 * Does the necessary state syncing before returning to ring-3 for any reason
    29622939 * (longjmp, preemption, voluntary exits to ring-3) from AMD-V.
     
    45564533    SvmTransient.fIsNestedGuest = true;
    45574534
     4535    /* Setup pointer so PGM/IEM can query #VMEXIT auxiliary info. on demand in ring-0. */
     4536    pVCpu->hmr0.s.svm.pSvmTransient = &SvmTransient;
     4537
    45584538    VBOXSTRICTRC rc = VERR_INTERNAL_ERROR_4;
    45594539    for (;;)
     
    46264606        /** @todo NSTSVM: handle single-stepping. */
    46274607    }
     4608
     4609    /* Ensure #VMEXIT auxiliary info. is no longer available. */
     4610    pVCpu->hmr0.s.svm.pSvmTransient = NULL;
    46284611
    46294612    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatEntry, x);
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.h

    r93115 r93963  
    5252VMMR0DECL(int)          SVMR0ImportStateOnDemand(PVMCPUCC pVCpu, uint64_t fWhat);
    5353VMMR0DECL(int)          SVMR0InvalidatePage(PVMCPUCC pVCpu, RTGCPTR GCVirt);
     54VMMR0DECL(int)          SVMR0GetExitAuxInfo(PVMCPUCC pVCpu, PSVMEXITAUX pSvmExitAux);
    5455
    5556/**
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r93932 r93963  
    48344834
    48354835/**
     4836 * Gets VMX VM-exit auxiliary information.
     4837 *
     4838 * @returns VBox status code.
     4839 * @param   pVCpu           The cross context virtual CPU structure.
     4840 * @param   pVmxExitAux     Where to store the VM-exit auxiliary info.
     4841 * @param   fWhat           What to fetch, HMVMX_READ_XXX.
     4842 */
     4843VMMR0DECL(int) VMXR0GetExitAuxInfo(PVMCPUCC pVCpu, PVMXEXITAUX pVmxExitAux, uint32_t fWhat)
     4844{
     4845    PVMXTRANSIENT pVmxTransient = pVCpu->hmr0.s.vmx.pVmxTransient;
     4846    if (RT_LIKELY(pVmxTransient))
     4847    {
     4848        AssertCompile(sizeof(fWhat) == sizeof(pVmxTransient->fVmcsFieldsRead));
     4849        fWhat &= ~pVmxTransient->fVmcsFieldsRead;
     4850
     4851        /* The exit reason is always available. */
     4852        pVmxExitAux->uReason = pVmxTransient->uExitReason;
     4853
     4854        if (fWhat & HMVMX_READ_EXIT_QUALIFICATION)
     4855        {
     4856            vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);
     4857            fWhat &= ~HMVMX_READ_EXIT_QUALIFICATION;
     4858            pVmxExitAux->u64Qual = pVmxTransient->uExitQual;
     4859        }
     4860
     4861        if (fWhat & HMVMX_READ_IDT_VECTORING_INFO)
     4862        {
     4863            vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);
     4864            fWhat &= ~HMVMX_READ_IDT_VECTORING_INFO;
     4865            pVmxExitAux->uIdtVectoringInfo = pVmxTransient->uIdtVectoringInfo;
     4866        }
     4867
     4868        if (fWhat & HMVMX_READ_IDT_VECTORING_ERROR_CODE)
     4869        {
     4870            vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);
     4871            fWhat &= ~HMVMX_READ_IDT_VECTORING_ERROR_CODE;
     4872            pVmxExitAux->uIdtVectoringErrCode = pVmxTransient->uIdtVectoringErrorCode;
     4873        }
     4874
     4875        if (fWhat & HMVMX_READ_EXIT_INSTR_LEN)
     4876        {
     4877            vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);
     4878            fWhat &= ~HMVMX_READ_EXIT_INSTR_LEN;
     4879            pVmxExitAux->cbInstr = pVmxTransient->cbExitInstr;
     4880        }
     4881
     4882        if (fWhat & HMVMX_READ_EXIT_INTERRUPTION_INFO)
     4883        {
     4884            vmxHCReadExitIntInfoVmcs(pVCpu, pVmxTransient);
     4885            fWhat &= ~HMVMX_READ_EXIT_INTERRUPTION_INFO;
     4886            pVmxExitAux->uExitIntInfo = pVmxTransient->uExitIntInfo;
     4887        }
     4888
     4889        if (fWhat & HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE)
     4890        {
     4891            vmxHCReadExitIntErrorCodeVmcs(pVCpu, pVmxTransient);
     4892            fWhat &= ~HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE;
     4893            pVmxExitAux->uExitIntErrCode = pVmxTransient->uExitIntErrorCode;
     4894        }
     4895
     4896        if (fWhat & HMVMX_READ_EXIT_INSTR_INFO)
     4897        {
     4898            vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient);
     4899            fWhat &= ~HMVMX_READ_EXIT_INSTR_INFO;
     4900            pVmxExitAux->InstrInfo.u = pVmxTransient->ExitInstrInfo.u;
     4901        }
     4902
     4903        if (fWhat & HMVMX_READ_GUEST_LINEAR_ADDR)
     4904        {
     4905            vmxHCReadGuestLinearAddrVmcs(pVCpu, pVmxTransient);
     4906            fWhat &= ~HMVMX_READ_GUEST_LINEAR_ADDR;
     4907            pVmxExitAux->u64GuestLinearAddr = pVmxTransient->uGuestLinearAddr;
     4908        }
     4909
     4910        if (fWhat & HMVMX_READ_GUEST_PHYSICAL_ADDR)
     4911        {
     4912            vmxHCReadGuestPhysicalAddrVmcs(pVCpu, pVmxTransient);
     4913            fWhat &= ~HMVMX_READ_GUEST_PHYSICAL_ADDR;
     4914            pVmxExitAux->u64GuestPhysAddr = pVmxTransient->uGuestPhysicalAddr;
     4915        }
     4916
     4917        if (fWhat & HMVMX_READ_GUEST_PENDING_DBG_XCPTS)
     4918        {
     4919            vmxHCReadGuestPendingDbgXctps(pVCpu, pVmxTransient);
     4920            fWhat &= ~HMVMX_READ_GUEST_PENDING_DBG_XCPTS;
     4921            pVmxExitAux->u64GuestPendingDbgXcpts = pVmxTransient->uGuestPendingDbgXcpts;
     4922        }
     4923
     4924        AssertMsg(!fWhat, ("fWhat=%#RX32 fVmcsFieldsRead=%#RX32\n", fWhat, pVmxTransient->fVmcsFieldsRead));
     4925        return VINF_SUCCESS;
     4926    }
     4927    return VERR_NOT_AVAILABLE;
     4928}
     4929
     4930
     4931/**
    48364932 * Does the necessary state syncing before returning to ring-3 for any reason
    48374933 * (longjmp, preemption, voluntary exits to ring-3) from VT-x.
     
    67746870    Assert(VmxTransient.pVmcsInfo == &pVCpu->hmr0.s.vmx.VmcsInfoNstGst);
    67756871
     6872    /* Setup pointer so PGM/IEM can query VM-exit auxiliary info. on demand in ring-0. */
     6873    pVCpu->hmr0.s.vmx.pVmxTransient = &VmxTransient;
     6874
    67766875    VBOXSTRICTRC rcStrict = VERR_INTERNAL_ERROR_5;
    67776876    for (;;)
     
    68066905            STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatPreExit, x);
    68076906            hmR0VmxReportWorldSwitchError(pVCpu, rcRun, &VmxTransient);
    6808             return rcRun;
     6907            rcStrict = rcRun;
     6908            break;
    68096909        }
    68106910
     
    68556955        break;
    68566956    }
     6957
     6958    /* Ensure VM-exit auxiliary info. is no longer available. */
     6959    pVCpu->hmr0.s.vmx.pVmxTransient = NULL;
    68576960
    68586961    STAM_PROFILE_ADV_STOP(&pVCpu->hm.s.StatEntry, x);
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.h

    r93115 r93963  
    4545VMMR0DECL(int)          VMXR0InvalidatePage(PVMCPUCC pVCpu, RTGCPTR GCVirt);
    4646VMMR0DECL(int)          VMXR0ImportStateOnDemand(PVMCPUCC pVCpu, uint64_t fWhat);
     47VMMR0DECL(int)          VMXR0GetExitAuxInfo(PVMCPUCC pVCpu, PVMXEXITAUX pVmxExitAux, uint32_t fWhat);
    4748VMMR0DECL(VBOXSTRICTRC) VMXR0RunGuestCode(PVMCPUCC pVCpu);
    4849#endif /* IN_RING0 */
  • trunk/src/VBox/VMM/include/HMInternal.h

    r93574 r93963  
    3838#include <iprt/string.h>
    3939
    40 #include "HMVMXCommon.h"
     40#include "VMXInternal.h"
     41#include "SVMInternal.h"
    4142
    4243#if HC_ARCH_BITS == 32
     
    10481049        bool                        fSwitchedToNstGstVmcs;
    10491050        bool                        afAlignment0[7];
     1051        /** Pointer to the VMX transient info during VM-exit. */
     1052        PVMXTRANSIENT               pVmxTransient;
    10501053        /** @} */
    10511054
     
    11061109        bool                        afAlignment[7];
    11071110
     1111        /** Pointer to the SVM transient info during VM-exit. */
     1112        PSVMTRANSIENT               pSvmTransient;
    11081113        /** Host's TSC_AUX MSR (used when RDTSCP doesn't cause VM-exits). */
    11091114        uint64_t                    u64HostTscAux;
  • trunk/src/VBox/VMM/include/HMInternal.mac

    r93730 r93963  
    193193    .VmcsInfoNstGst                 resb    VMXVMCSINFO_size
    194194    .fSwitchedToNstGstVmcs          resb    1
    195 
    196     alignb 8
     195    alignb 8
     196    .pVmxTransient                  RTR0PTR_RES  1
     197
    197198    .u64HostMsrLStar                resq    1
    198199    .u64HostMsrStar                 resq    1
     
    229230
    230231    alignb 8
     232    .pSvmTransient                  RTR0PTR_RES  1
    231233    .u64HostTscAux                  resq    1
    232234
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