VirtualBox

Changeset 87515 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
Feb 1, 2021 7:13:42 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142540
Message:

VMM/HM: Make a R0 copy of HM::fNestedPaging on setup. Moved pGuestPatchMem and friends down to the patching array. bugref:9217

Location:
trunk/src/VBox/VMM/VMMR0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r87511 r87515  
    988988    Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD));
    989989    AssertReturn(pVM, VERR_INVALID_PARAMETER);
    990     Assert(pVM->hm.s.svm.fSupported);
    991 
     990
     991    /*
     992     * Validate some parameters.
     993     */
     994    AssertReturn(pVM->hm.s.svm.fSupported, VERR_INCOMPATIBLE_CONFIG);
     995    bool const fNestedPaging = pVM->hm.s.fNestedPagingCfg;
     996    AssertReturn(   !fNestedPaging
     997                 || (pVM->hm.s.svm.fFeaturesForRing3 & X86_CPUID_SVM_FEATURE_EDX_NESTED_PAGING),
     998                 VERR_INCOMPATIBLE_CONFIG);
     999    pVM->hmr0.s.fNestedPaging = fNestedPaging;
     1000
     1001    /*
     1002     * Determin some configuration parameters.
     1003     */
    9921004    bool const fPauseFilter          = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER);
    9931005    bool const fPauseFilterThreshold = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_PAUSE_FILTER_THRESHOLD);
     
    9991011#ifdef VBOX_WITH_NESTED_HWVIRT_SVM
    10001012    bool const fVirtVmsaveVmload     = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_VIRT_VMSAVE_VMLOAD);
    1001     bool const fUseVirtVmsaveVmload  = fVirtVmsaveVmload && pVM->hm.s.svm.fVirtVmsaveVmload && pVM->hm.s.fNestedPaging;
     1013    bool const fUseVirtVmsaveVmload  = fVirtVmsaveVmload && pVM->hm.s.svm.fVirtVmsaveVmload && fNestedPaging;
    10021014
    10031015    bool const fVGif                 = RT_BOOL(pVM->hmr0.s.svm.fFeatures & X86_CPUID_SVM_FEATURE_EDX_VGIF);
     
    11091121
    11101122    /* Setup Nested Paging. This doesn't change throughout the execution time of the VM. */
    1111     pVmcbCtrl0->NestedPagingCtrl.n.u1NestedPaging = pVM->hm.s.fNestedPaging;
     1123    pVmcbCtrl0->NestedPagingCtrl.n.u1NestedPaging = fNestedPaging;
    11121124
    11131125    /* Without Nested Paging, we need additionally intercepts. */
    1114     if (!pVM->hm.s.fNestedPaging)
     1126    if (!fNestedPaging)
    11151127    {
    11161128        /* CR3 reads/writes must be intercepted; our shadow values differ from the guest values. */
     
    15301542
    15311543    /* When Nested Paging is not available use shadow page tables and intercept #PFs (latter done in SVMR0SetupVM()). */
    1532     if (!pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging)
     1544    if (!pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging)
    15331545    {
    15341546        uShadowCr0 |= X86_CR0_PG      /* Use shadow page tables. */
     
    16051617    Assert(!RTThreadPreemptIsEnabled(NIL_RTTHREAD));
    16061618
    1607     PVMCC      pVM  = pVCpu->CTX_SUFF(pVM);
     1619    PVMCC    pVM  = pVCpu->CTX_SUFF(pVM);
    16081620    PCPUMCTX pCtx = &pVCpu->cpum.GstCtx;
    1609     if (pVM->hm.s.fNestedPaging)
     1621    if (pVM->hmr0.s.fNestedPaging)
    16101622    {
    16111623        pVmcb->ctrl.u64NestedPagingCR3 = PGMGetHyperCR3(pVCpu);
     
    16351647    PCPUMCTX pCtx = &pVCpu->cpum.GstCtx;
    16361648    uint64_t uShadowCr4 = pCtx->cr4;
    1637     if (!pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging)
     1649    if (!pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging)
    16381650    {
    16391651        switch (pVCpu->hm.s.enmShadowMode)
     
    22052217
    22062218    /* Without nested paging, intercept CR3 reads and writes as we load shadow page tables. */
    2207     if (!pVM->hm.s.fNestedPaging)
     2219    if (!pVM->hmr0.s.fNestedPaging)
    22082220    {
    22092221        pVmcbNstGstCtrl->u16InterceptRdCRx |= RT_BIT(3);
     
    25582570         * Trap0eHandler() in PGMAllBth.h).
    25592571         */
    2560         pVmcbNstGstCtrl->NestedPagingCtrl.n.u1NestedPaging = pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging;
     2572        pVmcbNstGstCtrl->NestedPagingCtrl.n.u1NestedPaging = pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging;
    25612573
    25622574        /* Always enable V_INTR_MASKING as we do not want to allow access to the physical APIC TPR. */
     
    26002612        Assert(!pVCpu->hmr0.s.svm.fSyncVTpr);
    26012613        Assert(pVmcbNstGstCtrl->u64IOPMPhysAddr == g_HCPhysIOBitmap);
    2602         Assert(RT_BOOL(pVmcbNstGstCtrl->NestedPagingCtrl.n.u1NestedPaging) == pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging);
     2614        Assert(RT_BOOL(pVmcbNstGstCtrl->NestedPagingCtrl.n.u1NestedPaging) == pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
     2615        Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPagingCfg == pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    26032616    }
    26042617}
     
    31303143                             | CPUM_CHANGED_TR
    31313144                             | CPUM_CHANGED_HIDDEN_SEL_REGS);
    3132     if (   pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging
     3145    if (   pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging
    31333146        && CPUMIsGuestPagingEnabledEx(&pVCpu->cpum.GstCtx))
    31343147    {
     
    49494962        {
    49504963            PVMCC pVM = pVCpu->CTX_SUFF(pVM);
    4951             if (pVM->hm.s.fNestedPaging)
     4964            if (pVM->hmr0.s.fNestedPaging)
    49524965            {
    49534966                uint32_t const u32ErrCode    = pVmcbNstGstCtrl->u64ExitInfo1;
     
    52515264                case SVM_EXIT_NPF:
    52525265                {
    5253                     Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging);
     5266                    Assert(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    52545267                    return hmR0SvmExitNestedPF(pVCpu, pSvmTransient);
    52555268                }
     
    59625975{
    59635976    HMSVM_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pSvmTransient);
    5964     Assert(!pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging);
     5977    Assert(!pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    59655978
    59665979    VBOXSTRICTRC rcStrict;
     
    68196832    PVMCC      pVM  = pVCpu->CTX_SUFF(pVM);
    68206833    PCPUMCTX pCtx = &pVCpu->cpum.GstCtx;
    6821     Assert(pVM->hm.s.fNestedPaging);
     6834    Assert(pVM->hmr0.s.fNestedPaging);
    68226835
    68236836    /* See AMD spec. 15.25.6 "Nested versus Guest Page Faults, Fault Ordering" for VMCB details for #NPF. */
     
    69987011
    69997012#ifndef HMSVM_ALWAYS_TRAP_TASK_SWITCH
    7000     Assert(!pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging);
     7013    Assert(!pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    70017014#endif
    70027015
     
    71617174
    71627175#if defined(HMSVM_ALWAYS_TRAP_ALL_XCPTS) || defined(HMSVM_ALWAYS_TRAP_PF)
    7163     if (pVM->hm.s.fNestedPaging)
     7176    if (pVM->hmr0.s.fNestedPaging)
    71647177    {
    71657178        pVCpu->hm.s.Event.fPending = false;     /* In case it's a contributory or vectoring #PF. */
     
    71837196#endif
    71847197
    7185     Assert(!pVM->hm.s.fNestedPaging);
     7198    Assert(!pVM->hmr0.s.fNestedPaging);
    71867199
    71877200    /*
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r87491 r87515  
    947947    return (  X86_CR0_PE
    948948            | X86_CR0_NE
    949             | (pVM->hm.s.fNestedPaging ? 0 : X86_CR0_WP)
     949            | (pVM->hmr0.s.fNestedPaging ? 0 : X86_CR0_WP)
    950950            | X86_CR0_PG
    951951            | VMX_EXIT_HOST_CR0_IGNORE_MASK);
     
    11911191        {
    11921192            /* Validate we are not removing any essential exception intercepts. */
    1193             Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging || !(uXcptMask & RT_BIT(X86_XCPT_PF)));
     1193            Assert(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging || !(uXcptMask & RT_BIT(X86_XCPT_PF)));
    11941194            NOREF(pVCpu);
    11951195            Assert(!(uXcptMask & RT_BIT(X86_XCPT_DB)));
     
    29622962                VMCPU_FF_SET(pVCpu, VMCPU_FF_TLB_FLUSH);
    29632963        }
    2964         else if (pVM->hm.s.fNestedPaging)
     2964        else if (pVM->hmr0.s.fNestedPaging)
    29652965            VMCPU_FF_SET(pVCpu, VMCPU_FF_TLB_FLUSH);
    29662966    }
     
    30263026
    30273027    PVMCC pVM = pVCpu->CTX_SUFF(pVM);
    3028     AssertMsg(pVM->hm.s.fNestedPaging && pVM->hm.s.vmx.fVpid,
     3028    AssertMsg(pVM->hmr0.s.fNestedPaging && pVM->hm.s.vmx.fVpid,
    30293029              ("hmR0VmxFlushTaggedTlbBoth cannot be invoked unless NestedPaging & VPID are enabled."
    3030                "fNestedPaging=%RTbool fVpid=%RTbool", pVM->hm.s.fNestedPaging, pVM->hm.s.vmx.fVpid));
     3030               "fNestedPaging=%RTbool fVpid=%RTbool", pVM->hmr0.s.fNestedPaging, pVM->hm.s.vmx.fVpid));
    30313031
    30323032    /*
     
    31253125    AssertPtr(pHostCpu);
    31263126    Assert(pHostCpu->idCpu != NIL_RTCPUID);
    3127     AssertMsg(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging, ("hmR0VmxFlushTaggedTlbEpt cannot be invoked without NestedPaging."));
     3127    AssertMsg(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging, ("hmR0VmxFlushTaggedTlbEpt cannot be invoked without NestedPaging."));
    31283128    AssertMsg(!pVCpu->CTX_SUFF(pVM)->hm.s.vmx.fVpid, ("hmR0VmxFlushTaggedTlbEpt cannot be invoked with VPID."));
    31293129
     
    31793179    Assert(pHostCpu->idCpu != NIL_RTCPUID);
    31803180    AssertMsg(pVCpu->CTX_SUFF(pVM)->hm.s.vmx.fVpid, ("hmR0VmxFlushTlbVpid cannot be invoked without VPID."));
    3181     AssertMsg(!pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging, ("hmR0VmxFlushTlbVpid cannot be invoked with NestedPaging"));
     3181    AssertMsg(!pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging, ("hmR0VmxFlushTlbVpid cannot be invoked with NestedPaging"));
    31823182
    31833183    /*
     
    33033303     * unrestricted guest execution (see hmR3InitFinalizeR0()).
    33043304     */
    3305     if (pVM->hm.s.fNestedPaging)
     3305    if (pVM->hmr0.s.fNestedPaging)
    33063306    {
    33073307        if (pVM->hm.s.vmx.Msrs.u64EptVpidCaps & MSR_IA32_VMX_EPT_VPID_CAP_INVEPT)
     
    33783378     * Setup the handler for flushing tagged-TLBs.
    33793379     */
    3380     if (pVM->hm.s.fNestedPaging && pVM->hm.s.vmx.fVpid)
     3380    if (pVM->hmr0.s.fNestedPaging && pVM->hm.s.vmx.fVpid)
    33813381        pVM->hm.s.vmx.enmTlbFlushType = VMXTLBFLUSHTYPE_EPT_VPID;
    3382     else if (pVM->hm.s.fNestedPaging)
     3382    else if (pVM->hmr0.s.fNestedPaging)
    33833383        pVM->hm.s.vmx.enmTlbFlushType = VMXTLBFLUSHTYPE_EPT;
    33843384    else if (pVM->hm.s.vmx.fVpid)
     
    38643864
    38653865    /* Enable EPT (aka nested-paging). */
    3866     if (pVM->hm.s.fNestedPaging)
     3866    if (pVM->hmr0.s.fNestedPaging)
    38673867        fVal |= VMX_PROC_CTLS2_EPT;
    38683868
     
    39683968
    39693969    /* Without nested paging, INVLPG (also affects INVPCID) and MOV CR3 instructions should cause VM-exits. */
    3970     if (!pVM->hm.s.fNestedPaging)
     3970    if (!pVM->hmr0.s.fNestedPaging)
    39713971    {
    39723972        Assert(!pVM->hm.s.vmx.fUnrestrictedGuest);
     
    41104110     * #PF - To sync our shadow page tables when nested-paging is not used.
    41114111     */
    4112     bool const fNestedPaging = pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging;
     4112    bool const fNestedPaging = pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging;
    41134113    uint32_t const uXcptBitmap = RT_BIT(X86_XCPT_AC)
    41144114                               | RT_BIT(X86_XCPT_DB)
     
    45294529    }
    45304530
     4531    /*
     4532     * Check that nested paging is supported if enabled and copy over the flag to the
     4533     * ring-0 only structure.
     4534     */
     4535    bool const fNestedPaging = pVM->hm.s.fNestedPagingCfg;
     4536    AssertReturn(   !fNestedPaging
     4537                 || (pVM->hm.s.vmx.Msrs.ProcCtls2.n.allowed1 & VMX_PROC_CTLS2_EPT), /** @todo use a ring-0 copy of ProcCtls2.n.allowed1 */
     4538                 VERR_INCOMPATIBLE_CONFIG);
     4539    pVM->hmr0.s.fNestedPaging = fNestedPaging;
     4540
    45314541    /* Initialize these always, see hmR3InitFinalizeR0().*/
    45324542    pVM->hm.s.vmx.enmTlbFlushEpt  = VMXTLBFLUSHEPT_NONE;
     
    49514961         * actually be used while executing the guest and not the CR4 shadow value).
    49524962         */
    4953         AssertMsg(pVM->hm.s.fNestedPaging || (   pVCpu->hm.s.enmShadowMode == PGMMODE_PAE
    4954                                               || pVCpu->hm.s.enmShadowMode == PGMMODE_PAE_NX
    4955                                               || pVCpu->hm.s.enmShadowMode == PGMMODE_AMD64
    4956                                               || pVCpu->hm.s.enmShadowMode == PGMMODE_AMD64_NX),
     4963        AssertMsg(   pVM->hmr0.s.fNestedPaging
     4964                  || pVCpu->hm.s.enmShadowMode == PGMMODE_PAE
     4965                  || pVCpu->hm.s.enmShadowMode == PGMMODE_PAE_NX
     4966                  || pVCpu->hm.s.enmShadowMode == PGMMODE_AMD64
     4967                  || pVCpu->hm.s.enmShadowMode == PGMMODE_AMD64_NX,
    49574968                  ("enmShadowMode=%u\n", pVCpu->hm.s.enmShadowMode));
    49584969        if ((u64GuestEfer & MSR_K6_EFER_NXE) != (u64HostEfer & MSR_K6_EFER_NXE))
     
    56625673             */
    56635674            uint32_t uProcCtls = pVmcsInfo->u32ProcCtls;
    5664             if (pVM->hm.s.fNestedPaging)
     5675            if (pVM->hmr0.s.fNestedPaging)
    56655676            {
    56665677                if (CPUMIsGuestPagingEnabled(pVCpu))
     
    57385749            if (pVCpu->hm.s.fTrapXcptGpForLovelyMesaDrv)
    57395750                uXcptBitmap |= RT_BIT(X86_XCPT_GP);
    5740             Assert(pVM->hm.s.fNestedPaging || (uXcptBitmap & RT_BIT(X86_XCPT_PF)));
     5751            Assert(pVM->hmr0.s.fNestedPaging || (uXcptBitmap & RT_BIT(X86_XCPT_PF)));
    57415752
    57425753            /* Apply the hardware specified CR0 fixed bits and enable caching. */
     
    58305841        HMVMX_CPUMCTX_ASSERT(pVCpu, CPUMCTX_EXTRN_CR3);
    58315842
    5832         if (pVM->hm.s.fNestedPaging)
     5843        if (pVM->hmr0.s.fNestedPaging)
    58335844        {
    58345845            PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
     
    59645975        }
    59655976
    5966         if (pVM->hm.s.fNestedPaging)
     5977        if (pVM->hmr0.s.fNestedPaging)
    59675978        {
    59685979            if (   !CPUMIsGuestPagingEnabledEx(pCtx)
     
    70127023                        switch (uVmcsField)
    70137024                        {
    7014                             case VMX_VMCS64_CTRL_EPTP_FULL:  fSupported = pVM->hm.s.fNestedPaging;      break;
     7025                            case VMX_VMCS64_CTRL_EPTP_FULL:  fSupported = pVM->hmr0.s.fNestedPaging;    break;
    70157026                            case VMX_VMCS16_VPID:            fSupported = pVM->hm.s.vmx.fVpid;          break;
    70167027                            case VMX_VMCS32_CTRL_PROC_EXEC2:
     
    78817892                    /* CR0.PG bit changes are always intercepted, so it's up to date. */
    78827893                    if (   pVM->hm.s.vmx.fUnrestrictedGuest
    7883                         || (   pVM->hm.s.fNestedPaging
     7894                        || (   pVM->hmr0.s.fNestedPaging
    78847895                            && CPUMIsGuestPagingEnabledEx(pCtx)))
    78857896                    {
     
    85878598                             | CPUM_CHANGED_TR
    85888599                             | CPUM_CHANGED_HIDDEN_SEL_REGS);
    8589     if (   pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging
     8600    if (   pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging
    85908601        && CPUMIsGuestPagingEnabledEx(&pVCpu->cpum.GstCtx))
    85918602        CPUMSetChangedFlags(pVCpu, CPUM_CHANGED_GLOBAL_TLB_FLUSH);
     
    1018010191        /** @todo Checks on Guest Page-Directory-Pointer-Table Entries when guest is
    1018110192         *        not using nested paging? */
    10182         if (   pVM->hm.s.fNestedPaging
     10193        if (   pVM->hmr0.s.fNestedPaging
    1018310194            && !fLongModeGuest
    1018410195            && CPUMIsGuestInPAEModeEx(pCtx))
     
    1393613947    hmR0VmxReadExitQualVmcs(pVmxTransient);
    1393713948
    13938     if (!pVM->hm.s.fNestedPaging)
     13949    if (!pVM->hmr0.s.fNestedPaging)
    1393913950    { /* likely */ }
    1394013951    else
     
    1486114872{
    1486214873    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    14863     Assert(!pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging || pVCpu->hmr0.s.fUsingDebugLoop);
     14874    Assert(!pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging || pVCpu->hmr0.s.fUsingDebugLoop);
    1486414875
    1486514876    PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo;
     
    1510915120    rc = VMXReadVmcsNw(VMX_VMCS_CTRL_CR4_READ_SHADOW, &u64Val);             AssertRC(rc);
    1511015121    Log4(("VMX_VMCS_CTRL_CR4_READ_SHADOW              %#RX64\n", u64Val));
    15111     if (pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging)
     15122    if (pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging)
    1511215123    {
    1511315124        rc = VMXReadVmcs64(VMX_VMCS64_CTRL_EPTP_FULL, &u64Val);             AssertRC(rc);
     
    1549815509             */
    1549915510            Assert(   iCrReg != 3
    15500                    || !pVM->hm.s.fNestedPaging
     15511                   || !pVM->hmr0.s.fNestedPaging
    1550115512                   || !CPUMIsGuestPagingEnabledEx(&pVCpu->cpum.GstCtx)
    1550215513                   || pVCpu->hmr0.s.fUsingDebugLoop);
     
    1555015561             */
    1555115562            Assert(   iCrReg != 3
    15552                    || !pVM->hm.s.fNestedPaging
     15563                   || !pVM->hmr0.s.fNestedPaging
    1555315564                   || !CPUMIsGuestPagingEnabledEx(&pVCpu->cpum.GstCtx)
    1555415565                   || pVCpu->hmr0.s.fLeaveDone);
     
    1609216103{
    1609316104    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    16094     Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging);
     16105    Assert(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    1609516106
    1609616107    hmR0VmxReadExitIntInfoVmcs(pVmxTransient);
     
    1620016211{
    1620116212    HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(pVCpu, pVmxTransient);
    16202     Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging);
     16213    Assert(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    1620316214
    1620416215    hmR0VmxReadExitQualVmcs(pVmxTransient);
     
    1671716728
    1671816729            /* Nested paging is currently a requirement, otherwise we would need to handle shadow #PFs in hmR0VmxExitXcptPF. */
    16719             Assert(pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging);
     16730            Assert(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging);
    1672016731            return hmR0VmxExitXcpt(pVCpu, pVmxTransient);
    1672116732        }
Note: See TracChangeset for help on using the changeset viewer.

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