VirtualBox

Changeset 19454 in vbox


Ignore:
Timestamp:
May 6, 2009 7:20:18 PM (16 years ago)
Author:
vboxsync
Message:

VMM++: More on poking. Fixed broken R0 stats (wrong way of calling into VMMR0), use NIL_VMCPUID instead of 0 to VMMR0EntryEx when it is supposed to be irrellevant. Use VMCPUID. Allow for and check NIL_VMCPUID. Fixed a few missing/wrong idCpu checks (paranoia mostly).

Location:
trunk
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/gmm.h

    r19381 r19454  
    266266GMMR0DECL(void) GMMR0InitPerVMData(PGVM pGVM);
    267267GMMR0DECL(void) GMMR0CleanupVM(PGVM pGVM);
    268 GMMR0DECL(int)  GMMR0InitialReservation(PVM pVM, unsigned idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,
     268GMMR0DECL(int)  GMMR0InitialReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,
    269269                                        GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority);
    270 GMMR0DECL(int)  GMMR0UpdateReservation(PVM pVM, unsigned idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages);
    271 GMMR0DECL(int)  GMMR0AllocateHandyPages(PVM pVM, unsigned idCpu, uint32_t cPagesToUpdate, uint32_t cPagesToAlloc, PGMMPAGEDESC paPages);
    272 GMMR0DECL(int)  GMMR0AllocatePages(PVM pVM, unsigned idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount);
    273 GMMR0DECL(int)  GMMR0FreePages(PVM pVM, unsigned idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount);
    274 GMMR0DECL(int)  GMMR0BalloonedPages(PVM pVM, unsigned idCpu, uint32_t cBalloonedPages, uint32_t cPagesToFree, PGMMFREEPAGEDESC paPages, bool fCompleted);
    275 GMMR0DECL(int)  GMMR0DeflatedBalloon(PVM pVM, unsigned idCpu, uint32_t cPages);
    276 GMMR0DECL(int)  GMMR0MapUnmapChunk(PVM pVM, unsigned idCpu, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3);
    277 GMMR0DECL(int)  GMMR0SeedChunk(PVM pVM, unsigned idCpu, RTR3PTR pvR3);
     270GMMR0DECL(int)  GMMR0UpdateReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages);
     271GMMR0DECL(int)  GMMR0AllocateHandyPages(PVM pVM, VMCPUID idCpu, uint32_t cPagesToUpdate, uint32_t cPagesToAlloc, PGMMPAGEDESC paPages);
     272GMMR0DECL(int)  GMMR0AllocatePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount);
     273GMMR0DECL(int)  GMMR0FreePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount);
     274GMMR0DECL(int)  GMMR0BalloonedPages(PVM pVM, VMCPUID idCpu, uint32_t cBalloonedPages, uint32_t cPagesToFree, PGMMFREEPAGEDESC paPages, bool fCompleted);
     275GMMR0DECL(int)  GMMR0DeflatedBalloon(PVM pVM, VMCPUID idCpu, uint32_t cPages);
     276GMMR0DECL(int)  GMMR0MapUnmapChunk(PVM pVM, VMCPUID idCpu, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3);
     277GMMR0DECL(int)  GMMR0SeedChunk(PVM pVM, VMCPUID idCpu, RTR3PTR pvR3);
    278278
    279279
     
    296296typedef GMMINITIALRESERVATIONREQ *PGMMINITIALRESERVATIONREQ;
    297297
    298 GMMR0DECL(int)  GMMR0InitialReservationReq(PVM pVM, unsigned idCpu, PGMMINITIALRESERVATIONREQ pReq);
     298GMMR0DECL(int)  GMMR0InitialReservationReq(PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq);
    299299
    300300
     
    314314typedef GMMUPDATERESERVATIONREQ *PGMMUPDATERESERVATIONREQ;
    315315
    316 GMMR0DECL(int)  GMMR0UpdateReservationReq(PVM pVM, unsigned idCpu, PGMMUPDATERESERVATIONREQ pReq);
     316GMMR0DECL(int)  GMMR0UpdateReservationReq(PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq);
    317317
    318318
     
    335335typedef GMMALLOCATEPAGESREQ *PGMMALLOCATEPAGESREQ;
    336336
    337 GMMR0DECL(int)  GMMR0AllocatePagesReq(PVM pVM, unsigned idCpu, PGMMALLOCATEPAGESREQ pReq);
     337GMMR0DECL(int)  GMMR0AllocatePagesReq(PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq);
    338338
    339339
     
    356356typedef GMMFREEPAGESREQ *PGMMFREEPAGESREQ;
    357357
    358 GMMR0DECL(int)  GMMR0FreePagesReq(PVM pVM, unsigned idCpu, PGMMFREEPAGESREQ pReq);
     358GMMR0DECL(int)  GMMR0FreePagesReq(PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq);
    359359
    360360
     
    379379typedef GMMBALLOONEDPAGESREQ *PGMMBALLOONEDPAGESREQ;
    380380
    381 GMMR0DECL(int)  GMMR0BalloonedPagesReq(PVM pVM, unsigned idCpu, PGMMBALLOONEDPAGESREQ pReq);
     381GMMR0DECL(int)  GMMR0BalloonedPagesReq(PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq);
    382382
    383383
     
    400400typedef GMMMAPUNMAPCHUNKREQ *PGMMMAPUNMAPCHUNKREQ;
    401401
    402 GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PVM pVM, unsigned idCpu, PGMMMAPUNMAPCHUNKREQ pReq);
     402GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PVM pVM, VMCPUID idCpu, PGMMMAPUNMAPCHUNKREQ pReq);
    403403
    404404
  • trunk/include/VBox/gvmm.h

    r19406 r19454  
    8383    /** The number of calls to GVMMR0WakeUp. */
    8484    uint64_t        cWakeUpCalls;
    85     /** The number of times the EMT thread wasn't actually halted when GVMMR0WakeUp was called. */
     85    /** The number of times the EMT thread wasn't actually halted when GVMMR0WakeUp
     86     *  was called. */
    8687    uint64_t        cWakeUpNotHalted;
    87     /** The number of wake ups done during GVMMR0WakeUp (not counting the explicit one). */
     88    /** The number of wake ups done during GVMMR0WakeUp (not counting the explicit
     89     *  one). */
    8890    uint64_t        cWakeUpWakeUps;
     91
     92    /** The number of calls to GVMMR0Poke. */
     93    uint64_t        cPokeCalls;
     94    /** The number of times the EMT thread wasn't actually busy when
     95     *  GVMMR0Poke was called. */
     96    uint64_t        cPokeNotBusy;
    8997
    9098    /** The number of calls to GVMMR0SchedPoll. */
  • trunk/include/VBox/sup.h

    r19257 r19454  
    447447 * @returns error code specific to uFunction.
    448448 * @param   pVMR0       Pointer to the Ring-0 (Host Context) mapping of the VM structure.
    449  * @param   idCpu       VMCPU id.
     449 * @param   idCpu       The virtual CPU ID.
    450450 * @param   uOperation  Operation to execute.
    451451 * @param   pvArg       Argument.
    452452 */
    453 SUPR3DECL(int) SUPCallVMMR0(PVMR0 pVMR0, unsigned idCpu, unsigned uOperation, void *pvArg);
     453SUPR3DECL(int) SUPCallVMMR0(PVMR0 pVMR0, VMCPUID idCpu, unsigned uOperation, void *pvArg);
    454454
    455455/**
     
    460460 * @param   pVMR0       The ring-0 VM handle.
    461461 * @param   uOperation  The operation; only the SUP_VMMR0_DO_* ones are valid.
    462  * @param   idCpu       VMCPU id.
    463  */
    464 SUPR3DECL(int) SUPCallVMMR0Fast(PVMR0 pVMR0, unsigned uOperation, unsigned idCpu);
     462 * @param   idCpu       The virtual CPU ID.
     463 */
     464SUPR3DECL(int) SUPCallVMMR0Fast(PVMR0 pVMR0, unsigned uOperation, VMCPUID idCpu);
    465465
    466466/**
     
    473473 * @returns error code specific to uFunction.
    474474 * @param   pVMR0       Pointer to the Ring-0 (Host Context) mapping of the VM structure.
    475  * @param   idCpu       VMCPU id.
     475 * @param   idCpu       The virtual CPU ID.
    476476 * @param   uOperation  Operation to execute.
    477477 * @param   u64Arg      Constant argument.
     
    480480 *                      limit on this, just below 4KB.
    481481 */
    482 SUPR3DECL(int) SUPCallVMMR0Ex(PVMR0 pVMR0, unsigned idCpu, unsigned uOperation, uint64_t u64Arg, PSUPVMMR0REQHDR pReqHdr);
     482SUPR3DECL(int) SUPCallVMMR0Ex(PVMR0 pVMR0, VMCPUID idCpu, unsigned uOperation, uint64_t u64Arg, PSUPVMMR0REQHDR pReqHdr);
    483483
    484484/**
  • trunk/include/VBox/vm.h

    r19435 r19454  
    106106    /** The native thread handle. */
    107107    RTNATIVETHREAD          hNativeThread;
     108    /** Which host CPU ID is this EMT running on.
     109     * Only valid when in RC or HWACCMR0 with scheduling disabled. */
     110    RTCPUID volatile        idHostCpu;
    108111
    109112    /** Align the next bit on a 64-byte boundary.
     
    114117     *          following it (to grow into and align the struct size).
    115118     *   */
    116     uint32_t                au32Alignment[HC_ARCH_BITS == 32 ? 8 : 4];
     119    uint32_t                au32Alignment[HC_ARCH_BITS == 32 ? 7 : 3];
    117120
    118121    /** CPUM part. */
  • trunk/include/VBox/vm.mac

    r19217 r19454  
    4747; This is part of  the VM structure.
    4848struc VM
    49     .enmVMState         resd 1
    50     .fGlobalForcedActions resd 1
    51     .paVMPagesR3        RTR3PTR_RES 1
    52     .pSession           RTR0PTR_RES 1
    53     .pUVM               RTR3PTR_RES 1
    54     .pVMR3              RTR3PTR_RES 1
    55     .pVMR0              RTR0PTR_RES 1
    56     .pVMRC              RTRCPTR_RES 1
    57     .hSelf              resd 1
    58     .cCPUs              resd 1
    59     .cbSelf             resd 1
    60     .offVMCPU           resd 1
    61     .u32Reserved        resd 6
     49    .enmVMState             resd 1
     50    .fGlobalForcedActions   resd 1
     51    .paVMPagesR3            RTR3PTR_RES 1
     52    .pSession               RTR0PTR_RES 1
     53    .pUVM                   RTR3PTR_RES 1
     54    .pVMR3                  RTR3PTR_RES 1
     55    .pVMR0                  RTR0PTR_RES 1
     56    .pVMRC                  RTRCPTR_RES 1
     57    .hSelf                  resd 1
     58    .cCPUs                  resd 1
     59    .cbSelf                 resd 1
     60    .offVMCPU               resd 1
     61    .u32Reserved            resd 6
    6262
    6363    .pfnVMMGCGuestToHostAsmGuestCtx RTRCPTR_RES 1
     
    6565    .pfnVMMGCGuestToHostAsm         RTRCPTR_RES 1
    6666
    67     .uPadding1          RTHCPTR_RES 1
    68     .uPadding2          RTHCPTR_RES 1
     67    .uPadding1              RTHCPTR_RES 1
     68    .uPadding2              RTHCPTR_RES 1
    6969
    70     .fRawR3Enabled      resb 1
    71     .fRawR0Enabled      resb 1
    72     .fPATMEnabled       resb 1
    73     .fCSAMEnabled       resb 1
    74     .fHWACCMEnabled     resb 1
    75     .fHwVirtExtForced   resb 1
    76     .fPARAVEnabled      resb 1
     70    .fRawR3Enabled          resb 1
     71    .fRawR0Enabled          resb 1
     72    .fPATMEnabled           resb 1
     73    .fCSAMEnabled           resb 1
     74    .fHWACCMEnabled         resb 1
     75    .fHwVirtExtForced       resb 1
     76    .fPARAVEnabled          resb 1
    7777
    7878    alignb 8
    7979
    80     .StatTotalQemuToGC  resb STAMPROFILEADV_size
    81     .StatTotalGCToQemu  resb STAMPROFILEADV_size
    82     .StatTotalInGC      resb STAMPROFILEADV_size
    83     .StatTotalInQemu    resb STAMPROFILEADV_size
    84     .StatSwitcherToGC   resb STAMPROFILEADV_size
    85     .StatSwitcherToHC   resb STAMPROFILEADV_size
    86     .StatSwitcherSaveRegs resb STAMPROFILEADV_size
    87     .StatSwitcherSysEnter resb STAMPROFILEADV_size
    88     .StatSwitcherDebug    resb STAMPROFILEADV_size
    89     .StatSwitcherCR0      resb STAMPROFILEADV_size
    90     .StatSwitcherCR4      resb STAMPROFILEADV_size
    91     .StatSwitcherJmpCR3   resb STAMPROFILEADV_size
    92     .StatSwitcherRstrRegs resb STAMPROFILEADV_size
    93     .StatSwitcherLgdt     resb STAMPROFILEADV_size
    94     .StatSwitcherLidt     resb STAMPROFILEADV_size
    95     .StatSwitcherLldt     resb STAMPROFILEADV_size
    96     .StatSwitcherTSS      resb STAMPROFILEADV_size
     80    .StatTotalQemuToGC      resb STAMPROFILEADV_size
     81    .StatTotalGCToQemu      resb STAMPROFILEADV_size
     82    .StatTotalInGC          resb STAMPROFILEADV_size
     83    .StatTotalInQemu        resb STAMPROFILEADV_size
     84    .StatSwitcherToGC       resb STAMPROFILEADV_size
     85    .StatSwitcherToHC       resb STAMPROFILEADV_size
     86    .StatSwitcherSaveRegs   resb STAMPROFILEADV_size
     87    .StatSwitcherSysEnter   resb STAMPROFILEADV_size
     88    .StatSwitcherDebug      resb STAMPROFILEADV_size
     89    .StatSwitcherCR0        resb STAMPROFILEADV_size
     90    .StatSwitcherCR4        resb STAMPROFILEADV_size
     91    .StatSwitcherJmpCR3     resb STAMPROFILEADV_size
     92    .StatSwitcherRstrRegs   resb STAMPROFILEADV_size
     93    .StatSwitcherLgdt       resb STAMPROFILEADV_size
     94    .StatSwitcherLidt       resb STAMPROFILEADV_size
     95    .StatSwitcherLldt       resb STAMPROFILEADV_size
     96    .StatSwitcherTSS        resb STAMPROFILEADV_size
    9797
    9898    alignb 64
    99     .cpum                 resb 2048
    100     .vmm                  resb 1024
     99    .cpum                   resb 2048
     100    .vmm                    resb 1024
    101101
    102102endstruc
     
    105105; This is part of  the VMCPU structure.
    106106struc VMCPU
    107     .fLocalForcedActions resd 1
    108     .enmState            resd 1
    109     .pUVCpu              RTR3PTR_RES 1
    110     .pVMR3               RTR3PTR_RES 1
    111     .pVMR0               RTR0PTR_RES 1
    112     .pVMRC               RTRCPTR_RES 1
    113     .idCpu               resd 1
     107    .fLocalForcedActions    resd 1
     108    .enmState               resd 1
     109    .pUVCpu                 RTR3PTR_RES 1
     110    .pVMR3                  RTR3PTR_RES 1
     111    .pVMR0                  RTR0PTR_RES 1
     112    .pVMRC                  RTRCPTR_RES 1
     113    .idCpu                  resd 1
    114114
    115     .hNativeThread       RTR0PTR_RES 1
     115    .hNativeThread          RTR0PTR_RES 1
     116    .idHostCpu              resd 1
    116117
    117118    alignb 64
    118119
    119     .cpum                resb 4096
     120    .cpum                   resb 4096
    120121endstruc
    121122
  • trunk/include/VBox/vmm.h

    r19437 r19454  
    114114VMMDECL(PVMCPU)      VMMGetCpu(PVM pVM);
    115115VMMDECL(PVMCPU)      VMMGetCpu0(PVM pVM);
    116 VMMDECL(PVMCPU)      VMMGetCpuById(PVM pVM, RTCPUID idCpu);
     116VMMDECL(PVMCPU)      VMMGetCpuById(PVM pVM, VMCPUID idCpu);
    117117VMMDECL(uint32_t)    VMMGetSvnRev(void);
    118118VMMDECL(VMMSWITCHER) VMMGetSwitcher(PVM pVM);
     
    298298
    299299VMMR0DECL(int)      VMMR0EntryInt(PVM pVM, VMMR0OPERATION enmOperation, void *pvArg);
    300 VMMR0DECL(void)     VMMR0EntryFast(PVM pVM, unsigned idCpu, VMMR0OPERATION enmOperation);
    301 VMMR0DECL(int)      VMMR0EntryEx(PVM pVM, unsigned idCpu, VMMR0OPERATION enmOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION);
     300VMMR0DECL(void)     VMMR0EntryFast(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation);
     301VMMR0DECL(int)      VMMR0EntryEx(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION);
    302302VMMR0DECL(int)      VMMR0TermVM(PVM pVM, PGVM pGVM);
    303303VMMR0DECL(int)      VMMR0CallHost(PVM pVM, VMMCALLHOST enmOperation, uint64_t uArg);
  • trunk/src/VBox/Devices/Network/testcase/tstIntNet-1.cpp

    r19257 r19454  
    312312    SendReq.pSession = pSession;
    313313    SendReq.hIf = hIf;
    314     rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_SEND, 0, &SendReq.Hdr);
     314    rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_SEND, 0, &SendReq.Hdr);
    315315    if (RT_FAILURE(rc))
    316316    {
     
    542542        WaitReq.hIf = hIf;
    543543        WaitReq.cMillies = cMillies - (uint32_t)cElapsedMillies;
    544         int rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_WAIT, 0, &WaitReq.Hdr);
     544        int rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_WAIT, 0, &WaitReq.Hdr);
    545545        if (rc == VERR_TIMEOUT)
    546546            break;
     
    882882             OpenReq.szNetwork, OpenReq.szTrunk);
    883883    RTStrmFlush(g_pStdOut);
    884     rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_OPEN, 0, &OpenReq.Hdr);
     884    rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_OPEN, 0, &OpenReq.Hdr);
    885885    if (RT_SUCCESS(rc))
    886886    {
     
    898898        GetRing3BufferReq.hIf = OpenReq.hIf;
    899899        GetRing3BufferReq.pRing3Buf = NULL;
    900         rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_GET_RING3_BUFFER, 0, &GetRing3BufferReq.Hdr);
     900        rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_GET_RING3_BUFFER, 0, &GetRing3BufferReq.Hdr);
    901901        if (RT_SUCCESS(rc))
    902902        {
     
    913913                PromiscReq.hIf          = OpenReq.hIf;
    914914                PromiscReq.fPromiscuous = true;
    915                 rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_SET_PROMISCUOUS_MODE, 0, &PromiscReq.Hdr);
     915                rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_SET_PROMISCUOUS_MODE, 0, &PromiscReq.Hdr);
    916916                if (RT_SUCCESS(rc))
    917917                    RTPrintf("tstIntNet-1: interface in promiscuous mode\n");
     
    928928                ActiveReq.hIf = OpenReq.hIf;
    929929                ActiveReq.fActive = true;
    930                 rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_SET_ACTIVE, 0, &ActiveReq.Hdr);
     930                rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_SET_ACTIVE, 0, &ActiveReq.Hdr);
    931931                if (RT_SUCCESS(rc))
    932932                {
  • trunk/src/VBox/HostDrivers/Support/SUPDrv.c

    r19393 r19454  
    150150
    151151#ifdef RT_WITH_W64_UNWIND_HACK
    152 DECLASM(int)    supdrvNtWrapVMMR0EntryEx(PFNRT pfnVMMR0EntryEx, PVM pVM, unsigned idCpu, unsigned uOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession);
    153 DECLASM(int)    supdrvNtWrapVMMR0EntryFast(PFNRT pfnVMMR0EntryFast, PVM pVM, unsigned idCpu, unsigned uOperation);
     152DECLASM(int)    supdrvNtWrapVMMR0EntryEx(PFNRT pfnVMMR0EntryEx, PVM pVM, VMCPUID idCpu, unsigned uOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession);
     153DECLASM(int)    supdrvNtWrapVMMR0EntryFast(PFNRT pfnVMMR0EntryFast, PVM pVM, VMCPUID idCpu, unsigned uOperation);
    154154DECLASM(void)   supdrvNtWrapObjDestructor(PFNRT pfnDestruction, void *pvObj, void *pvUser1, void *pvUser2);
    155155DECLASM(void *) supdrvNtWrapQueryFactoryInterface(PFNRT pfnQueryFactoryInterface, struct SUPDRVFACTORY const *pSupDrvFactory, PSUPDRVSESSION pSession, const char *pszInterfaceUuid);
     
    927927 * @param   pSession    Session data.
    928928 */
    929 int VBOXCALL supdrvIOCtlFast(uintptr_t uIOCtl, unsigned idCpu, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession)
     929int VBOXCALL supdrvIOCtlFast(uintptr_t uIOCtl, VMCPUID idCpu, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession)
    930930{
    931931    /*
  • trunk/src/VBox/HostDrivers/Support/SUPDrvInternal.h

    r19281 r19454  
    568568    DECLR0CALLBACKMEMBER(int,       pfnVMMR0EntryInt, (PVM pVM, unsigned uOperation, void *pvArg));
    569569    /** VMMR0EntryFast() pointer. */
    570     DECLR0CALLBACKMEMBER(void,      pfnVMMR0EntryFast, (PVM pVM, unsigned idCpu, unsigned uOperation));
     570    DECLR0CALLBACKMEMBER(void,      pfnVMMR0EntryFast, (PVM pVM, VMCPUID idCpu, unsigned uOperation));
    571571    /** VMMR0EntryEx() pointer. */
    572     DECLR0CALLBACKMEMBER(int,       pfnVMMR0EntryEx, (PVM pVM, unsigned idCpu, unsigned uOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession));
     572    DECLR0CALLBACKMEMBER(int,       pfnVMMR0EntryEx, (PVM pVM, VMCPUID idCpu, unsigned uOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession));
    573573
    574574    /** Linked list of loaded code. */
     
    625625*******************************************************************************/
    626626int  VBOXCALL   supdrvIOCtl(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPREQHDR pReqHdr);
    627 int  VBOXCALL   supdrvIOCtlFast(uintptr_t uIOCtl, unsigned idCpu, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession);
     627int  VBOXCALL   supdrvIOCtlFast(uintptr_t uIOCtl, VMCPUID idCpu, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession);
    628628int  VBOXCALL   supdrvIDC(uintptr_t uIOCtl, PSUPDRVDEVEXT pDevExt, PSUPDRVSESSION pSession, PSUPDRVIDCREQHDR pReqHdr);
    629629int  VBOXCALL   supdrvInitDevExt(PSUPDRVDEVEXT pDevExt);
  • trunk/src/VBox/HostDrivers/Support/SUPLib.cpp

    r19393 r19454  
    568568
    569569
    570 SUPR3DECL(int) SUPCallVMMR0Fast(PVMR0 pVMR0, unsigned uOperation, unsigned idCpu)
     570SUPR3DECL(int) SUPCallVMMR0Fast(PVMR0 pVMR0, unsigned uOperation, VMCPUID idCpu)
    571571{
    572572    if (RT_LIKELY(uOperation == SUP_VMMR0_DO_RAW_RUN))
     
    582582
    583583
    584 SUPR3DECL(int) SUPCallVMMR0Ex(PVMR0 pVMR0, unsigned idCpu, unsigned uOperation, uint64_t u64Arg, PSUPVMMR0REQHDR pReqHdr)
     584SUPR3DECL(int) SUPCallVMMR0Ex(PVMR0 pVMR0, VMCPUID idCpu, unsigned uOperation, uint64_t u64Arg, PSUPVMMR0REQHDR pReqHdr)
    585585{
    586586    /*
     
    645645
    646646
    647 SUPR3DECL(int) SUPCallVMMR0(PVMR0 pVMR0, unsigned idCpu, unsigned uOperation, void *pvArg)
     647SUPR3DECL(int) SUPCallVMMR0(PVMR0 pVMR0, VMCPUID idCpu, unsigned uOperation, void *pvArg)
    648648{
    649649    /*
  • trunk/src/VBox/NetworkServices/DHCP/VBoxNetDHCP.cpp

    r19257 r19454  
    577577        CloseReq.hIf = m_hIf;
    578578        m_hIf = INTNET_HANDLE_INVALID;
    579         int rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_CLOSE, 0, &CloseReq.Hdr);
     579        int rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_CLOSE, 0, &CloseReq.Hdr);
    580580        AssertRC(rc);
    581581    }
     
    907907     */
    908908    debugPrint(2, false, "attempting to open/create network \"%s\"...", OpenReq.szNetwork);
    909     rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_OPEN, 0, &OpenReq.Hdr);
     909    rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_OPEN, 0, &OpenReq.Hdr);
    910910    if (RT_SUCCESS(rc))
    911911    {
     
    922922        GetRing3BufferReq.hIf = m_hIf;
    923923        GetRing3BufferReq.pRing3Buf = NULL;
    924         rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_GET_RING3_BUFFER, 0, &GetRing3BufferReq.Hdr);
     924        rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_GET_RING3_BUFFER, 0, &GetRing3BufferReq.Hdr);
    925925        if (RT_SUCCESS(rc))
    926926        {
     
    939939            ActiveReq.hIf = m_hIf;
    940940            ActiveReq.fActive = true;
    941             rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_SET_ACTIVE, 0, &ActiveReq.Hdr);
     941            rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_SET_ACTIVE, 0, &ActiveReq.Hdr);
    942942            if (RT_SUCCESS(rc))
    943943                return 0;
     
    979979        WaitReq.hIf = m_hIf;
    980980        WaitReq.cMillies = 2000; /* 2 secs - the sleep is for some reason uninterruptible... */  /** @todo fix interruptability in SrvIntNet! */
    981         int rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_WAIT, 0, &WaitReq.Hdr);
     981        int rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_WAIT, 0, &WaitReq.Hdr);
    982982        if (RT_FAILURE(rc))
    983983        {
  • trunk/src/VBox/NetworkServices/NetLib/VBoxNetInt.cpp

    r17783 r19454  
    2121    SendReq.pSession     = pSession;
    2222    SendReq.hIf          = hIf;
    23     return SUPCallVMMR0Ex(NIL_RTR0PTR, VMMR0_DO_INTNET_IF_SEND, 0, &SendReq.Hdr);
     23    return SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_SEND, 0, &SendReq.Hdr);
    2424}
    2525
  • trunk/src/VBox/NetworkServices/NetLib/VBoxNetIntIf.cpp

    r19257 r19454  
    4949    SendReq.pSession     = pSession;
    5050    SendReq.hIf          = hIf;
    51     return SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VPCU 0 */, VMMR0_DO_INTNET_IF_SEND, 0, &SendReq.Hdr);
     51    return SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_INTNET_IF_SEND, 0, &SendReq.Hdr);
    5252}
    5353
  • trunk/src/VBox/VMM/PDMDriver.cpp

    r19257 r19454  
    949949    if (    uOperation >= VMMR0_DO_SRV_START
    950950        &&  uOperation <  VMMR0_DO_SRV_END)
    951         rc = SUPCallVMMR0Ex(pDrvIns->Internal.s.pVM->pVMR0, 0 /* idCpu not relevant */, uOperation, 0, (PSUPVMMR0REQHDR)pvArg);
     951        rc = SUPCallVMMR0Ex(pDrvIns->Internal.s.pVM->pVMR0, NIL_VMCPUID, uOperation, 0, (PSUPVMMR0REQHDR)pvArg);
    952952    else
    953953    {
  • trunk/src/VBox/VMM/STAM.cpp

    r17369 r19454  
    195195    { RT_UOFFSETOF(GVMMSTATS, SchedVM.cWakeUpNotHalted),  STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/VM/WakeUpNotHalted", "The number of times the EMT thread wasn't actually halted when GVMMR0WakeUp was called." },
    196196    { RT_UOFFSETOF(GVMMSTATS, SchedVM.cWakeUpWakeUps),    STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/VM/WakeUpWakeUps", "The number of wake ups done during GVMMR0WakeUp (not counting the explicit one)." },
     197    { RT_UOFFSETOF(GVMMSTATS, SchedVM.cPokeCalls),        STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/VM/PokeCalls", "The number of calls to GVMMR0Poke." },
     198    { RT_UOFFSETOF(GVMMSTATS, SchedVM.cPokeNotBusy),      STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/VM/PokeNotBusy", "The number of times the EMT thread wasn't actually busy when GVMMR0Poke was called." },
    197199    { RT_UOFFSETOF(GVMMSTATS, SchedVM.cPollCalls),        STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/VM/PollCalls", "The number of calls to GVMMR0SchedPoll." },
    198200    { RT_UOFFSETOF(GVMMSTATS, SchedVM.cPollHalts),        STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/VM/PollHalts", "The number of times the EMT has halted in a GVMMR0SchedPoll call." },
     
    207209    { RT_UOFFSETOF(GVMMSTATS, SchedSum.cWakeUpNotHalted), STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/Sum/WakeUpNotHalted", "The number of times the EMT thread wasn't actually halted when GVMMR0WakeUp was called." },
    208210    { RT_UOFFSETOF(GVMMSTATS, SchedSum.cWakeUpWakeUps),   STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/Sum/WakeUpWakeUps", "The number of wake ups done during GVMMR0WakeUp (not counting the explicit one)." },
     211    { RT_UOFFSETOF(GVMMSTATS, SchedSum.cPokeCalls),       STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/Sum/PokeCalls", "The number of calls to GVMMR0Poke." },
     212    { RT_UOFFSETOF(GVMMSTATS, SchedSum.cPokeNotBusy),     STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/Sum/PokeNotBusy", "The number of times the EMT thread wasn't actually busy when GVMMR0Poke was called." },
    209213    { RT_UOFFSETOF(GVMMSTATS, SchedSum.cPollCalls),       STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/Sum/PollCalls", "The number of calls to GVMMR0SchedPoll." },
    210214    { RT_UOFFSETOF(GVMMSTATS, SchedSum.cPollHalts),       STAMTYPE_U64_RESET, STAMUNIT_CALLS, "/GVMM/Sum/PollHalts", "The number of times the EMT has halted in a GVMMR0SchedPoll call." },
     
    754758        GVMMReq.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC;
    755759        GVMMReq.pSession = pVM->pSession;
    756         rc = VMMR3CallR0(pVM, VMMR0_DO_GVMM_RESET_STATISTICS, 0, &GVMMReq.Hdr);
     760        rc = SUPCallVMMR0Ex(pVM->pVMR0, NIL_VMCPUID, VMMR0_DO_GVMM_RESET_STATISTICS, 0, &GVMMReq.Hdr);
    757761    }
    758762
     
    17661770        Req.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC;
    17671771        Req.pSession = pVM->pSession;
    1768         int rc = VMMR3CallR0(pVM, VMMR0_DO_GVMM_QUERY_STATISTICS, 0, &Req.Hdr);
     1772        int rc = SUPCallVMMR0Ex(pVM->pVMR0, NIL_VMCPUID, VMMR0_DO_GVMM_QUERY_STATISTICS, 0, &Req.Hdr);
    17691773        if (RT_SUCCESS(rc))
    17701774            pUVM->stam.s.GVMMStats = Req.Stats;
  • trunk/src/VBox/VMM/VM.cpp

    r19441 r19454  
    517517    CreateVMReq.pVMR3           = NULL;
    518518    CreateVMReq.cCpus           = cCpus;
    519     rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VCPU 0 */, VMMR0_DO_GVMM_CREATE_VM, 0, &CreateVMReq.Hdr);
     519    rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, VMMR0_DO_GVMM_CREATE_VM, 0, &CreateVMReq.Hdr);
    520520    if (RT_SUCCESS(rc))
    521521    {
  • trunk/src/VBox/VMM/VMMR0/GMMR0.cpp

    r19381 r19454  
    10481048 * @thread  The creator thread / EMT.
    10491049 */
    1050 GMMR0DECL(int) GMMR0InitialReservation(PVM pVM, unsigned idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,
     1050GMMR0DECL(int) GMMR0InitialReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,
    10511051                                       GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority)
    10521052{
     
    10591059    PGMM pGMM;
    10601060    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    1061     PGVM pGVM = GVMMR0ByVM(pVM);
    1062     if (RT_UNLIKELY(!pGVM))
    1063         return VERR_INVALID_PARAMETER;
    1064     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    1065         return VERR_NOT_OWNER;
     1061    PGVM pGVM;
     1062    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     1063    if (RT_FAILURE(rc))
     1064        return rc;
    10661065
    10671066    AssertReturn(cBasePages, VERR_INVALID_PARAMETER);
     
    10711070    AssertReturn(enmPriority > GMMPRIORITY_INVALID && enmPriority < GMMPRIORITY_END, VERR_INVALID_PARAMETER);
    10721071
    1073     int rc = RTSemFastMutexRequest(pGMM->Mtx);
     1072    rc = RTSemFastMutexRequest(pGMM->Mtx);
    10741073    AssertRC(rc);
    10751074
     
    11151114 * @param   pReq            The request packet.
    11161115 */
    1117 GMMR0DECL(int) GMMR0InitialReservationReq(PVM pVM, unsigned idCpu, PGMMINITIALRESERVATIONREQ pReq)
     1116GMMR0DECL(int) GMMR0InitialReservationReq(PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq)
    11181117{
    11191118    /*
     
    11441143 * @thread  EMT.
    11451144 */
    1146 GMMR0DECL(int) GMMR0UpdateReservation(PVM pVM, unsigned idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages)
     1145GMMR0DECL(int) GMMR0UpdateReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages)
    11471146{
    11481147    LogFlow(("GMMR0UpdateReservation: pVM=%p cBasePages=%#llx cShadowPages=%#x cFixedPages=%#x\n",
     
    11541153    PGMM pGMM;
    11551154    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    1156     PGVM pGVM = GVMMR0ByVM(pVM);
    1157     if (RT_UNLIKELY(!pGVM))
    1158         return VERR_INVALID_PARAMETER;
    1159     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    1160         return VERR_NOT_OWNER;
     1155    PGVM pGVM;
     1156    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     1157    if (RT_FAILURE(rc))
     1158        return rc;
    11611159
    11621160    AssertReturn(cBasePages, VERR_INVALID_PARAMETER);
     
    11641162    AssertReturn(cFixedPages, VERR_INVALID_PARAMETER);
    11651163
    1166     int rc = RTSemFastMutexRequest(pGMM->Mtx);
     1164    rc = RTSemFastMutexRequest(pGMM->Mtx);
    11671165    AssertRC(rc);
    11681166
     
    12071205 * @param   pReq            The request packet.
    12081206 */
    1209 GMMR0DECL(int) GMMR0UpdateReservationReq(PVM pVM, unsigned idCpu, PGMMUPDATERESERVATIONREQ pReq)
     1207GMMR0DECL(int) GMMR0UpdateReservationReq(PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq)
    12101208{
    12111209    /*
     
    18511849 * @thread  EMT.
    18521850 */
    1853 GMMR0DECL(int) GMMR0AllocateHandyPages(PVM pVM, unsigned idCpu, uint32_t cPagesToUpdate, uint32_t cPagesToAlloc, PGMMPAGEDESC paPages)
     1851GMMR0DECL(int) GMMR0AllocateHandyPages(PVM pVM, VMCPUID idCpu, uint32_t cPagesToUpdate, uint32_t cPagesToAlloc, PGMMPAGEDESC paPages)
    18541852{
    18551853    LogFlow(("GMMR0AllocateHandyPages: pVM=%p cPagesToUpdate=%#x cPagesToAlloc=%#x paPages=%p\n",
     
    18621860    PGMM pGMM;
    18631861    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    1864     PGVM pGVM = GVMMR0ByVM(pVM);
    1865     if (RT_UNLIKELY(!pGVM))
    1866         return VERR_INVALID_PARAMETER;
    1867     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    1868         return VERR_NOT_OWNER;
     1862    PGVM pGVM;
     1863    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     1864    if (RT_FAILURE(rc))
     1865        return rc;
    18691866
    18701867    AssertPtrReturn(paPages, VERR_INVALID_PARAMETER);
     
    18981895    }
    18991896
    1900     int rc = RTSemFastMutexRequest(pGMM->Mtx);
     1897    rc = RTSemFastMutexRequest(pGMM->Mtx);
    19011898    AssertRC(rc);
    19021899
     
    20342031 * @thread  EMT.
    20352032 */
    2036 GMMR0DECL(int) GMMR0AllocatePages(PVM pVM, unsigned idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount)
     2033GMMR0DECL(int) GMMR0AllocatePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount)
    20372034{
    20382035    LogFlow(("GMMR0AllocatePages: pVM=%p cPages=%#x paPages=%p enmAccount=%d\n", pVM, cPages, paPages, enmAccount));
     
    20432040    PGMM pGMM;
    20442041    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    2045     PGVM pGVM = GVMMR0ByVM(pVM);
    2046     if (RT_UNLIKELY(!pGVM))
    2047         return VERR_INVALID_PARAMETER;
    2048     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    2049         return VERR_NOT_OWNER;
     2042    PGVM pGVM;
     2043    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     2044    if (RT_FAILURE(rc))
     2045        return rc;
    20502046
    20512047    AssertPtrReturn(paPages, VERR_INVALID_PARAMETER);
     
    20662062    }
    20672063
    2068     int rc = RTSemFastMutexRequest(pGMM->Mtx);
     2064    rc = RTSemFastMutexRequest(pGMM->Mtx);
    20692065    AssertRC(rc);
    20702066
     
    21042100 * @param   pReq            The request packet.
    21052101 */
    2106 GMMR0DECL(int) GMMR0AllocatePagesReq(PVM pVM, unsigned idCpu, PGMMALLOCATEPAGESREQ pReq)
     2102GMMR0DECL(int) GMMR0AllocatePagesReq(PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq)
    21072103{
    21082104    /*
     
    24302426 * @thread  EMT.
    24312427 */
    2432 GMMR0DECL(int) GMMR0FreePages(PVM pVM, unsigned idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount)
     2428GMMR0DECL(int) GMMR0FreePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount)
    24332429{
    24342430    LogFlow(("GMMR0FreePages: pVM=%p cPages=%#x paPages=%p enmAccount=%d\n", pVM, cPages, paPages, enmAccount));
     
    24392435    PGMM pGMM;
    24402436    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    2441     PGVM pGVM = GVMMR0ByVM(pVM);
    2442     if (RT_UNLIKELY(!pGVM))
    2443         return VERR_INVALID_PARAMETER;
    2444     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    2445         return VERR_NOT_OWNER;
     2437    PGVM pGVM;
     2438    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     2439    if (RT_FAILURE(rc))
     2440        return rc;
    24462441
    24472442    AssertPtrReturn(paPages, VERR_INVALID_PARAMETER);
     
    24572452     * Take the semaphore and call the worker function.
    24582453     */
    2459     int rc = RTSemFastMutexRequest(pGMM->Mtx);
     2454    rc = RTSemFastMutexRequest(pGMM->Mtx);
    24602455    AssertRC(rc);
    24612456
     
    24762471 * @param   pReq            The request packet.
    24772472 */
    2478 GMMR0DECL(int) GMMR0FreePagesReq(PVM pVM, unsigned idCpu, PGMMFREEPAGESREQ pReq)
     2473GMMR0DECL(int) GMMR0FreePagesReq(PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq)
    24792474{
    24802475    /*
     
    25182513 * @thread  EMT.
    25192514 */
    2520 GMMR0DECL(int) GMMR0BalloonedPages(PVM pVM, unsigned idCpu, uint32_t cBalloonedPages, uint32_t cPagesToFree, PGMMFREEPAGEDESC paPages, bool fCompleted)
     2515GMMR0DECL(int) GMMR0BalloonedPages(PVM pVM, VMCPUID idCpu, uint32_t cBalloonedPages, uint32_t cPagesToFree, PGMMFREEPAGEDESC paPages, bool fCompleted)
    25212516{
    25222517    LogFlow(("GMMR0BalloonedPages: pVM=%p cBalloonedPages=%#x cPagestoFree=%#x paPages=%p enmAccount=%d fCompleted=%RTbool\n",
     
    25282523    PGMM pGMM;
    25292524    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    2530     PGVM pGVM = GVMMR0ByVM(pVM);
    2531     if (RT_UNLIKELY(!pGVM))
    2532         return VERR_INVALID_PARAMETER;
    2533     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    2534         return VERR_NOT_OWNER;
     2525    PGVM pGVM;
     2526    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     2527    if (RT_FAILURE(rc))
     2528        return rc;
    25352529
    25362530    AssertPtrReturn(paPages, VERR_INVALID_PARAMETER);
     
    25462540     * Take the sempahore and do some more validations.
    25472541     */
    2548     int rc = RTSemFastMutexRequest(pGMM->Mtx);
     2542    rc = RTSemFastMutexRequest(pGMM->Mtx);
    25492543    AssertRC(rc);
    25502544    if (pGVM->gmm.s.Allocated.cBasePages >= cPagesToFree)
     
    26042598 * @param   pReq            The request packet.
    26052599 */
    2606 GMMR0DECL(int) GMMR0BalloonedPagesReq(PVM pVM, unsigned idCpu, PGMMBALLOONEDPAGESREQ pReq)
     2600GMMR0DECL(int) GMMR0BalloonedPagesReq(PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq)
    26072601{
    26082602    /*
     
    26332627 * @thread  EMT.
    26342628 */
    2635 GMMR0DECL(int) GMMR0DeflatedBalloon(PVM pVM, unsigned idCpu, uint32_t cPages)
     2629GMMR0DECL(int) GMMR0DeflatedBalloon(PVM pVM, VMCPUID idCpu, uint32_t cPages)
    26362630{
    26372631    LogFlow(("GMMR0DeflatedBalloon: pVM=%p cPages=%#x\n", pVM, cPages));
     
    26422636    PGMM pGMM;
    26432637    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    2644     PGVM pGVM = GVMMR0ByVM(pVM);
    2645     if (RT_UNLIKELY(!pGVM))
    2646         return VERR_INVALID_PARAMETER;
    2647     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    2648         return VERR_NOT_OWNER;
     2638    PGVM pGVM;
     2639    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     2640    if (RT_FAILURE(rc))
     2641        return rc;
    26492642
    26502643    AssertMsgReturn(cPages < RT_BIT(32 - PAGE_SHIFT), ("%#x\n", cPages), VERR_INVALID_PARAMETER);
     
    26532646     * Take the sempahore and do some more validations.
    26542647     */
    2655     int rc = RTSemFastMutexRequest(pGMM->Mtx);
     2648    rc = RTSemFastMutexRequest(pGMM->Mtx);
    26562649    AssertRC(rc);
    26572650
     
    28242817 * @thread  EMT
    28252818 */
    2826 GMMR0DECL(int) GMMR0MapUnmapChunk(PVM pVM, unsigned idCpu, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3)
     2819GMMR0DECL(int) GMMR0MapUnmapChunk(PVM pVM, VMCPUID idCpu, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3)
    28272820{
    28282821    LogFlow(("GMMR0MapUnmapChunk: pVM=%p idChunkMap=%#x idChunkUnmap=%#x ppvR3=%p\n",
     
    28342827    PGMM pGMM;
    28352828    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    2836     PGVM pGVM = GVMMR0ByVM(pVM);
    2837     if (RT_UNLIKELY(!pGVM))
    2838         return VERR_INVALID_PARAMETER;
    2839     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    2840         return VERR_NOT_OWNER;
     2829    PGVM pGVM;
     2830    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     2831    if (RT_FAILURE(rc))
     2832        return rc;
    28412833
    28422834    AssertCompile(NIL_GMM_CHUNKID == 0);
     
    28622854     * it it's limits, so, no problem here.
    28632855     */
    2864     int rc = RTSemFastMutexRequest(pGMM->Mtx);
     2856    rc = RTSemFastMutexRequest(pGMM->Mtx);
    28652857    AssertRC(rc);
    28662858
     
    29092901 * @param   pReq            The request packet.
    29102902 */
    2911 GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PVM pVM, unsigned idCpu, PGMMMAPUNMAPCHUNKREQ pReq)
     2903GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PVM pVM, VMCPUID idCpu, PGMMMAPUNMAPCHUNKREQ pReq)
    29122904{
    29132905    /*
     
    29332925 * @param   pvR3            Pointer to the chunk size memory block to lock down.
    29342926 */
    2935 GMMR0DECL(int) GMMR0SeedChunk(PVM pVM, unsigned idCpu, RTR3PTR pvR3)
     2927GMMR0DECL(int) GMMR0SeedChunk(PVM pVM, VMCPUID idCpu, RTR3PTR pvR3)
    29362928{
    29372929    /*
     
    29402932    PGMM pGMM;
    29412933    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    2942     PGVM pGVM = GVMMR0ByVM(pVM);
    2943     if (RT_UNLIKELY(!pGVM))
    2944         return VERR_INVALID_PARAMETER;
    2945     if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf()))
    2946         return VERR_NOT_OWNER;
     2934    PGVM pGVM;
     2935    int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     2936    if (RT_FAILURE(rc))
     2937        return rc;
    29472938
    29482939    AssertPtrReturn(pvR3, VERR_INVALID_POINTER);
     
    29592950     */
    29602951    RTR0MEMOBJ MemObj;
    2961     int rc = RTR0MemObjLockUser(&MemObj, pvR3, GMM_CHUNK_SIZE, NIL_RTR0PROCESS);
     2952    rc = RTR0MemObjLockUser(&MemObj, pvR3, GMM_CHUNK_SIZE, NIL_RTR0PROCESS);
    29622953    if (RT_SUCCESS(rc))
    29632954    {
  • trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp

    r19435 r19454  
    5858#include <iprt/mem.h>
    5959#include <iprt/memobj.h>
     60#include <iprt/mp.h>
    6061
    6162
     
    15161517
    15171518    PGVMCPU pCurGVCpu = &pGVM->aCpus[idCpu];
    1518     Assert(idCpu < pGVM->cCpus);
    15191519    Assert(!pCurGVCpu->gvmm.s.u64HaltExpire);
    15201520
     
    15791579DECLINLINE(int) gvmmR0SchedWakeUpOne(PGVM pGVM, PGVMCPU pGVCpu)
    15801580{
    1581     int rc;
    15821581    pGVM->gvmm.s.StatsSched.cWakeUpCalls++;
    15831582
     
    15911590     */
    15921591/** @todo we can optimize some of that by means of the pVCpu->enmState now. */
     1592    int rc;
    15931593    if (pGVCpu->gvmm.s.u64HaltExpire)
    15941594    {
     
    16691669DECLINLINE(int) gvmmR0SchedPokeOne(PGVM pGVM, PVMCPU pVCpu)
    16701670{
    1671     if (pVCpu->enmState != VMCPUSTATE_STARTED_EXEC)
     1671    pGVM->gvmm.s.StatsSched.cPokeCalls++;
     1672
     1673    RTCPUID idHostCpu = pVCpu->idHostCpu;
     1674    if (    idHostCpu == NIL_RTCPUID
     1675        ||  VMCPU_GET_STATE(pVCpu) != VMCPUSTATE_STARTED_EXEC)
     1676    {
     1677        pGVM->gvmm.s.StatsSched.cPokeNotBusy++;
    16721678        return VINF_GVM_NOT_BUSY_IN_GC;
    1673 
    1674     /** @todo do the actual poking, need to get the current cpu id from HWACC or
    1675      *        somewhere and then call RTMpPokeCpu(). */
    1676 
     1679    }
     1680
     1681    RTMpPokeCpu(idHostCpu);
    16771682    return VINF_SUCCESS;
    16781683}
     
    18991904            pStats->SchedSum.cWakeUpNotHalted  += pGVM->gvmm.s.StatsSched.cWakeUpNotHalted;
    19001905            pStats->SchedSum.cWakeUpWakeUps    += pGVM->gvmm.s.StatsSched.cWakeUpWakeUps;
     1906
     1907            pStats->SchedSum.cPokeCalls        += pGVM->gvmm.s.StatsSched.cPokeCalls;
     1908            pStats->SchedSum.cPokeNotBusy      += pGVM->gvmm.s.StatsSched.cPokeNotBusy;
    19011909
    19021910            pStats->SchedSum.cPollCalls        += pGVM->gvmm.s.StatsSched.cPollCalls;
     
    19701978        MAYBE_RESET_FIELD(cWakeUpNotHalted);
    19711979        MAYBE_RESET_FIELD(cWakeUpWakeUps);
     1980        MAYBE_RESET_FIELD(cPokeCalls);
     1981        MAYBE_RESET_FIELD(cPokeNotBusy);
    19721982        MAYBE_RESET_FIELD(cPollCalls);
    19731983        MAYBE_RESET_FIELD(cPollHalts);
     
    20092019                MAYBE_RESET_FIELD(cWakeUpNotHalted);
    20102020                MAYBE_RESET_FIELD(cWakeUpWakeUps);
     2021                MAYBE_RESET_FIELD(cPokeCalls);
     2022                MAYBE_RESET_FIELD(cPokeNotBusy);
    20112023                MAYBE_RESET_FIELD(cPollCalls);
    20122024                MAYBE_RESET_FIELD(cPollHalts);
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r19434 r19454  
    526526 * @param   pVM             The VM to operate on.
    527527 *                          The return code is stored in pVM->vmm.s.iLastGZRc.
    528  * @param   idCpu           VMCPU id.
     528 * @param   idCpu           The Virtual CPU ID of the calling EMT.
    529529 * @param   enmOperation    Which operation to execute.
    530530 * @remarks Assume called with interrupts _enabled_.
    531531 */
    532 VMMR0DECL(void) VMMR0EntryFast(PVM pVM, unsigned idCpu, VMMR0OPERATION enmOperation)
    533 {
    534     PVMCPU pVCpu = &pVM->aCpus[idCpu];
    535 
     532VMMR0DECL(void) VMMR0EntryFast(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation)
     533{
    536534    if (RT_UNLIKELY(idCpu >= pVM->cCPUs))
    537535    {
     
    539537        return;
    540538    }
     539    PVMCPU pVCpu = &pVM->aCpus[idCpu];
    541540
    542541    switch (enmOperation)
     
    552551            {
    553552                RTCCUINTREG uFlags = ASMIntDisableFlags();
    554                 int rc;
    555                 bool fVTxDisabled;
     553                int         rc;
     554                bool        fVTxDisabled;
    556555
    557556                if (RT_UNLIKELY(pVM->cCPUs > 1))
     
    577576                }
    578577
     578                ASMAtomicWriteU32(&pVCpu->idHostCpu, RTMpCpuId());
     579                VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED_EXEC);
     580
    579581                TMNotifyStartOfExecution(pVCpu);
    580582                rc = pVM->vmm.s.pfnHostToGuestR0(pVM);
    581583                pVM->vmm.s.iLastGZRc = rc;
    582584                TMNotifyEndOfExecution(pVCpu);
     585
     586                VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED);
     587                ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
    583588
    584589                /* Re-enable VT-x if previously turned off. */
     
    614619        {
    615620            int rc;
    616             PVMCPU pVCpu = &pVM->aCpus[idCpu];
    617621
    618622            STAM_COUNTER_INC(&pVM->vmm.s.StatRunRC);
     
    621625            RTCCUINTREG uFlags = ASMIntDisableFlags();
    622626#endif
     627            ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
     628
    623629            if (!HWACCMR0SuspendPending())
    624630            {
     
    637643            }
    638644            pVM->vmm.s.iLastGZRc = rc;
     645
     646            ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
    639647#ifndef RT_OS_WINDOWS /** @todo check other hosts */
    640648            ASMSetFlags(uFlags);
     
    694702 * @returns VBox status code.
    695703 * @param   pVM             The VM to operate on.
    696  * @param   idCpu           VMCPU id.
     704 * @param   idCpu           Virtual CPU ID argument. Must be NIL_VMCPUID if pVM
     705 *                          is NIL_RTR0PTR, and may be NIL_VMCPUID if it isn't
    697706 * @param   enmOperation    Which operation to execute.
    698707 * @param   pReqHdr         This points to a SUPVMMR0REQHDR packet. Optional.
     
    702711 * @remarks Assume called with interrupts _enabled_.
    703712 */
    704 static int vmmR0EntryExWorker(PVM pVM, unsigned idCpu, VMMR0OPERATION enmOperation, PSUPVMMR0REQHDR pReqHdr, uint64_t u64Arg, PSUPDRVSESSION pSession)
     713static int vmmR0EntryExWorker(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation, PSUPVMMR0REQHDR pReqHdr, uint64_t u64Arg, PSUPDRVSESSION pSession)
    705714{
    706715    /*
     
    724733        }
    725734
    726         if (RT_UNLIKELY(idCpu >= pVM->cCPUs))
     735        if (RT_UNLIKELY(idCpu >= pVM->cCPUs && idCpu != NIL_VMCPUID))
    727736        {
    728             SUPR0Printf("vmmR0EntryExWorker: Invalid idCpu (%d vs cCPUs=%d\n", idCpu, pVM->cCPUs);
     737            SUPR0Printf("vmmR0EntryExWorker: Invalid idCpu (%u vs cCPUs=%u)\n", idCpu, pVM->cCPUs);
    729738            return VERR_INVALID_PARAMETER;
    730739        }
    731740    }
     741    else if (RT_UNLIKELY(idCpu != NIL_VMCPUID))
     742    {
     743        SUPR0Printf("vmmR0EntryExWorker: Invalid idCpu=%u\n", idCpu);
     744        return VERR_INVALID_PARAMETER;
     745    }
     746
    732747
    733748    switch (enmOperation)
     
    737752         */
    738753        case VMMR0_DO_GVMM_CREATE_VM:
    739             if (pVM || u64Arg)
     754            if (pVM || u64Arg || idCpu != NIL_VMCPUID)
    740755                return VERR_INVALID_PARAMETER;
    741756            return GVMMR0CreateVMReq((PGVMMCREATEVMREQ)pReqHdr);
     
    817832
    818833        /*
    819          * Switch to GC to execute Hypervisor function.
     834         * Switch to RC to execute Hypervisor function.
    820835         */
    821836        case VMMR0_DO_CALL_HYPERVISOR:
     
    855870         */
    856871        case VMMR0_DO_PGM_ALLOCATE_HANDY_PAGES:
     872            if (idCpu == NIL_VMCPUID)
     873                return VERR_INVALID_CPU_ID;
    857874            return PGMR0PhysAllocateHandyPages(pVM, &pVM->aCpus[idCpu]);
    858875
     
    907924        case VMMR0_DO_GCFGM_QUERY_VALUE:
    908925        {
    909             if (pVM || !pReqHdr || u64Arg)
     926            if (pVM || !pReqHdr || u64Arg || idCpu != NIL_VMCPUID)
    910927                return VERR_INVALID_PARAMETER;
    911928            PGCFGMVALUEREQ pReq = (PGCFGMVALUEREQ)pReqHdr;
     
    935952        {
    936953            PINTNETOPENREQ pReq = (PINTNETOPENREQ)pReqHdr;
    937             if (u64Arg || !pReq || !vmmR0IsValidSession(pVM, pReq->pSession, pSession))
     954            if (u64Arg || !pReq || !vmmR0IsValidSession(pVM, pReq->pSession, pSession) || idCpu != NIL_VMCPUID)
    938955                return VERR_INVALID_PARAMETER;
    939956            if (!g_pIntNet)
     
    943960
    944961        case VMMR0_DO_INTNET_IF_CLOSE:
    945             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFCLOSEREQ)pReqHdr)->pSession, pSession))
     962            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFCLOSEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    946963                return VERR_INVALID_PARAMETER;
    947964            if (!g_pIntNet)
     
    950967
    951968        case VMMR0_DO_INTNET_IF_GET_RING3_BUFFER:
    952             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFGETRING3BUFFERREQ)pReqHdr)->pSession, pSession))
     969            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFGETRING3BUFFERREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    953970                return VERR_INVALID_PARAMETER;
    954971            if (!g_pIntNet)
     
    957974
    958975        case VMMR0_DO_INTNET_IF_SET_PROMISCUOUS_MODE:
    959             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETPROMISCUOUSMODEREQ)pReqHdr)->pSession, pSession))
     976            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETPROMISCUOUSMODEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    960977                return VERR_INVALID_PARAMETER;
    961978            if (!g_pIntNet)
     
    964981
    965982        case VMMR0_DO_INTNET_IF_SET_MAC_ADDRESS:
    966             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETMACADDRESSREQ)pReqHdr)->pSession, pSession))
     983            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETMACADDRESSREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    967984                return VERR_INVALID_PARAMETER;
    968985            if (!g_pIntNet)
     
    971988
    972989        case VMMR0_DO_INTNET_IF_SET_ACTIVE:
    973             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETACTIVEREQ)pReqHdr)->pSession, pSession))
     990            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSETACTIVEREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    974991                return VERR_INVALID_PARAMETER;
    975992            if (!g_pIntNet)
     
    978995
    979996        case VMMR0_DO_INTNET_IF_SEND:
    980             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSENDREQ)pReqHdr)->pSession, pSession))
     997            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFSENDREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    981998                return VERR_INVALID_PARAMETER;
    982999            if (!g_pIntNet)
     
    9851002
    9861003        case VMMR0_DO_INTNET_IF_WAIT:
    987             if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFWAITREQ)pReqHdr)->pSession, pSession))
     1004            if (u64Arg || !pReqHdr || !vmmR0IsValidSession(pVM, ((PINTNETIFWAITREQ)pReqHdr)->pSession, pSession) || idCpu != NIL_VMCPUID)
    9881005                return VERR_INVALID_PARAMETER;
    9891006            if (!g_pIntNet)
     
    10081025#if HC_ARCH_BITS == 32 && defined(VBOX_WITH_64_BITS_GUESTS) && !defined(VBOX_WITH_HYBRID_32BIT_KERNEL)
    10091026        case VMMR0_DO_TEST_SWITCHER3264:
     1027            if (idCpu == NIL_VMCPUID)
     1028                return VERR_INVALID_CPU_ID;
    10101029            return HWACCMR0TestSwitcher3264(pVM);
    10111030#endif
     
    10271046{
    10281047    PVM                 pVM;
    1029     unsigned            idCpu;
     1048    VMCPUID             idCpu;
    10301049    VMMR0OPERATION      enmOperation;
    10311050    PSUPVMMR0REQHDR     pReq;
     
    10581077 * @returns VBox status code.
    10591078 * @param   pVM             The VM to operate on.
    1060  * @param   idCpu           VMCPU id.
     1079 * @param   idCpu           Virtual CPU ID argument. Must be NIL_VMCPUID if pVM
     1080 *                          is NIL_RTR0PTR, and may be NIL_VMCPUID if it isn't
    10611081 * @param   enmOperation    Which operation to execute.
    10621082 * @param   pReq            This points to a SUPVMMR0REQHDR packet. Optional.
     
    10651085 * @remarks Assume called with interrupts _enabled_.
    10661086 */
    1067 VMMR0DECL(int) VMMR0EntryEx(PVM pVM, unsigned idCpu, VMMR0OPERATION enmOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession)
     1087VMMR0DECL(int) VMMR0EntryEx(PVM pVM, VMCPUID idCpu, VMMR0OPERATION enmOperation, PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession)
    10681088{
    10691089    /*
     
    10721092     */
    10731093    if (    VALID_PTR(pVM)
    1074         &&  pVM->pVMR0)
     1094        &&  pVM->pVMR0
     1095        &&  idCpu < pVM->cCPUs)
    10751096    {
    10761097        switch (enmOperation)
  • trunk/src/VBox/VMM/testcase/tstGlobalConfig.cpp

    r19257 r19454  
    107107    {
    108108        Req.pSession = pSession;
    109         rc = SUPCallVMMR0Ex(NIL_RTR0PTR, 0 /* VCPU 0 */, enmOp, 0, &Req.Hdr);
     109        rc = SUPCallVMMR0Ex(NIL_RTR0PTR, NIL_VMCPUID, enmOp, 0, &Req.Hdr);
    110110        if (RT_SUCCESS(rc))
    111111        {
Note: See TracChangeset for help on using the changeset viewer.

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