VirtualBox

忽略:
時間撮記:
2019-8-19 下午07:36:29 (6 年 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
132811
訊息:

VMM,PciRaw: Eliminate duplicate PGVM/PVMCC and PGVMCPU/PVMCPUCC parameters in ring-0 code. butref:9217

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r80334 r80346  
    103103        } \
    104104    } while (0)
    105 # define VMM_CHECK_SMAP_CHECK2(a_pVM, a_BadExpr) \
     105# define VMM_CHECK_SMAP_CHECK2(a_pGVM, a_BadExpr) \
    106106    do { \
    107107        if (fKernelFeatures & SUPKERNELFEATURES_SMAP) \
     
    110110            if (RT_LIKELY(fEflCheck & X86_EFL_AC)) \
    111111            { /* likely */ } \
     112            else if (a_pGVM) \
     113            { \
     114                SUPR0BadContext((a_pGVM)->pSession, __FILE__, __LINE__, "EFLAGS.AC is zero!"); \
     115                RTStrPrintf((a_pGVM)->vmm.s.szRing0AssertMsg1, sizeof((a_pGVM)->vmm.s.szRing0AssertMsg1), \
     116                            "%s, line %d: EFLAGS.AC is clear! (%#x)\n", __FUNCTION__, __LINE__, (uint32_t)fEflCheck); \
     117                a_BadExpr; \
     118            } \
    112119            else \
    113120            { \
    114                 SUPR0BadContext((a_pVM) ? (a_pVM)->pSession : NULL, __FILE__, __LINE__, "EFLAGS.AC is zero!"); \
    115                 RTStrPrintf(pVM->vmm.s.szRing0AssertMsg1, sizeof(pVM->vmm.s.szRing0AssertMsg1), \
    116                             "%s, line %d: EFLAGS.AC is clear! (%#x)\n", __FUNCTION__, __LINE__, (uint32_t)fEflCheck); \
     121                SUPR0Printf("%s, line %d: EFLAGS.AC is clear! (%#x)\n", __FUNCTION__, __LINE__, (uint32_t)fEflCheck); \
    117122                a_BadExpr; \
    118123            } \
     
    120125    } while (0)
    121126#else
    122 # define VMM_CHECK_SMAP_SETUP()            uint32_t const fKernelFeatures = 0
    123 # define VMM_CHECK_SMAP_CHECK(a_BadExpr)            NOREF(fKernelFeatures)
    124 # define VMM_CHECK_SMAP_CHECK2(a_pVM, a_BadExpr)    NOREF(fKernelFeatures)
     127# define VMM_CHECK_SMAP_SETUP()                         uint32_t const fKernelFeatures = 0
     128# define VMM_CHECK_SMAP_CHECK(a_BadExpr)                NOREF(fKernelFeatures)
     129# define VMM_CHECK_SMAP_CHECK2(a_pGVM, a_BadExpr)       NOREF(fKernelFeatures)
    125130#endif
    126131
     
    361366 *
    362367 * @param   pGVM        The global (ring-0) VM structure.
    363  * @param   pVM         The cross context VM structure.
    364368 * @param   uSvnRev     The SVN revision of the ring-3 part.
    365369 * @param   uBuildType  Build type indicator.
    366370 * @thread  EMT(0)
    367371 */
    368 static int vmmR0InitVM(PGVM pGVM, PVMCC pVM, uint32_t uSvnRev, uint32_t uBuildType)
     372static int vmmR0InitVM(PGVM pGVM, uint32_t uSvnRev, uint32_t uBuildType)
    369373{
    370374    VMM_CHECK_SMAP_SETUP();
     
    387391    }
    388392
    389     int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, 0 /*idCpu*/);
     393    int rc = GVMMR0ValidateGVMandEMT(pGVM, 0 /*idCpu*/);
    390394    if (RT_FAILURE(rc))
    391395        return rc;
     
    395399     * Register the EMT R0 logger instance for VCPU 0.
    396400     */
    397     PVMCPUCC pVCpu = VMCC_GET_CPU_0(pVM);
     401    PVMCPUCC pVCpu = VMCC_GET_CPU_0(pGVM);
    398402
    399403    PVMMR0LOGGER pR0Logger = pVCpu->vmm.s.pR0LoggerR0;
     
    406410        LogCom(("vmmR0InitVM: offScratch=%d fFlags=%#x fDestFlags=%#x\n", pR0Logger->Logger.offScratch, pR0Logger->Logger.fFlags, pR0Logger->Logger.fDestFlags));
    407411
    408         RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
     412        RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pGVM->pSession);
    409413        LogCom(("vmmR0InitVM: after %p reg\n", RTLogDefaultInstance()));
    410         RTLogSetDefaultInstanceThread(NULL, pVM->pSession);
     414        RTLogSetDefaultInstanceThread(NULL, pGVM->pSession);
    411415        LogCom(("vmmR0InitVM: after %p dereg\n", RTLogDefaultInstance()));
    412416
     
    416420        LogCom(("vmmR0InitVM: returned successfully from direct flush call.\n"));
    417421
    418         RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
     422        RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pGVM->pSession);
    419423        LogCom(("vmmR0InitVM: after %p reg2\n", RTLogDefaultInstance()));
    420424        pR0Logger->Logger.pfnLogger("hello ring-0 logger\n");
    421425        LogCom(("vmmR0InitVM: returned successfully from direct logger call (2). offScratch=%d\n", pR0Logger->Logger.offScratch));
    422         RTLogSetDefaultInstanceThread(NULL, pVM->pSession);
     426        RTLogSetDefaultInstanceThread(NULL, pGVM->pSession);
    423427        LogCom(("vmmR0InitVM: after %p dereg2\n", RTLogDefaultInstance()));
    424428
     
    426430        LogCom(("vmmR0InitVM: RTLogLoggerEx returned fine offScratch=%d\n", pR0Logger->Logger.offScratch));
    427431
    428         RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
     432        RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pGVM->pSession);
    429433        RTLogPrintf("hello ring-0 logger (RTLogPrintf)\n");
    430434        LogCom(("vmmR0InitVM: RTLogPrintf returned fine offScratch=%d\n", pR0Logger->Logger.offScratch));
    431435# endif
    432         Log(("Switching to per-thread logging instance %p (key=%p)\n", &pR0Logger->Logger, pVM->pSession));
    433         RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
     436        Log(("Switching to per-thread logging instance %p (key=%p)\n", &pR0Logger->Logger, pGVM->pSession));
     437        RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pGVM->pSession);
    434438        pR0Logger->fRegistered = true;
    435439    }
     
    439443     * Check if the host supports high resolution timers or not.
    440444     */
    441     if (   pVM->vmm.s.fUsePeriodicPreemptionTimers
     445    if (   pGVM->vmm.s.fUsePeriodicPreemptionTimers
    442446        && !RTTimerCanDoHighResolution())
    443         pVM->vmm.s.fUsePeriodicPreemptionTimers = false;
     447        pGVM->vmm.s.fUsePeriodicPreemptionTimers = false;
    444448
    445449    /*
    446450     * Initialize the per VM data for GVMM and GMM.
    447451     */
    448     VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     452    VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    449453    rc = GVMMR0InitVM(pGVM);
    450 //    if (RT_SUCCESS(rc))
    451 //        rc = GMMR0InitPerVMData(pVM);
    452454    if (RT_SUCCESS(rc))
    453455    {
     
    455457         * Init HM, CPUM and PGM (Darwin only).
    456458         */
    457         VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    458         rc = HMR0InitVM(pVM);
     459        VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
     460        rc = HMR0InitVM(pGVM);
    459461        if (RT_SUCCESS(rc))
    460             VMM_CHECK_SMAP_CHECK2(pVM, rc = VERR_VMM_RING0_ASSERTION); /* CPUR0InitVM will otherwise panic the host */
     462            VMM_CHECK_SMAP_CHECK2(pGVM, rc = VERR_VMM_RING0_ASSERTION); /* CPUR0InitVM will otherwise panic the host */
    461463        if (RT_SUCCESS(rc))
    462464        {
    463             rc = CPUMR0InitVM(pVM);
     465            rc = CPUMR0InitVM(pGVM);
    464466            if (RT_SUCCESS(rc))
    465467            {
    466                 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     468                VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    467469#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE
    468                 rc = PGMR0DynMapInitVM(pVM);
     470                rc = PGMR0DynMapInitVM(pGVM);
    469471#endif
    470472                if (RT_SUCCESS(rc))
    471473                {
    472                     VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     474                    VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    473475                    rc = EMR0InitVM(pGVM);
    474476                    if (RT_SUCCESS(rc))
    475477                    {
    476                         VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     478                        VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    477479#ifdef VBOX_WITH_PCI_PASSTHROUGH
    478                         rc = PciRawR0InitVM(pGVM, pVM);
     480                        rc = PciRawR0InitVM(pGVM);
    479481#endif
    480482                        if (RT_SUCCESS(rc))
    481483                        {
    482                             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    483                             rc = GIMR0InitVM(pVM);
     484                            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
     485                            rc = GIMR0InitVM(pGVM);
    484486                            if (RT_SUCCESS(rc))
    485487                            {
    486                                 VMM_CHECK_SMAP_CHECK2(pVM, rc = VERR_VMM_RING0_ASSERTION);
     488                                VMM_CHECK_SMAP_CHECK2(pGVM, rc = VERR_VMM_RING0_ASSERTION);
    487489                                if (RT_SUCCESS(rc))
    488490                                {
     
    492494                                     * Collect a bit of info for the VM release log.
    493495                                     */
    494                                     pVM->vmm.s.fIsPreemptPendingApiTrusty = RTThreadPreemptIsPendingTrusty();
    495                                     pVM->vmm.s.fIsPreemptPossible         = RTThreadPreemptIsPossible();;
    496 
    497                                     VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     496                                    pGVM->vmm.s.fIsPreemptPendingApiTrusty = RTThreadPreemptIsPendingTrusty();
     497                                    pGVM->vmm.s.fIsPreemptPossible         = RTThreadPreemptIsPossible();;
     498
     499                                    VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    498500                                    return rc;
    499501                                }
    500502
    501503                                /* bail out*/
    502                                 GIMR0TermVM(pVM);
     504                                GIMR0TermVM(pGVM);
    503505                            }
    504506#ifdef VBOX_WITH_PCI_PASSTHROUGH
    505                             PciRawR0TermVM(pGVM, pVM);
     507                            PciRawR0TermVM(pGVM);
    506508#endif
    507509                        }
     
    509511                }
    510512            }
    511             HMR0TermVM(pVM);
     513            HMR0TermVM(pGVM);
    512514        }
    513515    }
    514516
    515     RTLogSetDefaultInstanceThread(NULL, (uintptr_t)pVM->pSession);
     517    RTLogSetDefaultInstanceThread(NULL, (uintptr_t)pGVM->pSession);
    516518    return rc;
    517519}
     
    523525 * @returns VBox status code.
    524526 * @param   pGVM        The ring-0 VM structure.
    525  * @param   pVM         The cross context VM structure.
    526527 * @param   idCpu       The EMT that's calling.
    527528 */
    528 static int vmmR0InitVMEmt(PGVM pGVM, PVMCC pVM, VMCPUID idCpu)
     529static int vmmR0InitVMEmt(PGVM pGVM, VMCPUID idCpu)
    529530{
    530531    /* Paranoia (caller checked these already). */
     
    541542        && !pR0Logger->fRegistered)
    542543    {
    543         RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pVM->pSession);
     544        RTLogSetDefaultInstanceThread(&pR0Logger->Logger, (uintptr_t)pGVM->pSession);
    544545        pR0Logger->fRegistered = true;
    545546    }
    546547#endif
    547     RT_NOREF(pVM);
    548548
    549549    return VINF_SUCCESS;
     
    562562 *
    563563 * @param   pGVM        The global (ring-0) VM structure.
    564  * @param   pVM         The cross context VM structure.
    565564 * @param   idCpu       Set to 0 if EMT(0) or NIL_VMCPUID if session cleanup
    566565 *                      thread.
    567566 * @thread  EMT(0) or session clean up thread.
    568567 */
    569 VMMR0_INT_DECL(int) VMMR0TermVM(PGVM pGVM, PVMCC pVM, VMCPUID idCpu)
     568VMMR0_INT_DECL(int) VMMR0TermVM(PGVM pGVM, VMCPUID idCpu)
    570569{
    571570    /*
     
    575574    {
    576575        AssertReturn(idCpu == 0, VERR_INVALID_CPU_ID);
    577         int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
     576        int rc = GVMMR0ValidateGVMandEMT(pGVM, idCpu);
    578577        if (RT_FAILURE(rc))
    579578            return rc;
     
    581580
    582581#ifdef VBOX_WITH_PCI_PASSTHROUGH
    583     PciRawR0TermVM(pGVM, pVM);
     582    PciRawR0TermVM(pGVM);
    584583#endif
    585584
     
    589588    if (GVMMR0DoingTermVM(pGVM))
    590589    {
    591         GIMR0TermVM(pVM);
    592 
    593         /** @todo I wish to call PGMR0PhysFlushHandyPages(pVM, &pVM->aCpus[idCpu])
     590        GIMR0TermVM(pGVM);
     591
     592        /** @todo I wish to call PGMR0PhysFlushHandyPages(pGVM, &pGVM->aCpus[idCpu])
    594593         *        here to make sure we don't leak any shared pages if we crash... */
    595594#ifdef VBOX_WITH_2X_4GB_ADDR_SPACE
    596         PGMR0DynMapTermVM(pVM);
    597 #endif
    598         HMR0TermVM(pVM);
     595        PGMR0DynMapTermVM(pGVM);
     596#endif
     597        HMR0TermVM(pGVM);
    599598    }
    600599
     
    602601     * Deregister the logger.
    603602     */
    604     RTLogSetDefaultInstanceThread(NULL, (uintptr_t)pVM->pSession);
     603    RTLogSetDefaultInstanceThread(NULL, (uintptr_t)pGVM->pSession);
    605604    return VINF_SUCCESS;
    606605}
     
    707706 * @returns VINF_SUCCESS or VINF_EM_HALT.
    708707 * @param   pGVM        The ring-0 VM structure.
    709  * @param   pVM         The cross context VM structure.
    710708 * @param   pGVCpu      The ring-0 virtual CPU structure.
    711  * @param   pVCpu       The cross context virtual CPU structure.
    712709 *
    713710 * @todo r=bird: All the blocking/waiting and EMT managment should move out of
     
    715712 *       parameters and statistics.
    716713 */
    717 static int vmmR0DoHalt(PGVM pGVM, PVMCC pVM, PGVMCPU pGVCpu, PVMCPUCC pVCpu)
    718 {
    719     Assert(pVCpu == pGVCpu);
    720 
     714static int vmmR0DoHalt(PGVM pGVM, PGVMCPU pGVCpu)
     715{
    721716    /*
    722717     * Do spin stat historization.
    723718     */
    724     if (++pVCpu->vmm.s.cR0Halts & 0xff)
     719    if (++pGVCpu->vmm.s.cR0Halts & 0xff)
    725720    { /* likely */ }
    726     else if (pVCpu->vmm.s.cR0HaltsSucceeded > pVCpu->vmm.s.cR0HaltsToRing3)
    727     {
    728         pVCpu->vmm.s.cR0HaltsSucceeded = 2;
    729         pVCpu->vmm.s.cR0HaltsToRing3   = 0;
     721    else if (pGVCpu->vmm.s.cR0HaltsSucceeded > pGVCpu->vmm.s.cR0HaltsToRing3)
     722    {
     723        pGVCpu->vmm.s.cR0HaltsSucceeded = 2;
     724        pGVCpu->vmm.s.cR0HaltsToRing3   = 0;
    730725    }
    731726    else
    732727    {
    733         pVCpu->vmm.s.cR0HaltsSucceeded = 0;
    734         pVCpu->vmm.s.cR0HaltsToRing3   = 2;
     728        pGVCpu->vmm.s.cR0HaltsSucceeded = 0;
     729        pGVCpu->vmm.s.cR0HaltsToRing3   = 2;
    735730    }
    736731
     
    750745     * Check preconditions.
    751746     */
    752     unsigned const             uMWait              = EMMonitorWaitIsActive(pVCpu);
    753     CPUMINTERRUPTIBILITY const enmInterruptibility = CPUMGetGuestInterruptibility(pVCpu);
    754     if (   pVCpu->vmm.s.fMayHaltInRing0
    755         && !TRPMHasTrap(pVCpu)
     747    unsigned const             uMWait              = EMMonitorWaitIsActive(pGVCpu);
     748    CPUMINTERRUPTIBILITY const enmInterruptibility = CPUMGetGuestInterruptibility(pGVCpu);
     749    if (   pGVCpu->vmm.s.fMayHaltInRing0
     750        && !TRPMHasTrap(pGVCpu)
    756751        && (   enmInterruptibility == CPUMINTERRUPTIBILITY_UNRESTRAINED
    757752            || uMWait > 1))
    758753    {
    759         if (   !VM_FF_IS_ANY_SET(pVM, fVmFFs)
    760             && !VMCPU_FF_IS_ANY_SET(pVCpu, fCpuFFs))
     754        if (   !VM_FF_IS_ANY_SET(pGVM, fVmFFs)
     755            && !VMCPU_FF_IS_ANY_SET(pGVCpu, fCpuFFs))
    761756        {
    762757            /*
    763758             * Interrupts pending already?
    764759             */
    765             if (VMCPU_FF_TEST_AND_CLEAR(pVCpu, VMCPU_FF_UPDATE_APIC))
    766                 APICUpdatePendingInterrupts(pVCpu);
     760            if (VMCPU_FF_TEST_AND_CLEAR(pGVCpu, VMCPU_FF_UPDATE_APIC))
     761                APICUpdatePendingInterrupts(pGVCpu);
    767762
    768763            /*
     
    772767                                    | VMCPU_FF_INTERRUPT_NMI  | VMCPU_FF_INTERRUPT_SMI | VMCPU_FF_UNHALT;
    773768
    774             if (VMCPU_FF_IS_ANY_SET(pVCpu, fIntMask))
    775                 return vmmR0DoHaltInterrupt(pVCpu, uMWait, enmInterruptibility);
     769            if (VMCPU_FF_IS_ANY_SET(pGVCpu, fIntMask))
     770                return vmmR0DoHaltInterrupt(pGVCpu, uMWait, enmInterruptibility);
    776771            ASMNopPause();
    777772
     
    780775             */
    781776            uint64_t u64Delta;
    782             uint64_t u64GipTime = TMTimerPollGIP(pVM, pVCpu, &u64Delta);
    783 
    784             if (   !VM_FF_IS_ANY_SET(pVM, fVmFFs)
    785                 && !VMCPU_FF_IS_ANY_SET(pVCpu, fCpuFFs))
     777            uint64_t u64GipTime = TMTimerPollGIP(pGVM, pGVCpu, &u64Delta);
     778
     779            if (   !VM_FF_IS_ANY_SET(pGVM, fVmFFs)
     780                && !VMCPU_FF_IS_ANY_SET(pGVCpu, fCpuFFs))
    786781            {
    787                 if (VMCPU_FF_TEST_AND_CLEAR(pVCpu, VMCPU_FF_UPDATE_APIC))
    788                     APICUpdatePendingInterrupts(pVCpu);
    789 
    790                 if (VMCPU_FF_IS_ANY_SET(pVCpu, fIntMask))
    791                     return vmmR0DoHaltInterrupt(pVCpu, uMWait, enmInterruptibility);
     782                if (VMCPU_FF_TEST_AND_CLEAR(pGVCpu, VMCPU_FF_UPDATE_APIC))
     783                    APICUpdatePendingInterrupts(pGVCpu);
     784
     785                if (VMCPU_FF_IS_ANY_SET(pGVCpu, fIntMask))
     786                    return vmmR0DoHaltInterrupt(pGVCpu, uMWait, enmInterruptibility);
    792787
    793788                /*
    794789                 * Wait if there is enough time to the next timer event.
    795790                 */
    796                 if (u64Delta >= pVCpu->vmm.s.cNsSpinBlockThreshold)
     791                if (u64Delta >= pGVCpu->vmm.s.cNsSpinBlockThreshold)
    797792                {
    798793                    /* If there are few other CPU cores around, we will procrastinate a
     
    801796                       dynamically adjust the spin count according to its usfulness or
    802797                       something... */
    803                     if (   pVCpu->vmm.s.cR0HaltsSucceeded > pVCpu->vmm.s.cR0HaltsToRing3
     798                    if (   pGVCpu->vmm.s.cR0HaltsSucceeded > pGVCpu->vmm.s.cR0HaltsToRing3
    804799                        && RTMpGetOnlineCount() >= 4)
    805800                    {
     
    810805                        {
    811806                            ASMNopPause();
    812                             if (VMCPU_FF_TEST_AND_CLEAR(pVCpu, VMCPU_FF_UPDATE_APIC))
    813                                 APICUpdatePendingInterrupts(pVCpu);
     807                            if (VMCPU_FF_TEST_AND_CLEAR(pGVCpu, VMCPU_FF_UPDATE_APIC))
     808                                APICUpdatePendingInterrupts(pGVCpu);
    814809                            ASMNopPause();
    815                             if (VM_FF_IS_ANY_SET(pVM, fVmFFs))
     810                            if (VM_FF_IS_ANY_SET(pGVM, fVmFFs))
    816811                            {
    817                                 STAM_REL_COUNTER_INC(&pVCpu->vmm.s.StatR0HaltToR3FromSpin);
     812                                STAM_REL_COUNTER_INC(&pGVCpu->vmm.s.StatR0HaltToR3FromSpin);
    818813                                return VINF_EM_HALT;
    819814                            }
    820815                            ASMNopPause();
    821                             if (VMCPU_FF_IS_ANY_SET(pVCpu, fCpuFFs))
     816                            if (VMCPU_FF_IS_ANY_SET(pGVCpu, fCpuFFs))
    822817                            {
    823                                 STAM_REL_COUNTER_INC(&pVCpu->vmm.s.StatR0HaltToR3FromSpin);
     818                                STAM_REL_COUNTER_INC(&pGVCpu->vmm.s.StatR0HaltToR3FromSpin);
    824819                                return VINF_EM_HALT;
    825820                            }
    826821                            ASMNopPause();
    827                             if (VMCPU_FF_IS_ANY_SET(pVCpu, fIntMask))
     822                            if (VMCPU_FF_IS_ANY_SET(pGVCpu, fIntMask))
    828823                            {
    829                                 STAM_REL_COUNTER_INC(&pVCpu->vmm.s.StatR0HaltExecFromSpin);
    830                                 return vmmR0DoHaltInterrupt(pVCpu, uMWait, enmInterruptibility);
     824                                STAM_REL_COUNTER_INC(&pGVCpu->vmm.s.StatR0HaltExecFromSpin);
     825                                return vmmR0DoHaltInterrupt(pGVCpu, uMWait, enmInterruptibility);
    831826                            }
    832827                            ASMNopPause();
     
    836831                    /* Block.  We have to set the state to VMCPUSTATE_STARTED_HALTED here so ring-3
    837832                       knows when to notify us (cannot access VMINTUSERPERVMCPU::fWait from here). */
    838                     VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED_HALTED, VMCPUSTATE_STARTED);
     833                    VMCPU_CMPXCHG_STATE(pGVCpu, VMCPUSTATE_STARTED_HALTED, VMCPUSTATE_STARTED);
    839834                    uint64_t const u64StartSchedHalt   = RTTimeNanoTS();
    840                     int rc = GVMMR0SchedHalt(pGVM, pVM, pGVCpu, u64GipTime);
     835                    int rc = GVMMR0SchedHalt(pGVM, pGVCpu, u64GipTime);
    841836                    uint64_t const u64EndSchedHalt     = RTTimeNanoTS();
    842837                    uint64_t const cNsElapsedSchedHalt = u64EndSchedHalt - u64StartSchedHalt;
    843                     VMCPU_CMPXCHG_STATE(pVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_HALTED);
    844                     STAM_REL_PROFILE_ADD_PERIOD(&pVCpu->vmm.s.StatR0HaltBlock, cNsElapsedSchedHalt);
     838                    VMCPU_CMPXCHG_STATE(pGVCpu, VMCPUSTATE_STARTED, VMCPUSTATE_STARTED_HALTED);
     839                    STAM_REL_PROFILE_ADD_PERIOD(&pGVCpu->vmm.s.StatR0HaltBlock, cNsElapsedSchedHalt);
    845840                    if (   rc == VINF_SUCCESS
    846841                        || rc == VERR_INTERRUPTED)
     
    850845                        int64_t const cNsOverslept = u64EndSchedHalt - u64GipTime;
    851846                        if (cNsOverslept > 50000)
    852                             STAM_REL_PROFILE_ADD_PERIOD(&pVCpu->vmm.s.StatR0HaltBlockOverslept, cNsOverslept);
     847                            STAM_REL_PROFILE_ADD_PERIOD(&pGVCpu->vmm.s.StatR0HaltBlockOverslept, cNsOverslept);
    853848                        else if (cNsOverslept < -50000)
    854                             STAM_REL_PROFILE_ADD_PERIOD(&pVCpu->vmm.s.StatR0HaltBlockInsomnia,  cNsElapsedSchedHalt);
     849                            STAM_REL_PROFILE_ADD_PERIOD(&pGVCpu->vmm.s.StatR0HaltBlockInsomnia,  cNsElapsedSchedHalt);
    855850                        else
    856                             STAM_REL_PROFILE_ADD_PERIOD(&pVCpu->vmm.s.StatR0HaltBlockOnTime,    cNsElapsedSchedHalt);
     851                            STAM_REL_PROFILE_ADD_PERIOD(&pGVCpu->vmm.s.StatR0HaltBlockOnTime,    cNsElapsedSchedHalt);
    857852
    858853                        /*
    859854                         * Recheck whether we can resume execution or have to go to ring-3.
    860855                         */
    861                         if (   !VM_FF_IS_ANY_SET(pVM, fVmFFs)
    862                             && !VMCPU_FF_IS_ANY_SET(pVCpu, fCpuFFs))
     856                        if (   !VM_FF_IS_ANY_SET(pGVM, fVmFFs)
     857                            && !VMCPU_FF_IS_ANY_SET(pGVCpu, fCpuFFs))
    863858                        {
    864                             if (VMCPU_FF_TEST_AND_CLEAR(pVCpu, VMCPU_FF_UPDATE_APIC))
    865                                 APICUpdatePendingInterrupts(pVCpu);
    866                             if (VMCPU_FF_IS_ANY_SET(pVCpu, fIntMask))
     859                            if (VMCPU_FF_TEST_AND_CLEAR(pGVCpu, VMCPU_FF_UPDATE_APIC))
     860                                APICUpdatePendingInterrupts(pGVCpu);
     861                            if (VMCPU_FF_IS_ANY_SET(pGVCpu, fIntMask))
    867862                            {
    868                                 STAM_REL_COUNTER_INC(&pVCpu->vmm.s.StatR0HaltExecFromBlock);
    869                                 return vmmR0DoHaltInterrupt(pVCpu, uMWait, enmInterruptibility);
     863                                STAM_REL_COUNTER_INC(&pGVCpu->vmm.s.StatR0HaltExecFromBlock);
     864                                return vmmR0DoHaltInterrupt(pGVCpu, uMWait, enmInterruptibility);
    870865                            }
    871866                        }
     
    10681063/**
    10691064 * Record return code statistics
    1070  * @param   pVM         The cross context VM structure.
     1065 * @param   pGVM        The cross context VM structure.
    10711066 * @param   pVCpu       The cross context virtual CPU structure.
    10721067 * @param   rc          The status code.
     
    12731268 *
    12741269 * @param   pGVM            The global (ring-0) VM structure.
    1275  * @param   pVM             The cross context VM structure.
    1276  *                          The return code is stored in pVM->vmm.s.iLastGZRc.
     1270 * @param   pVMIgnored      The cross context VM structure. The return code is
     1271 *                          stored in pVM->vmm.s.iLastGZRc.
    12771272 * @param   idCpu           The Virtual CPU ID of the calling EMT.
    12781273 * @param   enmOperation    Which operation to execute.
    12791274 * @remarks Assume called with interrupts _enabled_.
    12801275 */
    1281 VMMR0DECL(void) VMMR0EntryFast(PGVM pGVM, PVMCC pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation)
    1282 {
     1276VMMR0DECL(void) VMMR0EntryFast(PGVM pGVM, PVMCC pVMIgnored, VMCPUID idCpu, VMMR0OPERATION enmOperation)
     1277{
     1278    RT_NOREF(pVMIgnored);
     1279
    12831280    /*
    12841281     * Validation.
    12851282     */
    12861283    if (   idCpu < pGVM->cCpus
    1287         && pGVM->cCpus == pVM->cCpus)
     1284        && pGVM->cCpus == pGVM->cCpusUnsafe)
    12881285    { /*likely*/ }
    12891286    else
    12901287    {
    1291         SUPR0Printf("VMMR0EntryFast: Bad idCpu=%#x cCpus=%#x/%#x\n", idCpu, pGVM->cCpus, pVM->cCpus);
     1288        SUPR0Printf("VMMR0EntryFast: Bad idCpu=%#x cCpus=%#x cCpusUnsafe=%#x\n", idCpu, pGVM->cCpus, pGVM->cCpusUnsafe);
    12921289        return;
    12931290    }
    12941291
    1295     PGVMCPU   pGVCpu = &pGVM->aCpus[idCpu];
    1296     PVMCPUCC  pVCpu  = pGVCpu;
     1292    PGVMCPU pGVCpu = &pGVM->aCpus[idCpu];
    12971293    RTNATIVETHREAD const hNativeThread = RTThreadNativeSelf();
    1298     if (RT_LIKELY(   pGVCpu->hEMT           == hNativeThread
    1299                   && pVCpu->hNativeThreadR0 == hNativeThread))
     1294    if (RT_LIKELY(   pGVCpu->hEMT            == hNativeThread
     1295                  && pGVCpu->hNativeThreadR0 == hNativeThread))
    13001296    { /* likely */ }
    13011297    else
    13021298    {
    1303         SUPR0Printf("VMMR0EntryFast: Bad thread idCpu=%#x hNativeSelf=%p pGVCpu->hEmt=%p pVCpu->hNativeThreadR0=%p\n",
    1304                     idCpu, hNativeThread, pGVCpu->hEMT, pVCpu->hNativeThreadR0);
     1299        SUPR0Printf("VMMR0EntryFast: Bad thread idCpu=%#x hNativeSelf=%p pGVCpu->hEmt=%p pGVCpu->hNativeThreadR0=%p\n",
     1300                    idCpu, hNativeThread, pGVCpu->hEMT, pGVCpu->hNativeThreadR0);
    13051301        return;
    13061302    }
     
    13101306     */
    13111307    VMM_CHECK_SMAP_SETUP();
    1312     VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1308    VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    13131309
    13141310    /*
     
    13271323                 * Disable preemption.
    13281324                 */
    1329                 Assert(!vmmR0ThreadCtxHookIsEnabled(pVCpu));
     1325                Assert(!vmmR0ThreadCtxHookIsEnabled(pGVCpu));
    13301326                RTTHREADPREEMPTSTATE PreemptState = RTTHREADPREEMPTSTATE_INITIALIZER;
    13311327                RTThreadPreemptDisable(&PreemptState);
     
    13401336                              && SUPIsTscDeltaAvailableForCpuSetIndex(iHostCpuSet)))
    13411337                {
    1342                     pVCpu->iHostCpuSet = iHostCpuSet;
    1343                     ASMAtomicWriteU32(&pVCpu->idHostCpu, idHostCpu);
     1338                    pGVCpu->iHostCpuSet = iHostCpuSet;
     1339                    ASMAtomicWriteU32(&pGVCpu->idHostCpu, idHostCpu);
    13441340
    13451341                    /*
    13461342                     * Update the periodic preemption timer if it's active.
    13471343                     */
    1348                     if (pVM->vmm.s.fUsePeriodicPreemptionTimers)
    1349                         GVMMR0SchedUpdatePeriodicPreemptionTimer(pVM, pVCpu->idHostCpu, TMCalcHostTimerFrequency(pVM, pVCpu));
    1350                     VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1344                    if (pGVM->vmm.s.fUsePeriodicPreemptionTimers)
     1345                        GVMMR0SchedUpdatePeriodicPreemptionTimer(pGVM, pGVCpu->idHostCpu, TMCalcHostTimerFrequency(pGVM, pGVCpu));
     1346                    VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    13511347
    13521348#ifdef VMM_R0_TOUCH_FPU
     
    13651361                         * Enable the context switching hook.
    13661362                         */
    1367                         if (pVCpu->vmm.s.hCtxHook != NIL_RTTHREADCTXHOOK)
     1363                        if (pGVCpu->vmm.s.hCtxHook != NIL_RTTHREADCTXHOOK)
    13681364                        {
    1369                             Assert(!RTThreadCtxHookIsEnabled(pVCpu->vmm.s.hCtxHook));
    1370                             int rc2 = RTThreadCtxHookEnable(pVCpu->vmm.s.hCtxHook); AssertRC(rc2);
     1365                            Assert(!RTThreadCtxHookIsEnabled(pGVCpu->vmm.s.hCtxHook));
     1366                            int rc2 = RTThreadCtxHookEnable(pGVCpu->vmm.s.hCtxHook); AssertRC(rc2);
    13711367                        }
    13721368
     
    13741370                         * Enter HM context.
    13751371                         */
    1376                         rc = HMR0Enter(pVCpu);
     1372                        rc = HMR0Enter(pGVCpu);
    13771373                        if (RT_SUCCESS(rc))
    13781374                        {
    1379                             VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED_HM);
     1375                            VMCPU_SET_STATE(pGVCpu, VMCPUSTATE_STARTED_HM);
    13801376
    13811377                            /*
     
    13831379                             * we're in HM context.
    13841380                             */
    1385                             if (vmmR0ThreadCtxHookIsEnabled(pVCpu))
     1381                            if (vmmR0ThreadCtxHookIsEnabled(pGVCpu))
    13861382                            {
    13871383                                fPreemptRestored = true;
     
    13921388                             * Setup the longjmp machinery and execute guest code (calls HMR0RunGuestCode).
    13931389                             */
    1394                             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    1395                             rc = vmmR0CallRing3SetJmp(&pVCpu->vmm.s.CallRing3JmpBufR0, HMR0RunGuestCode, pVM, pVCpu);
    1396                             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1390                            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
     1391                            rc = vmmR0CallRing3SetJmp(&pGVCpu->vmm.s.CallRing3JmpBufR0, HMR0RunGuestCode, pGVM, pGVCpu);
     1392                            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    13971393
    13981394                            /*
     
    14001396                             * assertions are going to panic the host since we're outside the setjmp/longjmp zone.
    14011397                             */
    1402                             if (RT_UNLIKELY(   VMCPU_GET_STATE(pVCpu) != VMCPUSTATE_STARTED_HM
     1398                            if (RT_UNLIKELY(   VMCPU_GET_STATE(pGVCpu) != VMCPUSTATE_STARTED_HM
    14031399                                            && RT_SUCCESS_NP(rc)  && rc !=  VINF_VMM_CALL_HOST ))
    14041400                            {
    1405                                 pVM->vmm.s.szRing0AssertMsg1[0] = '\0';
    1406                                 RTStrPrintf(pVM->vmm.s.szRing0AssertMsg2, sizeof(pVM->vmm.s.szRing0AssertMsg2),
    1407                                             "Got VMCPU state %d expected %d.\n", VMCPU_GET_STATE(pVCpu), VMCPUSTATE_STARTED_HM);
     1401                                pGVM->vmm.s.szRing0AssertMsg1[0] = '\0';
     1402                                RTStrPrintf(pGVM->vmm.s.szRing0AssertMsg2, sizeof(pGVM->vmm.s.szRing0AssertMsg2),
     1403                                            "Got VMCPU state %d expected %d.\n", VMCPU_GET_STATE(pGVCpu), VMCPUSTATE_STARTED_HM);
    14081404                                rc = VERR_VMM_WRONG_HM_VMCPU_STATE;
    14091405                            }
    14101406                            /** @todo Get rid of this. HM shouldn't disable the context hook. */
    1411                             else if (RT_UNLIKELY(vmmR0ThreadCtxHookIsEnabled(pVCpu)))
     1407                            else if (RT_UNLIKELY(vmmR0ThreadCtxHookIsEnabled(pGVCpu)))
    14121408                            {
    1413                                 pVM->vmm.s.szRing0AssertMsg1[0] = '\0';
    1414                                 RTStrPrintf(pVM->vmm.s.szRing0AssertMsg2, sizeof(pVM->vmm.s.szRing0AssertMsg2),
    1415                                             "Thread-context hooks still enabled! VCPU=%p Id=%u rc=%d.\n", pVCpu, pVCpu->idCpu, rc);
     1409                                pGVM->vmm.s.szRing0AssertMsg1[0] = '\0';
     1410                                RTStrPrintf(pGVM->vmm.s.szRing0AssertMsg2, sizeof(pGVM->vmm.s.szRing0AssertMsg2),
     1411                                            "Thread-context hooks still enabled! VCPU=%p Id=%u rc=%d.\n", pGVCpu, pGVCpu->idCpu, rc);
    14161412                                rc = VERR_INVALID_STATE;
    14171413                            }
    14181414
    1419                             VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED);
     1415                            VMCPU_SET_STATE(pGVCpu, VMCPUSTATE_STARTED);
    14201416                        }
    1421                         STAM_COUNTER_INC(&pVM->vmm.s.StatRunGC);
     1417                        STAM_COUNTER_INC(&pGVM->vmm.s.StatRunGC);
    14221418
    14231419                        /*
     
    14251421                         * hook / restore preemption.
    14261422                         */
    1427                         pVCpu->iHostCpuSet = UINT32_MAX;
    1428                         ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
     1423                        pGVCpu->iHostCpuSet = UINT32_MAX;
     1424                        ASMAtomicWriteU32(&pGVCpu->idHostCpu, NIL_RTCPUID);
    14291425
    14301426                        /*
     
    14351431                         *       when we get here, but the IPRT API handles that.
    14361432                         */
    1437                         if (pVCpu->vmm.s.hCtxHook != NIL_RTTHREADCTXHOOK)
     1433                        if (pGVCpu->vmm.s.hCtxHook != NIL_RTTHREADCTXHOOK)
    14381434                        {
    1439                             ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
    1440                             RTThreadCtxHookDisable(pVCpu->vmm.s.hCtxHook);
     1435                            ASMAtomicWriteU32(&pGVCpu->idHostCpu, NIL_RTCPUID);
     1436                            RTThreadCtxHookDisable(pGVCpu->vmm.s.hCtxHook);
    14411437                        }
    14421438                    }
     
    14471443                    {
    14481444                        rc = VINF_EM_RAW_INTERRUPT;
    1449                         pVCpu->iHostCpuSet = UINT32_MAX;
    1450                         ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
     1445                        pGVCpu->iHostCpuSet = UINT32_MAX;
     1446                        ASMAtomicWriteU32(&pGVCpu->idHostCpu, NIL_RTCPUID);
    14511447                    }
    14521448
     
    14561452                        RTThreadPreemptRestore(&PreemptState);
    14571453
    1458                     pVCpu->vmm.s.iLastGZRc = rc;
     1454                    pGVCpu->vmm.s.iLastGZRc = rc;
    14591455
    14601456                    /* Fire dtrace probe and collect statistics. */
    1461                     VBOXVMM_R0_VMM_RETURN_TO_RING3_HM(pVCpu, CPUMQueryGuestCtxPtr(pVCpu), rc);
     1457                    VBOXVMM_R0_VMM_RETURN_TO_RING3_HM(pGVCpu, CPUMQueryGuestCtxPtr(pGVCpu), rc);
    14621458#ifdef VBOX_WITH_STATISTICS
    1463                     vmmR0RecordRC(pVM, pVCpu, rc);
     1459                    vmmR0RecordRC(pGVM, pGVCpu, rc);
    14641460#endif
    14651461#if 1
     
    14711467                    else
    14721468                    {
    1473                         pVCpu->vmm.s.iLastGZRc = rc = vmmR0DoHalt(pGVM, pVM, pGVCpu, pVCpu);
     1469                        pGVCpu->vmm.s.iLastGZRc = rc = vmmR0DoHalt(pGVM, pGVCpu);
    14741470                        if (rc == VINF_SUCCESS)
    14751471                        {
    1476                             pVCpu->vmm.s.cR0HaltsSucceeded++;
     1472                            pGVCpu->vmm.s.cR0HaltsSucceeded++;
    14771473                            continue;
    14781474                        }
    1479                         pVCpu->vmm.s.cR0HaltsToRing3++;
     1475                        pGVCpu->vmm.s.cR0HaltsToRing3++;
    14801476                    }
    14811477#endif
     
    14861482                else
    14871483                {
    1488                     pVCpu->iHostCpuSet = UINT32_MAX;
    1489                     ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
     1484                    pGVCpu->iHostCpuSet = UINT32_MAX;
     1485                    ASMAtomicWriteU32(&pGVCpu->idHostCpu, NIL_RTCPUID);
    14901486                    RTThreadPreemptRestore(&PreemptState);
    14911487                    if (iHostCpuSet < RTCPUSET_MAX_CPUS)
    14921488                    {
    1493                         int rc = SUPR0TscDeltaMeasureBySetIndex(pVM->pSession, iHostCpuSet, 0 /*fFlags*/,
     1489                        int rc = SUPR0TscDeltaMeasureBySetIndex(pGVM->pSession, iHostCpuSet, 0 /*fFlags*/,
    14941490                                                                2 /*cMsWaitRetry*/, 5*RT_MS_1SEC /*cMsWaitThread*/,
    14951491                                                                0 /*default cTries*/);
    14961492                        if (RT_SUCCESS(rc) || rc == VERR_CPU_OFFLINE)
    1497                             pVCpu->vmm.s.iLastGZRc = VINF_EM_RAW_TO_R3;
     1493                            pGVCpu->vmm.s.iLastGZRc = VINF_EM_RAW_TO_R3;
    14981494                        else
    1499                             pVCpu->vmm.s.iLastGZRc = rc;
     1495                            pGVCpu->vmm.s.iLastGZRc = rc;
    15001496                    }
    15011497                    else
    1502                         pVCpu->vmm.s.iLastGZRc = VERR_INVALID_CPU_INDEX;
     1498                        pGVCpu->vmm.s.iLastGZRc = VERR_INVALID_CPU_INDEX;
    15031499                }
    15041500                break;
     
    15151511             * Setup the longjmp machinery and execute guest code (calls NEMR0RunGuestCode).
    15161512             */
    1517             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    1518             int rc = vmmR0CallRing3SetJmp2(&pVCpu->vmm.s.CallRing3JmpBufR0, NEMR0RunGuestCode, pGVM, idCpu);
    1519             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    1520             STAM_COUNTER_INC(&pVM->vmm.s.StatRunGC);
    1521 
    1522             pVCpu->vmm.s.iLastGZRc = rc;
     1513            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
     1514#  ifdef VBOXSTRICTRC_STRICT_ENABLED
     1515            int rc = vmmR0CallRing3SetJmp2(&pGVCpu->vmm.s.CallRing3JmpBufR0, (PFNVMMR0SETJMP2)NEMR0RunGuestCode, pGVM, idCpu);
     1516#  else
     1517            int rc = vmmR0CallRing3SetJmp2(&pGVCpu->vmm.s.CallRing3JmpBufR0, NEMR0RunGuestCode, pGVM, idCpu);
     1518#  endif
     1519            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
     1520            STAM_COUNTER_INC(&pGVM->vmm.s.StatRunGC);
     1521
     1522            pGVCpu->vmm.s.iLastGZRc = rc;
    15231523
    15241524            /*
    15251525             * Fire dtrace probe and collect statistics.
    15261526             */
    1527             VBOXVMM_R0_VMM_RETURN_TO_RING3_NEM(pVCpu, CPUMQueryGuestCtxPtr(pVCpu), rc);
     1527            VBOXVMM_R0_VMM_RETURN_TO_RING3_NEM(pGVCpu, CPUMQueryGuestCtxPtr(pGVCpu), rc);
    15281528#  ifdef VBOX_WITH_STATISTICS
    1529             vmmR0RecordRC(pVM, pVCpu, rc);
     1529            vmmR0RecordRC(pGVM, pGVCpu, rc);
    15301530#  endif
    15311531            break;
     
    15381538         */
    15391539        case VMMR0_DO_NOP:
    1540             pVCpu->vmm.s.iLastGZRc = VINF_SUCCESS;
     1540            pGVCpu->vmm.s.iLastGZRc = VINF_SUCCESS;
    15411541            break;
    15421542
     
    15461546        default:
    15471547            AssertMsgFailed(("%#x\n", enmOperation));
    1548             pVCpu->vmm.s.iLastGZRc = VERR_NOT_SUPPORTED;
    1549             break;
    1550     }
    1551     VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1548            pGVCpu->vmm.s.iLastGZRc = VERR_NOT_SUPPORTED;
     1549            break;
     1550    }
     1551    VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    15521552}
    15531553
     
    15571557 *
    15581558 * @returns true / false accordingly.
    1559  * @param   pVM             The cross context VM structure.
     1559 * @param   pGVM            The global (ring-0) VM structure.
    15601560 * @param   pClaimedSession The session claim to validate.
    15611561 * @param   pSession        The session argument.
    15621562 */
    1563 DECLINLINE(bool) vmmR0IsValidSession(PVMCC pVM, PSUPDRVSESSION pClaimedSession, PSUPDRVSESSION pSession)
     1563DECLINLINE(bool) vmmR0IsValidSession(PGVM pGVM, PSUPDRVSESSION pClaimedSession, PSUPDRVSESSION pSession)
    15641564{
    15651565    /* This must be set! */
     
    15681568
    15691569    /* Only one out of the two. */
    1570     if (pVM && pClaimedSession)
     1570    if (pGVM && pClaimedSession)
    15711571        return false;
    1572     if (pVM)
    1573         pClaimedSession = pVM->pSession;
     1572    if (pGVM)
     1573        pClaimedSession = pGVM->pSession;
    15741574    return pClaimedSession == pSession;
    15751575}
     
    15821582 * @returns VBox status code.
    15831583 * @param   pGVM            The global (ring-0) VM structure.
    1584  * @param   pVM             The cross context VM structure.
    15851584 * @param   idCpu           Virtual CPU ID argument. Must be NIL_VMCPUID if pVM
    15861585 *                          is NIL_RTR0PTR, and may be NIL_VMCPUID if it isn't
     
    15931592 * @remarks Assume called with interrupts _enabled_.
    15941593 */
    1595 static int vmmR0EntryExWorker(PGVM pGVM, PVMCC pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation,
     1594static int vmmR0EntryExWorker(PGVM pGVM, VMCPUID idCpu, VMMR0OPERATION enmOperation,
    15961595                              PSUPVMMR0REQHDR pReqHdr, uint64_t u64Arg, PSUPDRVSESSION pSession)
    15971596{
    15981597    /*
    1599      * Validate pGVM, pVM and idCpu for consistency and validity.
    1600      */
    1601     if (   pGVM != NULL
    1602         || pVM  != NULL)
    1603     {
    1604         if (RT_LIKELY(   RT_VALID_PTR(pGVM)
    1605                       && RT_VALID_PTR(pVM)
    1606                       && ((uintptr_t)pVM & PAGE_OFFSET_MASK) == 0))
     1598     * Validate pGVM and idCpu for consistency and validity.
     1599     */
     1600    if (pGVM != NULL)
     1601    {
     1602        if (RT_LIKELY(((uintptr_t)pGVM & PAGE_OFFSET_MASK) == 0))
    16071603        { /* likely */ }
    16081604        else
    16091605        {
    1610             SUPR0Printf("vmmR0EntryExWorker: Invalid pGVM=%p and/or pVM=%p! (op=%d)\n", pGVM, pVM, enmOperation);
     1606            SUPR0Printf("vmmR0EntryExWorker: Invalid pGVM=%p! (op=%d)\n", pGVM, enmOperation);
    16111607            return VERR_INVALID_POINTER;
    1612         }
    1613 
    1614         if (RT_LIKELY(pGVM == pVM))
    1615         { /* likely */ }
    1616         else
    1617         {
    1618             SUPR0Printf("vmmR0EntryExWorker: pVM mismatch: got %p, pGVM/pVM=%p\n", pVM, pGVM);
    1619             return VERR_INVALID_PARAMETER;
    16201608        }
    16211609
     
    16281616        }
    16291617
    1630         if (RT_LIKELY(   pVM->enmVMState >= VMSTATE_CREATING
    1631                       && pVM->enmVMState <= VMSTATE_TERMINATED
    1632                       && pVM->cCpus      == pGVM->cCpus
    1633                       && pVM->pSession   == pSession
    1634                       && pVM->pSelf      == pVM))
     1618        if (RT_LIKELY(   pGVM->enmVMState >= VMSTATE_CREATING
     1619                      && pGVM->enmVMState <= VMSTATE_TERMINATED
     1620                      && pGVM->pSession   == pSession
     1621                      && pGVM->pSelf      == pGVM))
    16351622        { /* likely */ }
    16361623        else
    16371624        {
    1638             SUPR0Printf("vmmR0EntryExWorker: Invalid pVM=%p:{.enmVMState=%d, .cCpus=%#x(==%#x), .pSession=%p(==%p), .pSelf=%p(==%p)}! (op=%d)\n",
    1639                         pVM, pVM->enmVMState, pVM->cCpus, pGVM->cCpus, pVM->pSession, pSession, pVM->pSelf, pVM, enmOperation);
     1625            SUPR0Printf("vmmR0EntryExWorker: Invalid pGVM=%p:{.enmVMState=%d, .cCpus=%#x, .pSession=%p(==%p), .pSelf=%p(==%p)}! (op=%d)\n",
     1626                        pGVM, pGVM->enmVMState, pGVM->cCpus, pGVM->pSession, pSession, pGVM->pSelf, pGVM, enmOperation);
    16401627            return VERR_INVALID_POINTER;
    16411628        }
     
    16651652         */
    16661653        case VMMR0_DO_GVMM_CREATE_VM:
    1667             if (pGVM == NULL && pVM == NULL && u64Arg == 0 && idCpu == NIL_VMCPUID)
     1654            if (pGVM == NULL && u64Arg == 0 && idCpu == NIL_VMCPUID)
    16681655                rc = GVMMR0CreateVMReq((PGVMMCREATEVMREQ)pReqHdr, pSession);
    16691656            else
     
    16741661        case VMMR0_DO_GVMM_DESTROY_VM:
    16751662            if (pReqHdr == NULL && u64Arg == 0)
    1676                 rc = GVMMR0DestroyVM(pGVM, pVM);
     1663                rc = GVMMR0DestroyVM(pGVM);
    16771664            else
    16781665                rc = VERR_INVALID_PARAMETER;
     
    16811668
    16821669        case VMMR0_DO_GVMM_REGISTER_VMCPU:
    1683             if (pGVM != NULL && pVM != NULL)
    1684                 rc = GVMMR0RegisterVCpu(pGVM, pVM, idCpu);
     1670            if (pGVM != NULL)
     1671                rc = GVMMR0RegisterVCpu(pGVM, idCpu);
    16851672            else
    16861673                rc = VERR_INVALID_PARAMETER;
    1687             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1674            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    16881675            break;
    16891676
    16901677        case VMMR0_DO_GVMM_DEREGISTER_VMCPU:
    1691             if (pGVM != NULL && pVM != NULL)
    1692                 rc = GVMMR0DeregisterVCpu(pGVM, pVM, idCpu);
     1678            if (pGVM != NULL)
     1679                rc = GVMMR0DeregisterVCpu(pGVM, idCpu);
    16931680            else
    16941681                rc = VERR_INVALID_PARAMETER;
    1695             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1682            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    16961683            break;
    16971684
     
    16991686            if (pReqHdr)
    17001687                return VERR_INVALID_PARAMETER;
    1701             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    1702             rc = GVMMR0SchedHaltReq(pGVM, pVM, idCpu, u64Arg);
    1703             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1688            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
     1689            rc = GVMMR0SchedHaltReq(pGVM, idCpu, u64Arg);
     1690            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17041691            break;
    17051692
     
    17071694            if (pReqHdr || u64Arg)
    17081695                return VERR_INVALID_PARAMETER;
    1709             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    1710             rc = GVMMR0SchedWakeUp(pGVM, pVM, idCpu);
    1711             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1696            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
     1697            rc = GVMMR0SchedWakeUp(pGVM, idCpu);
     1698            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17121699            break;
    17131700
     
    17151702            if (pReqHdr || u64Arg)
    17161703                return VERR_INVALID_PARAMETER;
    1717             rc = GVMMR0SchedPoke(pGVM, pVM, idCpu);
    1718             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1704            rc = GVMMR0SchedPoke(pGVM, idCpu);
     1705            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17191706            break;
    17201707
     
    17221709            if (u64Arg)
    17231710                return VERR_INVALID_PARAMETER;
    1724             rc = GVMMR0SchedWakeUpAndPokeCpusReq(pGVM, pVM, (PGVMMSCHEDWAKEUPANDPOKECPUSREQ)pReqHdr);
    1725             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1711            rc = GVMMR0SchedWakeUpAndPokeCpusReq(pGVM, (PGVMMSCHEDWAKEUPANDPOKECPUSREQ)pReqHdr);
     1712            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17261713            break;
    17271714
     
    17291716            if (pReqHdr || u64Arg > 1)
    17301717                return VERR_INVALID_PARAMETER;
    1731             rc = GVMMR0SchedPoll(pGVM, pVM, idCpu, !!u64Arg);
    1732             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1718            rc = GVMMR0SchedPoll(pGVM, idCpu, !!u64Arg);
     1719            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17331720            break;
    17341721
     
    17361723            if (u64Arg)
    17371724                return VERR_INVALID_PARAMETER;
    1738             rc = GVMMR0QueryStatisticsReq(pGVM, pVM, (PGVMMQUERYSTATISTICSSREQ)pReqHdr, pSession);
    1739             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1725            rc = GVMMR0QueryStatisticsReq(pGVM, (PGVMMQUERYSTATISTICSSREQ)pReqHdr, pSession);
     1726            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17401727            break;
    17411728
     
    17431730            if (u64Arg)
    17441731                return VERR_INVALID_PARAMETER;
    1745             rc = GVMMR0ResetStatisticsReq(pGVM, pVM, (PGVMMRESETSTATISTICSSREQ)pReqHdr, pSession);
    1746             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1732            rc = GVMMR0ResetStatisticsReq(pGVM, (PGVMMRESETSTATISTICSSREQ)pReqHdr, pSession);
     1733            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17471734            break;
    17481735
     
    17511738         */
    17521739        case VMMR0_DO_VMMR0_INIT:
    1753             rc = vmmR0InitVM(pGVM, pVM, RT_LODWORD(u64Arg), RT_HIDWORD(u64Arg));
    1754             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1740            rc = vmmR0InitVM(pGVM, RT_LODWORD(u64Arg), RT_HIDWORD(u64Arg));
     1741            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17551742            break;
    17561743
     
    17591746         */
    17601747        case VMMR0_DO_VMMR0_INIT_EMT:
    1761             rc = vmmR0InitVMEmt(pGVM, pVM, idCpu);
    1762             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1748            rc = vmmR0InitVMEmt(pGVM, idCpu);
     1749            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17631750            break;
    17641751
     
    17671754         */
    17681755        case VMMR0_DO_VMMR0_TERM:
    1769             rc = VMMR0TermVM(pGVM, pVM, 0 /*idCpu*/);
    1770             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1756            rc = VMMR0TermVM(pGVM, 0 /*idCpu*/);
     1757            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17711758            break;
    17721759
     
    17751762         */
    17761763        case VMMR0_DO_HM_ENABLE:
    1777             rc = HMR0EnableAllCpus(pVM);
    1778             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1764            rc = HMR0EnableAllCpus(pGVM);
     1765            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17791766            break;
    17801767
     
    17831770         */
    17841771        case VMMR0_DO_HM_SETUP_VM:
    1785             rc = HMR0SetupVM(pVM);
    1786             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1772            rc = HMR0SetupVM(pGVM);
     1773            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17871774            break;
    17881775
     
    17931780            if (idCpu == NIL_VMCPUID)
    17941781                return VERR_INVALID_CPU_ID;
    1795             rc = PGMR0PhysAllocateHandyPages(pGVM, pVM, idCpu);
    1796             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1782            rc = PGMR0PhysAllocateHandyPages(pGVM, idCpu);
     1783            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    17971784            break;
    17981785
     
    18001787            if (idCpu == NIL_VMCPUID)
    18011788                return VERR_INVALID_CPU_ID;
    1802             rc = PGMR0PhysFlushHandyPages(pGVM, pVM, idCpu);
    1803             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1789            rc = PGMR0PhysFlushHandyPages(pGVM, idCpu);
     1790            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18041791            break;
    18051792
     
    18071794            if (idCpu == NIL_VMCPUID)
    18081795                return VERR_INVALID_CPU_ID;
    1809             rc = PGMR0PhysAllocateLargeHandyPage(pGVM, pVM, idCpu);
    1810             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1796            rc = PGMR0PhysAllocateLargeHandyPage(pGVM, idCpu);
     1797            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18111798            break;
    18121799
     
    18141801            if (idCpu != 0)
    18151802                return VERR_INVALID_CPU_ID;
    1816             rc = PGMR0PhysSetupIoMmu(pGVM, pVM);
    1817             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1803            rc = PGMR0PhysSetupIoMmu(pGVM);
     1804            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18181805            break;
    18191806
     
    18241811            if (u64Arg)
    18251812                return VERR_INVALID_PARAMETER;
    1826             rc = GMMR0InitialReservationReq(pGVM, pVM, idCpu, (PGMMINITIALRESERVATIONREQ)pReqHdr);
    1827             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1813            rc = GMMR0InitialReservationReq(pGVM, idCpu, (PGMMINITIALRESERVATIONREQ)pReqHdr);
     1814            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18281815            break;
    18291816
     
    18311818            if (u64Arg)
    18321819                return VERR_INVALID_PARAMETER;
    1833             rc = GMMR0UpdateReservationReq(pGVM, pVM, idCpu, (PGMMUPDATERESERVATIONREQ)pReqHdr);
    1834             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1820            rc = GMMR0UpdateReservationReq(pGVM, idCpu, (PGMMUPDATERESERVATIONREQ)pReqHdr);
     1821            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18351822            break;
    18361823
     
    18381825            if (u64Arg)
    18391826                return VERR_INVALID_PARAMETER;
    1840             rc = GMMR0AllocatePagesReq(pGVM, pVM, idCpu, (PGMMALLOCATEPAGESREQ)pReqHdr);
    1841             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1827            rc = GMMR0AllocatePagesReq(pGVM, idCpu, (PGMMALLOCATEPAGESREQ)pReqHdr);
     1828            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18421829            break;
    18431830
     
    18451832            if (u64Arg)
    18461833                return VERR_INVALID_PARAMETER;
    1847             rc = GMMR0FreePagesReq(pGVM, pVM, idCpu, (PGMMFREEPAGESREQ)pReqHdr);
    1848             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1834            rc = GMMR0FreePagesReq(pGVM, idCpu, (PGMMFREEPAGESREQ)pReqHdr);
     1835            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18491836            break;
    18501837
     
    18521839            if (u64Arg)
    18531840                return VERR_INVALID_PARAMETER;
    1854             rc = GMMR0FreeLargePageReq(pGVM, pVM, idCpu, (PGMMFREELARGEPAGEREQ)pReqHdr);
    1855             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1841            rc = GMMR0FreeLargePageReq(pGVM, idCpu, (PGMMFREELARGEPAGEREQ)pReqHdr);
     1842            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18561843            break;
    18571844
     
    18601847                return VERR_INVALID_PARAMETER;
    18611848            rc = GMMR0QueryHypervisorMemoryStatsReq((PGMMMEMSTATSREQ)pReqHdr);
    1862             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1849            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18631850            break;
    18641851
     
    18681855            if (u64Arg)
    18691856                return VERR_INVALID_PARAMETER;
    1870             rc = GMMR0QueryMemoryStatsReq(pGVM, pVM, idCpu, (PGMMMEMSTATSREQ)pReqHdr);
    1871             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1857            rc = GMMR0QueryMemoryStatsReq(pGVM, idCpu, (PGMMMEMSTATSREQ)pReqHdr);
     1858            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18721859            break;
    18731860
     
    18751862            if (u64Arg)
    18761863                return VERR_INVALID_PARAMETER;
    1877             rc = GMMR0BalloonedPagesReq(pGVM, pVM, idCpu, (PGMMBALLOONEDPAGESREQ)pReqHdr);
    1878             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1864            rc = GMMR0BalloonedPagesReq(pGVM, idCpu, (PGMMBALLOONEDPAGESREQ)pReqHdr);
     1865            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18791866            break;
    18801867
     
    18821869            if (u64Arg)
    18831870                return VERR_INVALID_PARAMETER;
    1884             rc = GMMR0MapUnmapChunkReq(pGVM, pVM, (PGMMMAPUNMAPCHUNKREQ)pReqHdr);
    1885             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1871            rc = GMMR0MapUnmapChunkReq(pGVM, (PGMMMAPUNMAPCHUNKREQ)pReqHdr);
     1872            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18861873            break;
    18871874
     
    18891876            if (pReqHdr)
    18901877                return VERR_INVALID_PARAMETER;
    1891             rc = GMMR0SeedChunk(pGVM, pVM, idCpu, (RTR3PTR)u64Arg);
    1892             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1878            rc = GMMR0SeedChunk(pGVM, idCpu, (RTR3PTR)u64Arg);
     1879            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    18931880            break;
    18941881
     
    18981885            if (u64Arg)
    18991886                return VERR_INVALID_PARAMETER;
    1900             rc = GMMR0RegisterSharedModuleReq(pGVM, pVM, idCpu, (PGMMREGISTERSHAREDMODULEREQ)pReqHdr);
    1901             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1887            rc = GMMR0RegisterSharedModuleReq(pGVM, idCpu, (PGMMREGISTERSHAREDMODULEREQ)pReqHdr);
     1888            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19021889            break;
    19031890
     
    19071894            if (u64Arg)
    19081895                return VERR_INVALID_PARAMETER;
    1909             rc = GMMR0UnregisterSharedModuleReq(pGVM, pVM, idCpu, (PGMMUNREGISTERSHAREDMODULEREQ)pReqHdr);
    1910             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1896            rc = GMMR0UnregisterSharedModuleReq(pGVM, idCpu, (PGMMUNREGISTERSHAREDMODULEREQ)pReqHdr);
     1897            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19111898            break;
    19121899
     
    19171904                ||  pReqHdr)
    19181905                return VERR_INVALID_PARAMETER;
    1919             rc = GMMR0ResetSharedModules(pGVM, pVM, idCpu);
    1920             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1906            rc = GMMR0ResetSharedModules(pGVM, idCpu);
     1907            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19211908            break;
    19221909
     
    19291916                ||  pReqHdr)
    19301917                return VERR_INVALID_PARAMETER;
    1931             rc = GMMR0CheckSharedModules(pGVM, pVM, idCpu);
    1932             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1918            rc = GMMR0CheckSharedModules(pGVM, idCpu);
     1919            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19331920            break;
    19341921        }
     
    19391926            if (u64Arg)
    19401927                return VERR_INVALID_PARAMETER;
    1941             rc = GMMR0FindDuplicatePageReq(pGVM, pVM, (PGMMFINDDUPLICATEPAGEREQ)pReqHdr);
    1942             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1928            rc = GMMR0FindDuplicatePageReq(pGVM, (PGMMFINDDUPLICATEPAGEREQ)pReqHdr);
     1929            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19431930            break;
    19441931#endif
     
    19471934            if (u64Arg)
    19481935                return VERR_INVALID_PARAMETER;
    1949             rc = GMMR0QueryStatisticsReq(pGVM, pVM, (PGMMQUERYSTATISTICSSREQ)pReqHdr);
    1950             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1936            rc = GMMR0QueryStatisticsReq(pGVM, (PGMMQUERYSTATISTICSSREQ)pReqHdr);
     1937            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19511938            break;
    19521939
     
    19541941            if (u64Arg)
    19551942                return VERR_INVALID_PARAMETER;
    1956             rc = GMMR0ResetStatisticsReq(pGVM, pVM, (PGMMRESETSTATISTICSSREQ)pReqHdr);
    1957             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1943            rc = GMMR0ResetStatisticsReq(pGVM, (PGMMRESETSTATISTICSSREQ)pReqHdr);
     1944            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19581945            break;
    19591946
     
    19651952        case VMMR0_DO_GCFGM_QUERY_VALUE:
    19661953        {
    1967             if (pGVM || pVM || !pReqHdr || u64Arg || idCpu != NIL_VMCPUID)
     1954            if (pGVM || !pReqHdr || u64Arg || idCpu != NIL_VMCPUID)
    19681955                return VERR_INVALID_PARAMETER;
    19691956            PGCFGMVALUEREQ pReq = (PGCFGMVALUEREQ)pReqHdr;
     
    19821969                //    rc = GMMR0QueryConfig(pReq->pSession, &pReq->szName[0], &pReq->u64Value);
    19831970            }
    1984             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1971            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19851972            break;
    19861973        }
     
    19931980            if (!pReqHdr || u64Arg || idCpu != NIL_VMCPUID)
    19941981                return VERR_INVALID_PARAMETER;
    1995             rc = PDMR0DriverCallReqHandler(pGVM, pVM, (PPDMDRIVERCALLREQHANDLERREQ)pReqHdr);
    1996             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1982            rc = PDMR0DriverCallReqHandler(pGVM, (PPDMDRIVERCALLREQHANDLERREQ)pReqHdr);
     1983            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    19971984            break;
    19981985        }
     
    20021989            if (!pReqHdr || u64Arg || idCpu != NIL_VMCPUID)
    20031990                return VERR_INVALID_PARAMETER;
    2004             rc = PDMR0DeviceCallReqHandler(pGVM, pVM, (PPDMDEVICECALLREQHANDLERREQ)pReqHdr);
    2005             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     1991            rc = PDMR0DeviceCallReqHandler(pGVM, (PPDMDEVICECALLREQHANDLERREQ)pReqHdr);
     1992            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20061993            break;
    20071994        }
     
    20132000        {
    20142001            PINTNETOPENREQ pReq = (PINTNETOPENREQ)pReqHdr;
    2015             if (u64Arg || !pReq || !vmmR0IsValidSession(pVM, pReq->pSession, pSession) || idCpu != NIL_VMCPUID)
     2002            if (u64Arg || !pReq || !vmmR0IsValidSession(pGVM, pReq->pSession, pSession) || idCpu != NIL_VMCPUID)
    20162003                return VERR_INVALID_PARAMETER;
    20172004            rc = IntNetR0OpenReq(pSession, pReq);
    2018             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2005            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20192006            break;
    20202007        }
    20212008
    20222009        case VMMR0_DO_INTNET_IF_CLOSE:
    2023             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFCLOSEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2010            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PINTNETIFCLOSEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    20242011                return VERR_INVALID_PARAMETER;
    20252012            rc = IntNetR0IfCloseReq(pSession, (PINTNETIFCLOSEREQ)pReqHdr);
    2026             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2013            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20272014            break;
    20282015
    20292016
    20302017        case VMMR0_DO_INTNET_IF_GET_BUFFER_PTRS:
    2031             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFGETBUFFERPTRSREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2018            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PINTNETIFGETBUFFERPTRSREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    20322019                return VERR_INVALID_PARAMETER;
    20332020            rc = IntNetR0IfGetBufferPtrsReq(pSession, (PINTNETIFGETBUFFERPTRSREQ)pReqHdr);
    2034             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2021            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20352022            break;
    20362023
    20372024        case VMMR0_DO_INTNET_IF_SET_PROMISCUOUS_MODE:
    2038             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETPROMISCUOUSMODEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2025            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PINTNETIFSETPROMISCUOUSMODEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    20392026                return VERR_INVALID_PARAMETER;
    20402027            rc = IntNetR0IfSetPromiscuousModeReq(pSession, (PINTNETIFSETPROMISCUOUSMODEREQ)pReqHdr);
    2041             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2028            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20422029            break;
    20432030
    20442031        case VMMR0_DO_INTNET_IF_SET_MAC_ADDRESS:
    2045             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETMACADDRESSREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2032            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PINTNETIFSETMACADDRESSREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    20462033                return VERR_INVALID_PARAMETER;
    20472034            rc = IntNetR0IfSetMacAddressReq(pSession, (PINTNETIFSETMACADDRESSREQ)pReqHdr);
    2048             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2035            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20492036            break;
    20502037
    20512038        case VMMR0_DO_INTNET_IF_SET_ACTIVE:
    2052             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETACTIVEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2039            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PINTNETIFSETACTIVEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    20532040                return VERR_INVALID_PARAMETER;
    20542041            rc = IntNetR0IfSetActiveReq(pSession, (PINTNETIFSETACTIVEREQ)pReqHdr);
    2055             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2042            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20562043            break;
    20572044
    20582045        case VMMR0_DO_INTNET_IF_SEND:
    2059             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSENDREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2046            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PINTNETIFSENDREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    20602047                return VERR_INVALID_PARAMETER;
    20612048            rc = IntNetR0IfSendReq(pSession, (PINTNETIFSENDREQ)pReqHdr);
    2062             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2049            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20632050            break;
    20642051
    20652052        case VMMR0_DO_INTNET_IF_WAIT:
    2066             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFWAITREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2053            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PINTNETIFWAITREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    20672054                return VERR_INVALID_PARAMETER;
    20682055            rc = IntNetR0IfWaitReq(pSession, (PINTNETIFWAITREQ)pReqHdr);
    2069             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2056            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20702057            break;
    20712058
    20722059        case VMMR0_DO_INTNET_IF_ABORT_WAIT:
    2073             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFWAITREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2060            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PINTNETIFWAITREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    20742061                return VERR_INVALID_PARAMETER;
    20752062            rc = IntNetR0IfAbortWaitReq(pSession, (PINTNETIFABORTWAITREQ)pReqHdr);
    2076             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2063            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20772064            break;
    20782065
     
    20822069         */
    20832070        case VMMR0_DO_PCIRAW_REQ:
    2084             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PPCIRAWSENDREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    2085                 return VERR_INVALID_PARAMETER;
    2086             rc = PciRawR0ProcessReq(pGVM, pVM, pSession, (PPCIRAWSENDREQ)pReqHdr);
    2087             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2071            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pGVM, ((PPCIRAWSENDREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
     2072                return VERR_INVALID_PARAMETER;
     2073            rc = PciRawR0ProcessReq(pGVM, pSession, (PPCIRAWSENDREQ)pReqHdr);
     2074            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    20882075            break;
    20892076#endif
     
    20972084            if (u64Arg || pReqHdr || idCpu != 0)
    20982085                return VERR_INVALID_PARAMETER;
    2099             rc = NEMR0InitVM(pGVM, pVM);
    2100             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2086            rc = NEMR0InitVM(pGVM);
     2087            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21012088            break;
    21022089
     
    21042091            if (u64Arg || pReqHdr || idCpu != 0)
    21052092                return VERR_INVALID_PARAMETER;
    2106             rc = NEMR0InitVMPart2(pGVM, pVM);
    2107             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2093            rc = NEMR0InitVMPart2(pGVM);
     2094            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21082095            break;
    21092096
     
    21112098            if (u64Arg || pReqHdr || idCpu == NIL_VMCPUID)
    21122099                return VERR_INVALID_PARAMETER;
    2113             rc = NEMR0MapPages(pGVM, pVM, idCpu);
    2114             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2100            rc = NEMR0MapPages(pGVM, idCpu);
     2101            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21152102            break;
    21162103
     
    21182105            if (u64Arg || pReqHdr || idCpu == NIL_VMCPUID)
    21192106                return VERR_INVALID_PARAMETER;
    2120             rc = NEMR0UnmapPages(pGVM, pVM, idCpu);
    2121             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2107            rc = NEMR0UnmapPages(pGVM, idCpu);
     2108            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21222109            break;
    21232110
     
    21252112            if (u64Arg || pReqHdr || idCpu == NIL_VMCPUID)
    21262113                return VERR_INVALID_PARAMETER;
    2127             rc = NEMR0ExportState(pGVM, pVM, idCpu);
    2128             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2114            rc = NEMR0ExportState(pGVM, idCpu);
     2115            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21292116            break;
    21302117
     
    21322119            if (pReqHdr || idCpu == NIL_VMCPUID)
    21332120                return VERR_INVALID_PARAMETER;
    2134             rc = NEMR0ImportState(pGVM, pVM, idCpu, u64Arg);
    2135             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2121            rc = NEMR0ImportState(pGVM, idCpu, u64Arg);
     2122            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21362123            break;
    21372124
     
    21392126            if (u64Arg || pReqHdr || idCpu == NIL_VMCPUID)
    21402127                return VERR_INVALID_PARAMETER;
    2141             rc = NEMR0QueryCpuTick(pGVM, pVM, idCpu);
    2142             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2128            rc = NEMR0QueryCpuTick(pGVM, idCpu);
     2129            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21432130            break;
    21442131
     
    21462133            if (pReqHdr || idCpu == NIL_VMCPUID)
    21472134                return VERR_INVALID_PARAMETER;
    2148             rc = NEMR0ResumeCpuTickOnAll(pGVM, pVM, idCpu, u64Arg);
    2149             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2135            rc = NEMR0ResumeCpuTickOnAll(pGVM, idCpu, u64Arg);
     2136            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21502137            break;
    21512138
     
    21532140            if (u64Arg || pReqHdr)
    21542141                return VERR_INVALID_PARAMETER;
    2155             rc = NEMR0UpdateStatistics(pGVM, pVM, idCpu);
    2156             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2142            rc = NEMR0UpdateStatistics(pGVM, idCpu);
     2143            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21572144            break;
    21582145
     
    21612148            if (pReqHdr)
    21622149                return VERR_INVALID_PARAMETER;
    2163             rc = NEMR0DoExperiment(pGVM, pVM, idCpu, u64Arg);
    2164             VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
     2150            rc = NEMR0DoExperiment(pGVM, idCpu, u64Arg);
     2151            VMM_CHECK_SMAP_CHECK2(pGVM, RT_NOTHING);
    21652152            break;
    21662153#   endif
     
    22002187{
    22012188    PGVM                pGVM;
    2202     PVMCC               pVM;
    22032189    VMCPUID             idCpu;
    22042190    VMMR0OPERATION      enmOperation;
     
    22192205{
    22202206    return vmmR0EntryExWorker(((PVMMR0ENTRYEXARGS)pvArgs)->pGVM,
    2221                               ((PVMMR0ENTRYEXARGS)pvArgs)->pVM,
    22222207                              ((PVMMR0ENTRYEXARGS)pvArgs)->idCpu,
    22232208                              ((PVMMR0ENTRYEXARGS)pvArgs)->enmOperation,
     
    22512236    if (   pVM  != NULL
    22522237        && pGVM != NULL
     2238        && pVM  == pGVM /** @todo drop pGVM */
    22532239        && idCpu < pGVM->cCpus
    2254         && pVM->pSession == pSession
    2255         && pVM->pSelf != NULL)
     2240        && pGVM->pSession == pSession
     2241        && pGVM->pSelf    == pVM)
    22562242    {
    22572243        switch (enmOperation)
     
    22792265                    VMMR0ENTRYEXARGS Args;
    22802266                    Args.pGVM = pGVM;
    2281                     Args.pVM = pVM;
    22822267                    Args.idCpu = idCpu;
    22832268                    Args.enmOperation = enmOperation;
     
    22942279        }
    22952280    }
    2296     return vmmR0EntryExWorker(pGVM, pVM, idCpu, enmOperation, pReq, u64Arg, pSession);
     2281    return vmmR0EntryExWorker(pGVM, idCpu, enmOperation, pReq, u64Arg, pSession);
    22972282}
    22982283
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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