VirtualBox

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


Ignore:
Timestamp:
Apr 12, 2018 7:20:33 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
122040
Message:

VMM: Nested hw.virt: Implement pause-filter and pause-filter threshold.

Location:
trunk/src/VBox/VMM
Files:
5 edited

Legend:

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

    r71755 r71833  
    156156         * fields that are potentially modified by hardware-assisted SVM.
    157157         */
    158         pVmcbNstGstCtrl->u16InterceptRdCRx             = pNstGstVmcbCache->u16InterceptRdCRx;
    159         pVmcbNstGstCtrl->u16InterceptWrCRx             = pNstGstVmcbCache->u16InterceptWrCRx;
    160         pVmcbNstGstCtrl->u16InterceptRdDRx             = pNstGstVmcbCache->u16InterceptRdDRx;
    161         pVmcbNstGstCtrl->u16InterceptWrDRx             = pNstGstVmcbCache->u16InterceptWrDRx;
    162         pVmcbNstGstCtrl->u32InterceptXcpt              = pNstGstVmcbCache->u32InterceptXcpt;
    163         pVmcbNstGstCtrl->u64InterceptCtrl              = pNstGstVmcbCache->u64InterceptCtrl;
    164         pVmcbNstGstState->u64DBGCTL                    = pNstGstVmcbCache->u64DBGCTL;
    165         pVmcbNstGstCtrl->u32VmcbCleanBits              = pNstGstVmcbCache->u32VmcbCleanBits;
    166         pVmcbNstGstCtrl->u64IOPMPhysAddr               = pNstGstVmcbCache->u64IOPMPhysAddr;
    167         pVmcbNstGstCtrl->u64MSRPMPhysAddr              = pNstGstVmcbCache->u64MSRPMPhysAddr;
    168         pVmcbNstGstCtrl->u64TSCOffset                  = pNstGstVmcbCache->u64TSCOffset;
    169         pVmcbNstGstCtrl->IntCtrl.n.u1VIntrMasking      = pNstGstVmcbCache->fVIntrMasking;
    170         pVmcbNstGstCtrl->TLBCtrl                       = pNstGstVmcbCache->TLBCtrl;
     158        pVmcbNstGstCtrl->u16InterceptRdCRx        = pNstGstVmcbCache->u16InterceptRdCRx;
     159        pVmcbNstGstCtrl->u16InterceptWrCRx        = pNstGstVmcbCache->u16InterceptWrCRx;
     160        pVmcbNstGstCtrl->u16InterceptRdDRx        = pNstGstVmcbCache->u16InterceptRdDRx;
     161        pVmcbNstGstCtrl->u16InterceptWrDRx        = pNstGstVmcbCache->u16InterceptWrDRx;
     162        pVmcbNstGstCtrl->u16PauseFilterCount      = pNstGstVmcbCache->u16PauseFilterCount;
     163        pVmcbNstGstCtrl->u16PauseFilterThreshold  = pNstGstVmcbCache->u16PauseFilterThreshold;
     164        pVmcbNstGstCtrl->u32InterceptXcpt         = pNstGstVmcbCache->u32InterceptXcpt;
     165        pVmcbNstGstCtrl->u64InterceptCtrl         = pNstGstVmcbCache->u64InterceptCtrl;
     166        pVmcbNstGstState->u64DBGCTL               = pNstGstVmcbCache->u64DBGCTL;
     167        pVmcbNstGstCtrl->u32VmcbCleanBits         = pNstGstVmcbCache->u32VmcbCleanBits;
     168        pVmcbNstGstCtrl->u64IOPMPhysAddr          = pNstGstVmcbCache->u64IOPMPhysAddr;
     169        pVmcbNstGstCtrl->u64MSRPMPhysAddr         = pNstGstVmcbCache->u64MSRPMPhysAddr;
     170        pVmcbNstGstCtrl->u64TSCOffset             = pNstGstVmcbCache->u64TSCOffset;
     171        pVmcbNstGstCtrl->IntCtrl.n.u1VIntrMasking = pNstGstVmcbCache->fVIntrMasking;
     172        pVmcbNstGstCtrl->TLBCtrl                  = pNstGstVmcbCache->TLBCtrl;
    171173
    172174        /*
     
    583585
    584586/**
     587 * Returns the nested-guest VMCB pause-filter count.
     588 *
     589 * @returns The pause-filter count.
     590 * @param   pVCpu   The cross context virtual CPU structure of the calling EMT.
     591 * @param   pCtx    Pointer to the context.
     592 */
     593VMM_INT_DECL(uint16_t) HMGetGuestSvmPauseFilterCount(PVMCPU pVCpu, PCCPUMCTX pCtx)
     594{
     595    Assert(pCtx->hwvirt.svm.fHMCachedVmcb); NOREF(pCtx);
     596    PCSVMNESTEDVMCBCACHE pVmcbNstGstCache = &pVCpu->hm.s.svm.NstGstVmcbCache;
     597    return pVmcbNstGstCache->u16PauseFilterCount;
     598}
     599
     600
     601/**
    585602 * Checks whether the SVM nested-guest is in a state to receive physical (APIC)
    586603 * interrupts.
  • trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp

    r71814 r71833  
    10411041            if (fPauseFilterThreshold)
    10421042                pVmcb->ctrl.u16PauseFilterThreshold = pVM->hm.s.svm.cPauseFilterThresholdTicks;
    1043             pVmcb->ctrl.u32InterceptXcpt |= SVM_CTRL_INTERCEPT_PAUSE;
     1043            pVmcb->ctrl.u64InterceptCtrl |= SVM_CTRL_INTERCEPT_PAUSE;
    10441044        }
    10451045
     
    20482048 * @param   pCtx            Pointer to the guest-CPU context.
    20492049 */
    2050 static void hmR0SvmLoadGuestXcptInterceptsNested(PVMCPU pVCpu, PSVMVMCB pVmcbNstGst, PCPUMCTX pCtx)
    2051 {
    2052     RT_NOREF(pCtx);
     2050static void hmR0SvmLoadGuestInterceptsNested(PVMCPU pVCpu, PSVMVMCB pVmcbNstGst, PCPUMCTX pCtx)
     2051{
    20532052    if (HMCPU_CF_IS_PENDING(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS))
    20542053    {
    2055         PSVMVMCB pVmcb = pVCpu->hm.s.svm.pVmcb;
     2054        PVM          pVM             = pVCpu->CTX_SUFF(pVM);
     2055        PCSVMVMCB    pVmcb           = pVCpu->hm.s.svm.pVmcb;
     2056        PSVMVMCBCTRL pVmcbNstGstCtrl = &pVmcbNstGst->ctrl;
    20562057
    20572058        /* Merge the guest's CR intercepts into the nested-guest VMCB. */
    2058         pVmcbNstGst->ctrl.u16InterceptRdCRx |= pVmcb->ctrl.u16InterceptRdCRx;
    2059         pVmcbNstGst->ctrl.u16InterceptWrCRx |= pVmcb->ctrl.u16InterceptWrCRx;
     2059        pVmcbNstGstCtrl->u16InterceptRdCRx |= pVmcb->ctrl.u16InterceptRdCRx;
     2060        pVmcbNstGstCtrl->u16InterceptWrCRx |= pVmcb->ctrl.u16InterceptWrCRx;
    20602061
    20612062        /* Always intercept CR4 writes for tracking PGM mode changes. */
    2062         pVmcbNstGst->ctrl.u16InterceptWrCRx |= RT_BIT(4);
     2063        pVmcbNstGstCtrl->u16InterceptWrCRx |= RT_BIT(4);
    20632064
    20642065        /* Without nested paging, intercept CR3 reads and writes as we load shadow page tables. */
    2065         if (!pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging)
    2066         {
    2067             pVmcbNstGst->ctrl.u16InterceptRdCRx |= RT_BIT(3);
    2068             pVmcbNstGst->ctrl.u16InterceptWrCRx |= RT_BIT(3);
     2066        if (!pVM->hm.s.fNestedPaging)
     2067        {
     2068            pVmcbNstGstCtrl->u16InterceptRdCRx |= RT_BIT(3);
     2069            pVmcbNstGstCtrl->u16InterceptWrCRx |= RT_BIT(3);
    20692070        }
    20702071
    20712072        /** @todo Figure out debugging with nested-guests, till then just intercept
    20722073         *        all DR[0-15] accesses. */
    2073         pVmcbNstGst->ctrl.u16InterceptRdDRx |= 0xffff;
    2074         pVmcbNstGst->ctrl.u16InterceptWrDRx |= 0xffff;
     2074        pVmcbNstGstCtrl->u16InterceptRdDRx |= 0xffff;
     2075        pVmcbNstGstCtrl->u16InterceptWrDRx |= 0xffff;
    20752076
    20762077        /*
     
    20872088         */
    20882089#ifndef HMSVM_ALWAYS_TRAP_ALL_XCPTS
    2089         pVmcbNstGst->ctrl.u32InterceptXcpt  |= (pVmcb->ctrl.u32InterceptXcpt & ~(  RT_BIT(X86_XCPT_UD)
     2090        pVmcbNstGstCtrl->u32InterceptXcpt  |= (pVmcb->ctrl.u32InterceptXcpt & ~(  RT_BIT(X86_XCPT_UD)
    20902091                                                                                 | RT_BIT(X86_XCPT_BP)));
    20912092#else
    2092         pVmcbNstGst->ctrl.u32InterceptXcpt  |= pVmcb->ctrl.u32InterceptXcpt;
     2093        pVmcbNstGstCtrl->u32InterceptXcpt  |= pVmcb->ctrl.u32InterceptXcpt;
    20932094#endif
    20942095
     
    21032104         *   the nested-guest, the physical CPU raises a \#UD exception as expected.
    21042105         */
    2105         pVmcbNstGst->ctrl.u64InterceptCtrl  |= (pVmcb->ctrl.u64InterceptCtrl & ~(  SVM_CTRL_INTERCEPT_VINTR
    2106                                                                                  | SVM_CTRL_INTERCEPT_VMMCALL))
    2107                                             |  HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS;
    2108 
    2109         Assert(   (pVmcbNstGst->ctrl.u64InterceptCtrl & HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS)
     2106        pVmcbNstGstCtrl->u64InterceptCtrl  |= (pVmcb->ctrl.u64InterceptCtrl & ~(  SVM_CTRL_INTERCEPT_VINTR
     2107                                                                                | SVM_CTRL_INTERCEPT_VMMCALL))
     2108                                           |  HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS;
     2109
     2110        Assert(   (pVmcbNstGstCtrl->u64InterceptCtrl & HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS)
    21102111               == HMSVM_MANDATORY_GUEST_CTRL_INTERCEPTS);
     2112
     2113        /*
     2114         * Ensure the nested-guest pause-filter counters don't exceed the outer guest values esp.
     2115         * since SVM doesn't have a preemption timer.
     2116         *
     2117         * We do this here rather than in hmR0SvmVmRunSetupVmcb() as we may have been executing the
     2118         * nested-guest in IEM incl. PAUSE instructions which would update the pause-filter counters.
     2119         */
     2120        if (HMIsGuestSvmCtrlInterceptSet(pVCpu, pCtx, SVM_CTRL_INTERCEPT_PAUSE))
     2121        {
     2122            pVmcbNstGstCtrl->u16PauseFilterCount     = RT_MIN(pCtx->hwvirt.svm.cPauseFilter, pVmcb->ctrl.u16PauseFilterCount);
     2123            pVmcbNstGstCtrl->u16PauseFilterThreshold = RT_MIN(pCtx->hwvirt.svm.cPauseFilterThreshold,
     2124                                                              pVmcb->ctrl.u16PauseFilterThreshold);
     2125        }
     2126        else
     2127        {
     2128            pVmcbNstGstCtrl->u16PauseFilterCount     = pVmcb->ctrl.u16PauseFilterCount;
     2129            pVmcbNstGstCtrl->u16PauseFilterThreshold = pVmcb->ctrl.u16PauseFilterThreshold;
     2130        }
    21112131
    21122132        /** @todo This doesn't make sense. Re-think and remove. */
     
    21182138        if (!pVCpu->CTX_SUFF(pVM)->cpum.ro.GuestFeatures.fSvmVirtVmsaveVmload)
    21192139        {
    2120             pVmcbNstGst->ctrl.u64InterceptCtrl |= SVM_CTRL_INTERCEPT_VMSAVE
    2121                                                |  SVM_CTRL_INTERCEPT_VMLOAD;
     2140            pVmcbNstGstCtrl->u64InterceptCtrl |= SVM_CTRL_INTERCEPT_VMSAVE
     2141                                              |  SVM_CTRL_INTERCEPT_VMLOAD;
    21222142        }
    21232143
     
    21282148        if (!pVCpu->CTX_SUFF(pVM)->cpum.ro.GuestFeatures.fSvmVGif)
    21292149        {
    2130             pVmcbNstGst->ctrl.u64InterceptCtrl |= SVM_CTRL_INTERCEPT_CLGI
    2131                                                |  SVM_CTRL_INTERCEPT_STGI;
     2150            pVmcbNstGstCtrl->u64InterceptCtrl |= SVM_CTRL_INTERCEPT_CLGI
     2151                                              |  SVM_CTRL_INTERCEPT_STGI;
    21322152        }
    21332153#endif
    21342154
    21352155        /* Finally, update the VMCB clean bits. */
    2136         pVmcbNstGst->ctrl.u32VmcbCleanBits &= ~HMSVM_VMCB_CLEAN_INTERCEPTS;
     2156        pVmcbNstGstCtrl->u32VmcbCleanBits &= ~HMSVM_VMCB_CLEAN_INTERCEPTS;
    21372157        HMCPU_CF_CLEAR(pVCpu, HM_CHANGED_GUEST_XCPT_INTERCEPTS);
    21382158    }
     
    24122432    if (!fWasCached)
    24132433    {
    2414         pVmcbNstGstCache->u16InterceptRdCRx = pVmcbNstGstCtrl->u16InterceptRdCRx;
    2415         pVmcbNstGstCache->u16InterceptWrCRx = pVmcbNstGstCtrl->u16InterceptWrCRx;
    2416         pVmcbNstGstCache->u16InterceptRdDRx = pVmcbNstGstCtrl->u16InterceptRdDRx;
    2417         pVmcbNstGstCache->u16InterceptWrDRx = pVmcbNstGstCtrl->u16InterceptWrDRx;
    2418         pVmcbNstGstCache->u32InterceptXcpt  = pVmcbNstGstCtrl->u32InterceptXcpt;
    2419         pVmcbNstGstCache->u64InterceptCtrl  = pVmcbNstGstCtrl->u64InterceptCtrl;
    2420         pVmcbNstGstCache->u64CR0            = pVmcbNstGstState->u64CR0;
    2421         pVmcbNstGstCache->u64CR3            = pVmcbNstGstState->u64CR3;
    2422         pVmcbNstGstCache->u64CR4            = pVmcbNstGstState->u64CR4;
    2423         pVmcbNstGstCache->u64EFER           = pVmcbNstGstState->u64EFER;
    2424         pVmcbNstGstCache->u64PAT            = pVmcbNstGstState->u64PAT;
    2425         pVmcbNstGstCache->u64DBGCTL         = pVmcbNstGstState->u64DBGCTL;
    2426         pVmcbNstGstCache->u64IOPMPhysAddr   = pVmcbNstGstCtrl->u64IOPMPhysAddr;
    2427         pVmcbNstGstCache->u64MSRPMPhysAddr  = pVmcbNstGstCtrl->u64MSRPMPhysAddr;
    2428         pVmcbNstGstCache->u64TSCOffset      = pVmcbNstGstCtrl->u64TSCOffset;
    2429         pVmcbNstGstCache->u32VmcbCleanBits  = pVmcbNstGstCtrl->u32VmcbCleanBits;
    2430         pVmcbNstGstCache->fVIntrMasking     = pVmcbNstGstCtrl->IntCtrl.n.u1VIntrMasking;
    2431         pVmcbNstGstCache->TLBCtrl           = pVmcbNstGstCtrl->TLBCtrl;
    2432         pVmcbNstGstCache->u1NestedPaging    = pVmcbNstGstCtrl->NestedPaging.n.u1NestedPaging;
    2433         pVmcbNstGstCache->u1LbrVirt         = pVmcbNstGstCtrl->LbrVirt.n.u1LbrVirt;
    2434         pCtx->hwvirt.svm.fHMCachedVmcb      = true;
     2434        pVmcbNstGstCache->u16InterceptRdCRx       = pVmcbNstGstCtrl->u16InterceptRdCRx;
     2435        pVmcbNstGstCache->u16InterceptWrCRx       = pVmcbNstGstCtrl->u16InterceptWrCRx;
     2436        pVmcbNstGstCache->u16InterceptRdDRx       = pVmcbNstGstCtrl->u16InterceptRdDRx;
     2437        pVmcbNstGstCache->u16InterceptWrDRx       = pVmcbNstGstCtrl->u16InterceptWrDRx;
     2438        pVmcbNstGstCache->u16PauseFilterCount     = pVmcbNstGstCtrl->u16PauseFilterCount;
     2439        pVmcbNstGstCache->u16PauseFilterThreshold = pVmcbNstGstCtrl->u16PauseFilterThreshold;
     2440        pVmcbNstGstCache->u32InterceptXcpt        = pVmcbNstGstCtrl->u32InterceptXcpt;
     2441        pVmcbNstGstCache->u64InterceptCtrl        = pVmcbNstGstCtrl->u64InterceptCtrl;
     2442        pVmcbNstGstCache->u64CR0                  = pVmcbNstGstState->u64CR0;
     2443        pVmcbNstGstCache->u64CR3                  = pVmcbNstGstState->u64CR3;
     2444        pVmcbNstGstCache->u64CR4                  = pVmcbNstGstState->u64CR4;
     2445        pVmcbNstGstCache->u64EFER                 = pVmcbNstGstState->u64EFER;
     2446        pVmcbNstGstCache->u64PAT                  = pVmcbNstGstState->u64PAT;
     2447        pVmcbNstGstCache->u64DBGCTL               = pVmcbNstGstState->u64DBGCTL;
     2448        pVmcbNstGstCache->u64IOPMPhysAddr         = pVmcbNstGstCtrl->u64IOPMPhysAddr;
     2449        pVmcbNstGstCache->u64MSRPMPhysAddr        = pVmcbNstGstCtrl->u64MSRPMPhysAddr;
     2450        pVmcbNstGstCache->u64TSCOffset            = pVmcbNstGstCtrl->u64TSCOffset;
     2451        pVmcbNstGstCache->u32VmcbCleanBits        = pVmcbNstGstCtrl->u32VmcbCleanBits;
     2452        pVmcbNstGstCache->fVIntrMasking           = pVmcbNstGstCtrl->IntCtrl.n.u1VIntrMasking;
     2453        pVmcbNstGstCache->TLBCtrl                 = pVmcbNstGstCtrl->TLBCtrl;
     2454        pVmcbNstGstCache->u1NestedPaging          = pVmcbNstGstCtrl->NestedPaging.n.u1NestedPaging;
     2455        pVmcbNstGstCache->u1LbrVirt               = pVmcbNstGstCtrl->LbrVirt.n.u1LbrVirt;
     2456        pCtx->hwvirt.svm.fHMCachedVmcb            = true;
    24352457        Log4(("hmR0SvmVmRunCacheVmcb: Cached VMCB fields\n"));
    24362458    }
     
    24652487
    24662488        /*
    2467          * Use the same nested-paging as the "outer" guest. We can't dynamically
    2468          * switch off nested-paging suddenly while executing a VM (see assertion at the
    2469          * end of Trap0eHandler() in PGMAllBth.h).
     2489         * Use the same nested-paging as the outer guest. We can't dynamically switch off
     2490         * nested-paging suddenly while executing a VM (see assertion at the end of
     2491         * Trap0eHandler() in PGMAllBth.h).
    24702492         */
    24712493        pVmcbNstGstCtrl->NestedPaging.n.u1NestedPaging = pVCpu->CTX_SUFF(pVM)->hm.s.fNestedPaging;
    24722494
    2473         /* For now copy the LBR info. from outer guest VMCB. */
    2474         /** @todo fix this later. */
    2475         PCSVMVMCB pVmcb = pVCpu->hm.s.svm.pVmcb;
     2495        /* Override nested-guest PAT MSR, see @bugref{7243#c109}. */
     2496        PSVMVMCBSTATESAVE pVmcbNstGstState = &pVmcbNstGst->guest;
     2497        pVmcbNstGstState->u64PAT = MSR_IA32_CR_PAT_INIT_VAL;
     2498
     2499#ifdef DEBUG_ramshankar
     2500        /* For debugging purposes - copy the LBR info. from outer guest VMCB. */
    24762501        pVmcbNstGstCtrl->LbrVirt.n.u1LbrVirt = pVmcb->ctrl.LbrVirt.n.u1LbrVirt;
    2477         pVmcbNstGst->guest.u64DBGCTL = pVmcb->guest.u64DBGCTL;
    2478 
    2479         /* Override nested-guest PAT MSR, see @bugref{7243#c109}. */
    2480         pVmcbNstGst->guest.u64PAT = MSR_IA32_CR_PAT_INIT_VAL;
     2502        pVmcbNstGstState->u64DBGCTL = pVmcb->guest.u64DBGCTL;
     2503#endif
    24812504    }
    24822505    else
     
    25282551#endif
    25292552
    2530     hmR0SvmLoadGuestXcptInterceptsNested(pVCpu, pVmcbNstGst, pCtx);
     2553    hmR0SvmLoadGuestInterceptsNested(pVCpu, pVmcbNstGst, pCtx);
    25312554
    25322555    rc = hmR0SvmSetupVMRunHandler(pVCpu);
  • trunk/src/VBox/VMM/VMMR3/CPUM.cpp

    r71755 r71833  
    12821282    {
    12831283        memset(pCtx->hwvirt.svm.CTX_SUFF(pVmcb), 0, SVM_VMCB_PAGES << PAGE_SHIFT);
    1284         pCtx->hwvirt.svm.uMsrHSavePa = 0;
     1284        pCtx->hwvirt.svm.uMsrHSavePa    = 0;
     1285        pCtx->hwvirt.svm.uPrevPauseTick = 0;
    12851286    }
    12861287}
  • trunk/src/VBox/VMM/include/CPUMInternal.mac

    r71184 r71833  
    239239    alignb 8
    240240    .Guest.hwvirt.svm.HostState              resb         184
    241     .Guest.hwvirt.svm.u16Padding0            resw         1
     241    .Guest.hwvirt.svm.uPrevPauseTick         resq         1
    242242    .Guest.hwvirt.svm.cPauseFilter           resw         1
    243243    .Guest.hwvirt.svm.cPauseFilterThreshold  resw         1
    244244    .Guest.hwvirt.svm.fInterceptEvents       resb         1
    245245    .Guest.hwvirt.svm.fHMCachedVmcb          resb         1
     246    alignb 8
    246247    .Guest.hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES  1
    247248    alignb 8
     
    526527    alignb 8
    527528    .Hyper.hwvirt.svm.HostState              resb         184
    528     .Hyper.hwvirt.svm.u16Padding0            resw         1
     529    .Hyper.hwvirt.svm.uPrevPauseTick         resq         1
    529530    .Hyper.hwvirt.svm.cPauseFilter           resw         1
    530531    .Hyper.hwvirt.svm.cPauseFilterThreshold  resw         1
    531532    .Hyper.hwvirt.svm.fInterceptEvents       resb         1
    532533    .Hyper.hwvirt.svm.fHMCachedVmcb          resb         1
     534    alignb 8
    533535    .Hyper.hwvirt.svm.pvMsrBitmapR0          RTR0PTR_RES  1
    534536    alignb 8
  • trunk/src/VBox/VMM/testcase/tstVMStruct.h

    r70948 r71833  
    137137    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.pVmcbR3);
    138138    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.HostState);
     139    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.uPrevPauseTick);
    139140    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.cPauseFilter);
    140141    GEN_CHECK_OFF(CPUMCTX, hwvirt.svm.cPauseFilterThreshold);
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