VirtualBox

Changeset 68007 in vbox


Ignore:
Timestamp:
Jul 17, 2017 5:07:37 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
117019
Message:

VMMR0,GVMMR0: Adding GVM parameter to the calls.

Location:
trunk
Files:
4 edited

Legend:

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

    r67994 r68007  
    400400GMMR0DECL(void) GMMR0InitPerVMData(PGVM pGVM);
    401401GMMR0DECL(void) GMMR0CleanupVM(PGVM pGVM);
    402 GMMR0DECL(int)  GMMR0InitialReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,
     402GMMR0DECL(int)  GMMR0InitialReservation(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,
    403403                                        GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority);
    404 GMMR0DECL(int)  GMMR0UpdateReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages);
     404GMMR0DECL(int)  GMMR0UpdateReservation(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages);
    405405GMMR0DECL(int)  GMMR0AllocateHandyPages(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cPagesToUpdate,
    406406                                        uint32_t cPagesToAlloc, PGMMPAGEDESC paPages);
    407 GMMR0DECL(int)  GMMR0AllocatePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount);
     407GMMR0DECL(int)  GMMR0AllocatePages(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount);
    408408GMMR0DECL(int)  GMMR0AllocateLargePage(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cbPage, uint32_t *pIdPage, RTHCPHYS *pHCPhys);
    409 GMMR0DECL(int)  GMMR0FreePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount);
    410 GMMR0DECL(int)  GMMR0FreeLargePage(PVM pVM, VMCPUID idCpu, uint32_t idPage);
    411 GMMR0DECL(int)  GMMR0BalloonedPages(PVM pVM, VMCPUID idCpu, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages);
    412 GMMR0DECL(int)  GMMR0MapUnmapChunk(PVM pVM, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3);
    413 GMMR0DECL(int)  GMMR0SeedChunk(PVM pVM, VMCPUID idCpu, RTR3PTR pvR3);
    414 GMMR0DECL(int)  GMMR0RegisterSharedModule(PVM pVM, VMCPUID idCpu, VBOXOSFAMILY enmGuestOS, char *pszModuleName, char *pszVersion,
    415                                           RTGCPTR GCBaseAddr,  uint32_t cbModule, uint32_t cRegions,
     409GMMR0DECL(int)  GMMR0FreePages(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount);
     410GMMR0DECL(int)  GMMR0FreeLargePage(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t idPage);
     411GMMR0DECL(int)  GMMR0BalloonedPages(PGVM pGVM, PVM pVM, VMCPUID idCpu, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages);
     412GMMR0DECL(int)  GMMR0MapUnmapChunk(PGVM pGVM, PVM pVM, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3);
     413GMMR0DECL(int)  GMMR0SeedChunk(PGVM pGVM, PVM pVM, VMCPUID idCpu, RTR3PTR pvR3);
     414GMMR0DECL(int)  GMMR0RegisterSharedModule(PGVM pGVM, PVM pVM, VMCPUID idCpu, VBOXOSFAMILY enmGuestOS, char *pszModuleName,
     415                                          char *pszVersion, RTGCPTR GCBaseAddr,  uint32_t cbModule, uint32_t cRegions,
    416416                                          struct VMMDEVSHAREDREGIONDESC const *paRegions);
    417 GMMR0DECL(int)  GMMR0UnregisterSharedModule(PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule);
    418 GMMR0DECL(int)  GMMR0UnregisterAllSharedModules(PVM pVM, VMCPUID idCpu);
    419 GMMR0DECL(int)  GMMR0CheckSharedModules(PVM pVM, PVMCPU pVCpu);
    420 GMMR0DECL(int)  GMMR0ResetSharedModules(PVM pVM, VMCPUID idCpu);
    421 GMMR0DECL(int)  GMMR0CheckSharedModulesStart(PVM pVM);
    422 GMMR0DECL(int)  GMMR0CheckSharedModulesEnd(PVM pVM);
     417GMMR0DECL(int)  GMMR0UnregisterSharedModule(PGVM pGVM, PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion,
     418                                            RTGCPTR GCBaseAddr, uint32_t cbModule);
     419GMMR0DECL(int)  GMMR0UnregisterAllSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu);
     420GMMR0DECL(int)  GMMR0CheckSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu);
     421GMMR0DECL(int)  GMMR0ResetSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu);
    423422GMMR0DECL(int)  GMMR0QueryStatistics(PGMMSTATS pStats, PSUPDRVSESSION pSession);
    424423GMMR0DECL(int)  GMMR0ResetStatistics(PCGMMSTATS pStats, PSUPDRVSESSION pSession);
     
    441440typedef GMMINITIALRESERVATIONREQ *PGMMINITIALRESERVATIONREQ;
    442441
    443 GMMR0DECL(int)  GMMR0InitialReservationReq(PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq);
     442GMMR0DECL(int)  GMMR0InitialReservationReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq);
    444443
    445444
     
    459458typedef GMMUPDATERESERVATIONREQ *PGMMUPDATERESERVATIONREQ;
    460459
    461 GMMR0DECL(int)  GMMR0UpdateReservationReq(PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq);
     460GMMR0DECL(int)  GMMR0UpdateReservationReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq);
    462461
    463462
     
    480479typedef GMMALLOCATEPAGESREQ *PGMMALLOCATEPAGESREQ;
    481480
    482 GMMR0DECL(int)  GMMR0AllocatePagesReq(PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq);
     481GMMR0DECL(int)  GMMR0AllocatePagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq);
    483482
    484483
     
    501500typedef GMMFREEPAGESREQ *PGMMFREEPAGESREQ;
    502501
    503 GMMR0DECL(int)  GMMR0FreePagesReq(PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq);
     502GMMR0DECL(int)  GMMR0FreePagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq);
    504503
    505504/**
     
    519518typedef GMMBALLOONEDPAGESREQ *PGMMBALLOONEDPAGESREQ;
    520519
    521 GMMR0DECL(int)  GMMR0BalloonedPagesReq(PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq);
     520GMMR0DECL(int)  GMMR0BalloonedPagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq);
    522521
    523522
     
    544543typedef GMMMEMSTATSREQ *PGMMMEMSTATSREQ;
    545544
    546 GMMR0DECL(int)  GMMR0QueryHypervisorMemoryStatsReq(PVM pVM, PGMMMEMSTATSREQ pReq);
    547 GMMR0DECL(int)  GMMR0QueryMemoryStatsReq(PVM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq);
     545GMMR0DECL(int)  GMMR0QueryHypervisorMemoryStatsReq(PGMMMEMSTATSREQ pReq);
     546GMMR0DECL(int)  GMMR0QueryMemoryStatsReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq);
    548547
    549548/**
     
    565564typedef GMMMAPUNMAPCHUNKREQ *PGMMMAPUNMAPCHUNKREQ;
    566565
    567 GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PVM pVM, PGMMMAPUNMAPCHUNKREQ pReq);
     566GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PGVM pGVM, PVM pVM, PGMMMAPUNMAPCHUNKREQ pReq);
    568567
    569568
     
    582581typedef GMMFREELARGEPAGEREQ *PGMMFREELARGEPAGEREQ;
    583582
    584 GMMR0DECL(int) GMMR0FreeLargePageReq(PVM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq);
     583GMMR0DECL(int) GMMR0FreeLargePageReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq);
    585584
    586585/** Maximum length of the shared module name string, terminator included. */
     
    617616typedef GMMREGISTERSHAREDMODULEREQ *PGMMREGISTERSHAREDMODULEREQ;
    618617
    619 GMMR0DECL(int) GMMR0RegisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq);
     618GMMR0DECL(int) GMMR0RegisterSharedModuleReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq);
    620619
    621620/**
     
    704703typedef GMMUNREGISTERSHAREDMODULEREQ *PGMMUNREGISTERSHAREDMODULEREQ;
    705704
    706 GMMR0DECL(int) GMMR0UnregisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq);
     705GMMR0DECL(int) GMMR0UnregisterSharedModuleReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq);
    707706
    708707#if defined(VBOX_STRICT) && HC_ARCH_BITS == 64
     
    723722typedef GMMFINDDUPLICATEPAGEREQ *PGMMFINDDUPLICATEPAGEREQ;
    724723
    725 GMMR0DECL(int) GMMR0FindDuplicatePageReq(PVM pVM, PGMMFINDDUPLICATEPAGEREQ pReq);
     724GMMR0DECL(int) GMMR0FindDuplicatePageReq(PGVM pGVM, PVM pVM, PGMMFINDDUPLICATEPAGEREQ pReq);
    726725#endif /* VBOX_STRICT && HC_ARCH_BITS == 64 */
    727726
     
    744743typedef GMMQUERYSTATISTICSSREQ *PGMMQUERYSTATISTICSSREQ;
    745744
    746 GMMR0DECL(int)      GMMR0QueryStatisticsReq(PVM pVM, PGMMQUERYSTATISTICSSREQ pReq);
     745GMMR0DECL(int)      GMMR0QueryStatisticsReq(PGVM pGVM, PVM pVM, PGMMQUERYSTATISTICSSREQ pReq);
    747746
    748747
     
    765764typedef GMMRESETSTATISTICSSREQ *PGMMRESETSTATISTICSSREQ;
    766765
    767 GMMR0DECL(int)      GMMR0ResetStatisticsReq(PVM pVM, PGMMRESETSTATISTICSSREQ pReq);
     766GMMR0DECL(int)      GMMR0ResetStatisticsReq(PGVM pGVM, PVM pVM, PGMMRESETSTATISTICSSREQ pReq);
    768767
    769768
  • trunk/src/VBox/VMM/VMMR0/GMMR0.cpp

    r67994 r68007  
    15401540 * @retval  VERR_GMM_
    15411541 *
     1542 * @param   pGVM            The global (ring-0) VM structure.
    15421543 * @param   pVM             The cross context VM structure.
    1543  * @param   idCpu           The VCPU id.
     1544 * @param   idCpu           The VCPU id - must be zero.
    15441545 * @param   cBasePages      The number of pages that may be allocated for the base RAM and ROMs.
    15451546 *                          This does not include MMIO2 and similar.
     
    15501551 * @param   enmPriority     The priority in an out-of-memory situation.
    15511552 *
    1552  * @thread  The creator thread / EMT.
    1553  */
    1554 GMMR0DECL(int) GMMR0InitialReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,
    1555                                        GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority)
    1556 {
    1557     LogFlow(("GMMR0InitialReservation: pVM=%p cBasePages=%#llx cShadowPages=%#x cFixedPages=%#x enmPolicy=%d enmPriority=%d\n",
    1558              pVM, cBasePages, cShadowPages, cFixedPages, enmPolicy, enmPriority));
     1553 * @thread  The creator thread / EMT(0).
     1554 */
     1555GMMR0DECL(int) GMMR0InitialReservation(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages,
     1556                                       uint32_t cFixedPages, GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority)
     1557{
     1558    LogFlow(("GMMR0InitialReservation: pGVM=%p pVM=%p cBasePages=%#llx cShadowPages=%#x cFixedPages=%#x enmPolicy=%d enmPriority=%d\n",
     1559             pGVM, pVM, cBasePages, cShadowPages, cFixedPages, enmPolicy, enmPriority));
    15591560
    15601561    /*
    15611562     * Validate, get basics and take the semaphore.
    15621563     */
     1564    AssertReturn(idCpu == 0, VERR_INVALID_CPU_ID);
    15631565    PGMM pGMM;
    15641566    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    1565     PGVM pGVM;
    1566     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     1567    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    15671568    if (RT_FAILURE(rc))
    15681569        return rc;
     
    16171618 *
    16181619 * @returns see GMMR0InitialReservation.
     1620 * @param   pGVM            The global (ring-0) VM structure.
    16191621 * @param   pVM             The cross context VM structure.
    16201622 * @param   idCpu           The VCPU id.
    16211623 * @param   pReq            Pointer to the request packet.
    16221624 */
    1623 GMMR0DECL(int) GMMR0InitialReservationReq(PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq)
     1625GMMR0DECL(int) GMMR0InitialReservationReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq)
    16241626{
    16251627    /*
     
    16301632    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
    16311633
    1632     return GMMR0InitialReservation(pVM, idCpu, pReq->cBasePages, pReq->cShadowPages, pReq->cFixedPages, pReq->enmPolicy, pReq->enmPriority);
     1634    return GMMR0InitialReservation(pGVM, pVM, idCpu, pReq->cBasePages, pReq->cShadowPages,
     1635                                   pReq->cFixedPages, pReq->enmPolicy, pReq->enmPriority);
    16331636}
    16341637
     
    16401643 * @retval  VERR_GMM_MEMORY_RESERVATION_DECLINED
    16411644 *
     1645 * @param   pGVM            The global (ring-0) VM structure.
    16421646 * @param   pVM             The cross context VM structure.
    16431647 * @param   idCpu           The VCPU id.
     
    16481652 *                          hyper heap, MMIO2 and similar.
    16491653 *
    1650  * @thread  EMT.
    1651  */
    1652 GMMR0DECL(int) GMMR0UpdateReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages)
    1653 {
    1654     LogFlow(("GMMR0UpdateReservation: pVM=%p cBasePages=%#llx cShadowPages=%#x cFixedPages=%#x\n",
    1655              pVM, cBasePages, cShadowPages, cFixedPages));
     1654 * @thread  EMT(idCpu)
     1655 */
     1656GMMR0DECL(int) GMMR0UpdateReservation(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint64_t cBasePages,
     1657                                      uint32_t cShadowPages, uint32_t cFixedPages)
     1658{
     1659    LogFlow(("GMMR0UpdateReservation: pGVM=%p pVM=%p cBasePages=%#llx cShadowPages=%#x cFixedPages=%#x\n",
     1660             pGVM, pVM, cBasePages, cShadowPages, cFixedPages));
    16561661
    16571662    /*
     
    16601665    PGMM pGMM;
    16611666    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    1662     PGVM pGVM;
    1663     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     1667    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    16641668    if (RT_FAILURE(rc))
    16651669        return rc;
     
    17111715 *
    17121716 * @returns see GMMR0UpdateReservation.
     1717 * @param   pGVM            The global (ring-0) VM structure.
    17131718 * @param   pVM             The cross context VM structure.
    17141719 * @param   idCpu           The VCPU id.
    17151720 * @param   pReq            Pointer to the request packet.
    17161721 */
    1717 GMMR0DECL(int) GMMR0UpdateReservationReq(PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq)
     1722GMMR0DECL(int) GMMR0UpdateReservationReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq)
    17181723{
    17191724    /*
     
    17241729    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
    17251730
    1726     return GMMR0UpdateReservation(pVM, idCpu, pReq->cBasePages, pReq->cShadowPages, pReq->cFixedPages);
     1731    return GMMR0UpdateReservation(pGVM, pVM, idCpu, pReq->cBasePages, pReq->cShadowPages, pReq->cFixedPages);
    17271732}
    17281733
     
    29182923 *          that is we're trying to allocate more than we've reserved.
    29192924 *
     2925 * @param   pGVM        The global (ring-0) VM structure.
    29202926 * @param   pVM         The cross context VM structure.
    29212927 * @param   idCpu       The VCPU id.
     
    29282934 * @thread  EMT.
    29292935 */
    2930 GMMR0DECL(int) GMMR0AllocatePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount)
    2931 {
    2932     LogFlow(("GMMR0AllocatePages: pVM=%p cPages=%#x paPages=%p enmAccount=%d\n", pVM, cPages, paPages, enmAccount));
     2936GMMR0DECL(int) GMMR0AllocatePages(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount)
     2937{
     2938    LogFlow(("GMMR0AllocatePages: pGVM=%p pVM=%p cPages=%#x paPages=%p enmAccount=%d\n", pGVM, pVM, cPages, paPages, enmAccount));
    29332939
    29342940    /*
     
    29372943    PGMM pGMM;
    29382944    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    2939     PGVM pGVM;
    2940     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     2945    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    29412946    if (RT_FAILURE(rc))
    29422947        return rc;
     
    29842989 *
    29852990 * @returns see GMMR0AllocatePages.
     2991 * @param   pGVM        The global (ring-0) VM structure.
    29862992 * @param   pVM         The cross context VM structure.
    29872993 * @param   idCpu       The VCPU id.
    29882994 * @param   pReq        Pointer to the request packet.
    29892995 */
    2990 GMMR0DECL(int) GMMR0AllocatePagesReq(PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq)
     2996GMMR0DECL(int) GMMR0AllocatePagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq)
    29912997{
    29922998    /*
    29932999     * Validate input and pass it on.
    29943000     */
    2995     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    29963001    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    29973002    AssertMsgReturn(pReq->Hdr.cbReq >= RT_UOFFSETOF(GMMALLOCATEPAGESREQ, aPages[0]),
     
    30023007                    VERR_INVALID_PARAMETER);
    30033008
    3004     return GMMR0AllocatePages(pVM, idCpu, pReq->cPages, &pReq->aPages[0], pReq->enmAccount);
     3009    return GMMR0AllocatePages(pGVM, pVM, idCpu, pReq->cPages, &pReq->aPages[0], pReq->enmAccount);
    30053010}
    30063011
     
    31273132 *
    31283133 * @returns VBox status code:
     3134 * @param   pGVM        The global (ring-0) VM structure.
    31293135 * @param   pVM         The cross context VM structure.
    31303136 * @param   idCpu       The VCPU id.
    31313137 * @param   idPage      The large page id.
    31323138 */
    3133 GMMR0DECL(int)  GMMR0FreeLargePage(PVM pVM, VMCPUID idCpu, uint32_t idPage)
    3134 {
    3135     LogFlow(("GMMR0FreeLargePage: pVM=%p idPage=%x\n", pVM, idPage));
     3139GMMR0DECL(int)  GMMR0FreeLargePage(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t idPage)
     3140{
     3141    LogFlow(("GMMR0FreeLargePage: pGVM=%p pVM=%p idPage=%x\n", pGVM, pVM, idPage));
    31363142
    31373143    /*
     
    31403146    PGMM pGMM;
    31413147    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    3142     PGVM pGVM;
    3143     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     3148    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    31443149    if (RT_FAILURE(rc))
    31453150        return rc;
     
    31943199 *
    31953200 * @returns see GMMR0FreeLargePage.
     3201 * @param   pGVM        The global (ring-0) VM structure.
    31963202 * @param   pVM         The cross context VM structure.
    31973203 * @param   idCpu       The VCPU id.
    31983204 * @param   pReq        Pointer to the request packet.
    31993205 */
    3200 GMMR0DECL(int) GMMR0FreeLargePageReq(PVM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq)
     3206GMMR0DECL(int) GMMR0FreeLargePageReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq)
    32013207{
    32023208    /*
    32033209     * Validate input and pass it on.
    32043210     */
    3205     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    32063211    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    32073212    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMFREEPAGESREQ),
     
    32093214                    VERR_INVALID_PARAMETER);
    32103215
    3211     return GMMR0FreeLargePage(pVM, idCpu, pReq->idPage);
     3216    return GMMR0FreeLargePage(pGVM, pVM, idCpu, pReq->idPage);
    32123217}
    32133218
     
    35553560 * @retval  xxx
    35563561 *
     3562 * @param   pGVM        The global (ring-0) VM structure.
    35573563 * @param   pVM         The cross context VM structure.
    35583564 * @param   idCpu       The VCPU id.
     
    35633569 * @thread  EMT.
    35643570 */
    3565 GMMR0DECL(int) GMMR0FreePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount)
    3566 {
    3567     LogFlow(("GMMR0FreePages: pVM=%p cPages=%#x paPages=%p enmAccount=%d\n", pVM, cPages, paPages, enmAccount));
     3571GMMR0DECL(int) GMMR0FreePages(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount)
     3572{
     3573    LogFlow(("GMMR0FreePages: pGVM=%p pVM=%p cPages=%#x paPages=%p enmAccount=%d\n", pGVM, pVM, cPages, paPages, enmAccount));
    35683574
    35693575    /*
     
    35723578    PGMM pGMM;
    35733579    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    3574     PGVM pGVM;
    3575     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     3580    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    35763581    if (RT_FAILURE(rc))
    35773582        return rc;
     
    36073612 *
    36083613 * @returns see GMMR0FreePages.
     3614 * @param   pGVM        The global (ring-0) VM structure.
    36093615 * @param   pVM         The cross context VM structure.
    36103616 * @param   idCpu       The VCPU id.
    36113617 * @param   pReq        Pointer to the request packet.
    36123618 */
    3613 GMMR0DECL(int) GMMR0FreePagesReq(PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq)
     3619GMMR0DECL(int) GMMR0FreePagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq)
    36143620{
    36153621    /*
    36163622     * Validate input and pass it on.
    36173623     */
    3618     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    36193624    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    36203625    AssertMsgReturn(pReq->Hdr.cbReq >= RT_UOFFSETOF(GMMFREEPAGESREQ, aPages[0]),
     
    36253630                    VERR_INVALID_PARAMETER);
    36263631
    3627     return GMMR0FreePages(pVM, idCpu, pReq->cPages, &pReq->aPages[0], pReq->enmAccount);
     3632    return GMMR0FreePages(pGVM, pVM, idCpu, pReq->cPages, &pReq->aPages[0], pReq->enmAccount);
    36283633}
    36293634
     
    36453650 *          but to hope the VM won't use the memory that was returned to it.)
    36463651 *
     3652 * @param   pGVM                The global (ring-0) VM structure.
    36473653 * @param   pVM                 The cross context VM structure.
    36483654 * @param   idCpu               The VCPU id.
     
    36503656 * @param   cBalloonedPages     The number of pages that was ballooned.
    36513657 *
    3652  * @thread  EMT.
    3653  */
    3654 GMMR0DECL(int) GMMR0BalloonedPages(PVM pVM, VMCPUID idCpu, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages)
    3655 {
    3656     LogFlow(("GMMR0BalloonedPages: pVM=%p enmAction=%d cBalloonedPages=%#x\n",
    3657              pVM, enmAction, cBalloonedPages));
     3658 * @thread  EMT(idCpu)
     3659 */
     3660GMMR0DECL(int) GMMR0BalloonedPages(PGVM pGVM, PVM pVM, VMCPUID idCpu, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages)
     3661{
     3662    LogFlow(("GMMR0BalloonedPages: pGVM=%p pVM=%p enmAction=%d cBalloonedPages=%#x\n",
     3663             pGVM, pVM, enmAction, cBalloonedPages));
    36583664
    36593665    AssertMsgReturn(cBalloonedPages < RT_BIT(32 - PAGE_SHIFT), ("%#x\n", cBalloonedPages), VERR_INVALID_PARAMETER);
     
    36643670    PGMM pGMM;
    36653671    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    3666     PGVM pGVM;
    3667     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     3672    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    36683673    if (RT_FAILURE(rc))
    36693674        return rc;
     
    37773782 *
    37783783 * @returns see GMMR0BalloonedPages.
     3784 * @param   pGVM        The global (ring-0) VM structure.
    37793785 * @param   pVM         The cross context VM structure.
    37803786 * @param   idCpu       The VCPU id.
    37813787 * @param   pReq        Pointer to the request packet.
    37823788 */
    3783 GMMR0DECL(int) GMMR0BalloonedPagesReq(PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq)
     3789GMMR0DECL(int) GMMR0BalloonedPagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq)
    37843790{
    37853791    /*
    37863792     * Validate input and pass it on.
    37873793     */
    3788     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    37893794    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    37903795    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMBALLOONEDPAGESREQ),
     
    37923797                    VERR_INVALID_PARAMETER);
    37933798
    3794     return GMMR0BalloonedPages(pVM, idCpu, pReq->enmAction, pReq->cBalloonedPages);
    3795 }
     3799    return GMMR0BalloonedPages(pGVM, pVM, idCpu, pReq->enmAction, pReq->cBalloonedPages);
     3800}
     3801
    37963802
    37973803/**
    37983804 * Return memory statistics for the hypervisor
    37993805 *
    3800  * @returns VBox status code:
    3801  * @param   pVM         The cross context VM structure.
     3806 * @returns VBox status code.
    38023807 * @param   pReq        Pointer to the request packet.
    38033808 */
    3804 GMMR0DECL(int) GMMR0QueryHypervisorMemoryStatsReq(PVM pVM, PGMMMEMSTATSREQ pReq)
     3809GMMR0DECL(int) GMMR0QueryHypervisorMemoryStatsReq(PGMMMEMSTATSREQ pReq)
    38053810{
    38063811    /*
    38073812     * Validate input and pass it on.
    38083813     */
    3809     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    38103814    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    38113815    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMMEMSTATSREQ),
     
    38283832}
    38293833
     3834
    38303835/**
    38313836 * Return memory statistics for the VM
    38323837 *
    3833  * @returns VBox status code:
     3838 * @returns VBox status code.
     3839 * @param   pGVM        The global (ring-0) VM structure.
    38343840 * @param   pVM         The cross context VM structure.
    38353841 * @param   idCpu       Cpu id.
    38363842 * @param   pReq        Pointer to the request packet.
    3837  */
    3838 GMMR0DECL(int)  GMMR0QueryMemoryStatsReq(PVM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq)
     3843 *
     3844 * @thread  EMT(idCpu)
     3845 */
     3846GMMR0DECL(int) GMMR0QueryMemoryStatsReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq)
    38393847{
    38403848    /*
    38413849     * Validate input and pass it on.
    38423850     */
    3843     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    38443851    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    38453852    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMMEMSTATSREQ),
     
    38523859    PGMM pGMM;
    38533860    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    3854     PGVM pGVM;
    3855     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     3861    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    38563862    if (RT_FAILURE(rc))
    38573863        return rc;
     
    41234129 *
    41244130 * @returns VBox status code.
     4131 * @param   pGVM            The global (ring-0) VM structure.
    41254132 * @param   pVM             The cross context VM structure.
    41264133 * @param   idChunkMap      The chunk to map. NIL_GMM_CHUNKID if nothing to map.
    41274134 * @param   idChunkUnmap    The chunk to unmap. NIL_GMM_CHUNKID if nothing to unmap.
    41284135 * @param   ppvR3           Where to store the address of the mapped chunk. NULL is ok if nothing to map.
    4129  * @thread  EMT
    4130  */
    4131 GMMR0DECL(int) GMMR0MapUnmapChunk(PVM pVM, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3)
    4132 {
    4133     LogFlow(("GMMR0MapUnmapChunk: pVM=%p idChunkMap=%#x idChunkUnmap=%#x ppvR3=%p\n",
    4134              pVM, idChunkMap, idChunkUnmap, ppvR3));
     4136 * @thread  EMT ???
     4137 */
     4138GMMR0DECL(int) GMMR0MapUnmapChunk(PGVM pGVM, PVM pVM, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3)
     4139{
     4140    LogFlow(("GMMR0MapUnmapChunk: pGVM=%p pVM=%p idChunkMap=%#x idChunkUnmap=%#x ppvR3=%p\n",
     4141             pGVM, pVM, idChunkMap, idChunkUnmap, ppvR3));
    41354142
    41364143    /*
     
    41394146    PGMM pGMM;
    41404147    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    4141     PGVM pGVM;
    4142     int rc = GVMMR0ByVM(pVM, &pGVM);
     4148    int rc = GVMMR0ValidateGVMandVM(pGVM, pVM);
    41434149    if (RT_FAILURE(rc))
    41444150        return rc;
     
    42154221 *
    42164222 * @returns see GMMR0MapUnmapChunk.
     4223 * @param   pGVM        The global (ring-0) VM structure.
    42174224 * @param   pVM         The cross context VM structure.
    42184225 * @param   pReq        Pointer to the request packet.
    42194226 */
    4220 GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PVM pVM, PGMMMAPUNMAPCHUNKREQ pReq)
     4227GMMR0DECL(int)  GMMR0MapUnmapChunkReq(PGVM pGVM, PVM pVM, PGMMMAPUNMAPCHUNKREQ pReq)
    42214228{
    42224229    /*
    42234230     * Validate input and pass it on.
    42244231     */
    4225     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    42264232    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    42274233    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
    42284234
    4229     return GMMR0MapUnmapChunk(pVM, pReq->idChunkMap, pReq->idChunkUnmap, &pReq->pvR3);
     4235    return GMMR0MapUnmapChunk(pGVM, pVM, pReq->idChunkMap, pReq->idChunkUnmap, &pReq->pvR3);
    42304236}
    42314237
     
    42384244 *
    42394245 * @returns VBox status code.
     4246 * @param   pGVM        The global (ring-0) VM structure.
    42404247 * @param   pVM         The cross context VM structure.
    42414248 * @param   idCpu       The VCPU id.
    42424249 * @param   pvR3        Pointer to the chunk size memory block to lock down.
    42434250 */
    4244 GMMR0DECL(int) GMMR0SeedChunk(PVM pVM, VMCPUID idCpu, RTR3PTR pvR3)
     4251GMMR0DECL(int) GMMR0SeedChunk(PGVM pGVM, PVM pVM, VMCPUID idCpu, RTR3PTR pvR3)
    42454252{
    42464253    /*
     
    42494256    PGMM pGMM;
    42504257    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    4251     PGVM pGVM;
    4252     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     4258    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    42534259    if (RT_FAILURE(rc))
    42544260        return rc;
     
    45224528 *
    45234529 * @returns VBox status code.
     4530 * @param   pGVM            The global (ring-0) VM structure.
    45244531 * @param   pVM             The cross context VM structure.
    45254532 * @param   idCpu           The VCPU id.
     
    45314538 * @param   cRegions        The mumber of shared region descriptors.
    45324539 * @param   paRegions       Pointer to an array of shared region(s).
    4533  */
    4534 GMMR0DECL(int) GMMR0RegisterSharedModule(PVM pVM, VMCPUID idCpu, VBOXOSFAMILY enmGuestOS, char *pszModuleName,
     4540 * @thread  EMT(idCpu)
     4541 */
     4542GMMR0DECL(int) GMMR0RegisterSharedModule(PGVM pGVM, PVM pVM, VMCPUID idCpu, VBOXOSFAMILY enmGuestOS, char *pszModuleName,
    45354543                                         char *pszVersion, RTGCPTR GCPtrModBase, uint32_t cbModule,
    45364544                                         uint32_t cRegions, struct VMMDEVSHAREDREGIONDESC const *paRegions)
     
    45454553    PGMM pGMM;
    45464554    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    4547     PGVM pGVM;
    4548     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     4555    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    45494556    if (RT_FAILURE(rc))
    45504557        return rc;
     
    46694676 *
    46704677 * @returns see GMMR0RegisterSharedModule.
     4678 * @param   pGVM        The global (ring-0) VM structure.
    46714679 * @param   pVM         The cross context VM structure.
    46724680 * @param   idCpu       The VCPU id.
    46734681 * @param   pReq        Pointer to the request packet.
    46744682 */
    4675 GMMR0DECL(int)  GMMR0RegisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq)
     4683GMMR0DECL(int) GMMR0RegisterSharedModuleReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq)
    46764684{
    46774685    /*
    46784686     * Validate input and pass it on.
    46794687     */
    4680     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    46814688    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    4682     AssertMsgReturn(pReq->Hdr.cbReq >= sizeof(*pReq) && pReq->Hdr.cbReq == RT_UOFFSETOF(GMMREGISTERSHAREDMODULEREQ, aRegions[pReq->cRegions]), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
     4689    AssertMsgReturn(   pReq->Hdr.cbReq >= sizeof(*pReq)
     4690                    && pReq->Hdr.cbReq == RT_UOFFSETOF(GMMREGISTERSHAREDMODULEREQ, aRegions[pReq->cRegions]),
     4691                    ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
    46834692
    46844693    /* Pass back return code in the request packet to preserve informational codes. (VMMR3CallR0 chokes on them) */
    4685     pReq->rc = GMMR0RegisterSharedModule(pVM, idCpu, pReq->enmGuestOS, pReq->szName, pReq->szVersion,
     4694    pReq->rc = GMMR0RegisterSharedModule(pGVM, pVM, idCpu, pReq->enmGuestOS, pReq->szName, pReq->szVersion,
    46864695                                         pReq->GCBaseAddr, pReq->cbModule, pReq->cRegions, pReq->aRegions);
    46874696    return VINF_SUCCESS;
     
    46934702 *
    46944703 * @returns VBox status code.
     4704 * @param   pGVM            The global (ring-0) VM structure.
    46954705 * @param   pVM             The cross context VM structure.
    46964706 * @param   idCpu           The VCPU id.
     
    47004710 * @param   cbModule        The module size.
    47014711 */
    4702 GMMR0DECL(int) GMMR0UnregisterSharedModule(PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion,
     4712GMMR0DECL(int) GMMR0UnregisterSharedModule(PGVM pGVM, PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion,
    47034713                                           RTGCPTR GCPtrModBase, uint32_t cbModule)
    47044714{
     
    47094719    PGMM pGMM;
    47104720    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    4711     PGVM pGVM;
    4712     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     4721    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    47134722    if (RT_FAILURE(rc))
    47144723        return rc;
     
    47534762#else
    47544763
    4755     NOREF(pVM); NOREF(idCpu); NOREF(pszModuleName); NOREF(pszVersion); NOREF(GCPtrModBase); NOREF(cbModule);
     4764    NOREF(pGVM); NOREF(pVM); NOREF(idCpu); NOREF(pszModuleName); NOREF(pszVersion); NOREF(GCPtrModBase); NOREF(cbModule);
    47564765    return VERR_NOT_IMPLEMENTED;
    47574766#endif
     
    47634772 *
    47644773 * @returns see GMMR0UnregisterSharedModule.
     4774 * @param   pGVM        The global (ring-0) VM structure.
    47654775 * @param   pVM         The cross context VM structure.
    47664776 * @param   idCpu       The VCPU id.
    47674777 * @param   pReq        Pointer to the request packet.
    47684778 */
    4769 GMMR0DECL(int)  GMMR0UnregisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq)
     4779GMMR0DECL(int)  GMMR0UnregisterSharedModuleReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq)
    47704780{
    47714781    /*
    47724782     * Validate input and pass it on.
    47734783     */
    4774     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    47754784    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    47764785    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
    47774786
    4778     return GMMR0UnregisterSharedModule(pVM, idCpu, pReq->szName, pReq->szVersion, pReq->GCBaseAddr, pReq->cbModule);
     4787    return GMMR0UnregisterSharedModule(pGVM, pVM, idCpu, pReq->szName, pReq->szVersion, pReq->GCBaseAddr, pReq->cbModule);
    47794788}
    47804789
     
    50705079 *
    50715080 * @returns VBox status code.
     5081 * @param   pGVM        The global (ring-0) VM structure.
    50725082 * @param   pVM         The cross context VM structure.
    50735083 * @param   idCpu       The VCPU id.
    50745084 */
    5075 GMMR0DECL(int) GMMR0ResetSharedModules(PVM pVM, VMCPUID idCpu)
     5085GMMR0DECL(int) GMMR0ResetSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu)
    50765086{
    50775087#ifdef VBOX_WITH_PAGE_SHARING
     
    50815091    PGMM pGMM;
    50825092    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    5083     PGVM pGVM;
    5084     int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM);
     5093    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    50855094    if (RT_FAILURE(rc))
    50865095        return rc;
     
    51085117    return rc;
    51095118#else
    5110     NOREF(pVM); NOREF(idCpu);
     5119    RT_NOREF(pGVM, pVM, idCpu);
    51115120    return VERR_NOT_IMPLEMENTED;
    51125121#endif
     
    51345143
    51355144#endif /* VBOX_WITH_PAGE_SHARING */
    5136 #ifdef DEBUG_sandervl
    5137 
    5138 /**
    5139  * Setup for a GMMR0CheckSharedModules call (to allow log flush jumps back to ring 3)
     5145
     5146/**
     5147 * Check all shared modules for the specified VM.
    51405148 *
    51415149 * @returns VBox status code.
     5150 * @param   pGVM        The global (ring-0) VM structure.
    51425151 * @param   pVM         The cross context VM structure.
    5143  */
    5144 GMMR0DECL(int) GMMR0CheckSharedModulesStart(PVM pVM)
    5145 {
     5152 * @param   idCpu       The calling EMT number.
     5153 * @thread  EMT(idCpu)
     5154 */
     5155GMMR0DECL(int) GMMR0CheckSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu)
     5156{
     5157#ifdef VBOX_WITH_PAGE_SHARING
    51465158    /*
    51475159     * Validate input and get the basics.
     
    51495161    PGMM pGMM;
    51505162    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    5151 
    5152     /*
    5153      * Take the semaphore and do some more validations.
    5154      */
    5155     gmmR0MutexAcquire(pGMM);
    5156     if (!GMM_CHECK_SANITY_UPON_ENTERING(pGMM))
    5157         rc = VERR_GMM_IS_NOT_SANE;
    5158     else
    5159         rc = VINF_SUCCESS;
    5160 
    5161     return rc;
    5162 }
    5163 
    5164 /**
    5165  * Clean up after a GMMR0CheckSharedModules call (to allow log flush jumps back to ring 3)
    5166  *
    5167  * @returns VBox status code.
    5168  * @param   pVM         The cross context VM structure.
    5169  */
    5170 GMMR0DECL(int) GMMR0CheckSharedModulesEnd(PVM pVM)
    5171 {
    5172     /*
    5173      * Validate input and get the basics.
    5174      */
    5175     PGMM pGMM;
    5176     GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    5177 
    5178     gmmR0MutexRelease(pGMM);
    5179     return VINF_SUCCESS;
    5180 }
    5181 
    5182 #endif /* DEBUG_sandervl */
    5183 
    5184 /**
    5185  * Check all shared modules for the specified VM.
    5186  *
    5187  * @returns VBox status code.
    5188  * @param   pVM         The cross context VM structure.
    5189  * @param   pVCpu       The cross context virtual CPU structure.
    5190  */
    5191 GMMR0DECL(int) GMMR0CheckSharedModules(PVM pVM, PVMCPU pVCpu)
    5192 {
    5193 #ifdef VBOX_WITH_PAGE_SHARING
    5194     /*
    5195      * Validate input and get the basics.
    5196      */
    5197     PGMM pGMM;
    5198     GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    5199     PGVM pGVM;
    5200     int rc = GVMMR0ByVMAndEMT(pVM, pVCpu->idCpu, &pGVM);
     5163    int rc = GVMMR0ValidateGVMandVMandEMT(pGVM, pVM, idCpu);
    52015164    if (RT_FAILURE(rc))
    52025165        return rc;
     
    52175180        GMMCHECKSHAREDMODULEINFO Args;
    52185181        Args.pGVM     = pGVM;
    5219         Args.idCpu    = pVCpu->idCpu;
     5182        Args.idCpu    = idCpu;
    52205183        rc = RTAvlGCPtrDoWithAll(&pGVM->gmm.s.pSharedModuleTree, true /* fFromLeft */, gmmR0CheckSharedModule, &Args);
    52215184
     
    52875250 *
    52885251 * @returns VBox status code.
     5252 * @param   pGVM        The global (ring-0) VM structure.
    52895253 * @param   pVM         The cross context VM structure.
    52905254 * @param   pReq        Pointer to the request packet.
    52915255 */
    5292 GMMR0DECL(int) GMMR0FindDuplicatePageReq(PVM pVM, PGMMFINDDUPLICATEPAGEREQ pReq)
     5256GMMR0DECL(int) GMMR0FindDuplicatePageReq(PGVM pGVM, PVM pVM, PGMMFINDDUPLICATEPAGEREQ pReq)
    52935257{
    52945258    /*
    52955259     * Validate input and pass it on.
    52965260     */
    5297     AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    52985261    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    52995262    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
     
    53025265    GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE);
    53035266
    5304     PGVM pGVM;
    5305     int rc = GVMMR0ByVM(pVM, &pGVM);
     5267    int rc = GVMMR0ValidateGVMandVM(pGVM, pVM);
    53065268    if (RT_FAILURE(rc))
    53075269        return rc;
     
    53615323 * @param   pStats      Where to put the statistics.
    53625324 * @param   pSession    The current session.
    5363  * @param   pVM         The VM to obtain statistics for. Optional.
    5364  */
    5365 GMMR0DECL(int) GMMR0QueryStatistics(PGMMSTATS pStats, PSUPDRVSESSION pSession, PVM pVM)
    5366 {
    5367     LogFlow(("GVMMR0QueryStatistics: pStats=%p pSession=%p pVM=%p\n", pStats, pSession, pVM));
     5325 * @param   pGVM        The GVM to obtain statistics for. Optional.
     5326 * @param   pVM         The VM structure corresponding to @a pGVM.
     5327 */
     5328GMMR0DECL(int) GMMR0QueryStatistics(PGMMSTATS pStats, PSUPDRVSESSION pSession, PGVM pGVM, PVM pVM)
     5329{
     5330    LogFlow(("GVMMR0QueryStatistics: pStats=%p pSession=%p pGVM=%p pVM=%p\n", pStats, pSession, pGVM, pVM));
    53685331
    53695332    /*
     
    53785341
    53795342    /*
    5380      * Resolve the VM handle, if not NULL, and lock the GMM.
     5343     * Validate the VM handle, if not NULL, and lock the GMM.
    53815344     */
    53825345    int rc;
    5383     PGVM pGVM;
    5384     if (pVM)
    5385     {
    5386         rc = GVMMR0ByVM(pVM, &pGVM);
     5346    if (pGVM)
     5347    {
     5348        rc = GVMMR0ValidateGVMandVM(pGVM, pVM);
    53875349        if (RT_FAILURE(rc))
    53885350            return rc;
    53895351    }
    5390     else
    5391         pGVM = NULL;
    53925352
    53935353    rc = gmmR0MutexAcquire(pGMM);
     
    54285388 *
    54295389 * @returns see GMMR0QueryStatistics.
     5390 * @param   pGVM        The global (ring-0) VM structure. Optional.
    54305391 * @param   pVM         The cross context VM structure. Optional.
    54315392 * @param   pReq        Pointer to the request packet.
    54325393 */
    5433 GMMR0DECL(int) GMMR0QueryStatisticsReq(PVM pVM, PGMMQUERYSTATISTICSSREQ pReq)
     5394GMMR0DECL(int) GMMR0QueryStatisticsReq(PGVM pGVM, PVM pVM, PGMMQUERYSTATISTICSSREQ pReq)
    54345395{
    54355396    /*
     
    54395400    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
    54405401
    5441     return GMMR0QueryStatistics(&pReq->Stats, pReq->pSession, pVM);
     5402    return GMMR0QueryStatistics(&pReq->Stats, pReq->pSession, pGVM, pVM);
    54425403}
    54435404
     
    54515412 *                      indicates which to reset.
    54525413 * @param   pSession    The current session.
    5453  * @param   pVM         The VM to reset statistics for. Optional.
    5454  */
    5455 GMMR0DECL(int) GMMR0ResetStatistics(PCGMMSTATS pStats, PSUPDRVSESSION pSession, PVM pVM)
    5456 {
    5457     NOREF(pStats); NOREF(pSession); NOREF(pVM);
     5414 * @param   pGVM        The GVM to reset statistics for. Optional.
     5415 * @param   pVM         The VM structure corresponding to @a pGVM.
     5416 */
     5417GMMR0DECL(int) GMMR0ResetStatistics(PCGMMSTATS pStats, PSUPDRVSESSION pSession, PGVM pGVM, PVM pVM)
     5418{
     5419    NOREF(pStats); NOREF(pSession); NOREF(pVM); NOREF(pGVM);
    54585420    /* Currently nothing we can reset at the moment. */
    54595421    return VINF_SUCCESS;
     
    54655427 *
    54665428 * @returns see GMMR0ResetStatistics.
     5429 * @param   pGVM        The global (ring-0) VM structure. Optional.
    54675430 * @param   pVM         The cross context VM structure. Optional.
    54685431 * @param   pReq        Pointer to the request packet.
    54695432 */
    5470 GMMR0DECL(int) GMMR0ResetStatisticsReq(PVM pVM, PGMMRESETSTATISTICSSREQ pReq)
     5433GMMR0DECL(int) GMMR0ResetStatisticsReq(PGVM pGVM, PVM pVM, PGMMRESETSTATISTICSSREQ pReq)
    54715434{
    54725435    /*
     
    54765439    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER);
    54775440
    5478     return GMMR0ResetStatistics(&pReq->Stats, pReq->pSession, pVM);
    5479 }
    5480 
     5441    return GMMR0ResetStatistics(&pReq->Stats, pReq->pSession, pGVM, pVM);
     5442}
     5443
  • trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp

    r68001 r68007  
    23962396 * @param   pVM                 The cross context VM structure.
    23972397 * @param   idCpu               The Virtual CPU ID of the EMT to wake up.
    2398  * @param   fTakeUsedLock       Take the used lock or not
    23992398 * @thread  Any but EMT(idCpu).
    24002399 * @deprecated  Don't use in new code if possible!  Use the GVM variant.
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r68001 r68007  
    16651665            if (u64Arg)
    16661666                return VERR_INVALID_PARAMETER;
    1667             rc = GMMR0InitialReservationReq(pVM, idCpu, (PGMMINITIALRESERVATIONREQ)pReqHdr);
     1667            rc = GMMR0InitialReservationReq(pGVM, pVM, idCpu, (PGMMINITIALRESERVATIONREQ)pReqHdr);
    16681668            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    16691669            break;
     
    16721672            if (u64Arg)
    16731673                return VERR_INVALID_PARAMETER;
    1674             rc = GMMR0UpdateReservationReq(pVM, idCpu, (PGMMUPDATERESERVATIONREQ)pReqHdr);
     1674            rc = GMMR0UpdateReservationReq(pGVM, pVM, idCpu, (PGMMUPDATERESERVATIONREQ)pReqHdr);
    16751675            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    16761676            break;
     
    16791679            if (u64Arg)
    16801680                return VERR_INVALID_PARAMETER;
    1681             rc = GMMR0AllocatePagesReq(pVM, idCpu, (PGMMALLOCATEPAGESREQ)pReqHdr);
     1681            rc = GMMR0AllocatePagesReq(pGVM, pVM, idCpu, (PGMMALLOCATEPAGESREQ)pReqHdr);
    16821682            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    16831683            break;
     
    16861686            if (u64Arg)
    16871687                return VERR_INVALID_PARAMETER;
    1688             rc = GMMR0FreePagesReq(pVM, idCpu, (PGMMFREEPAGESREQ)pReqHdr);
     1688            rc = GMMR0FreePagesReq(pGVM, pVM, idCpu, (PGMMFREEPAGESREQ)pReqHdr);
    16891689            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    16901690            break;
     
    16931693            if (u64Arg)
    16941694                return VERR_INVALID_PARAMETER;
    1695             rc = GMMR0FreeLargePageReq(pVM, idCpu, (PGMMFREELARGEPAGEREQ)pReqHdr);
     1695            rc = GMMR0FreeLargePageReq(pGVM, pVM, idCpu, (PGMMFREELARGEPAGEREQ)pReqHdr);
    16961696            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    16971697            break;
     
    17001700            if (u64Arg)
    17011701                return VERR_INVALID_PARAMETER;
    1702             rc = GMMR0QueryHypervisorMemoryStatsReq(pVM, (PGMMMEMSTATSREQ)pReqHdr);
     1702            rc = GMMR0QueryHypervisorMemoryStatsReq((PGMMMEMSTATSREQ)pReqHdr);
    17031703            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17041704            break;
     
    17091709            if (u64Arg)
    17101710                return VERR_INVALID_PARAMETER;
    1711             rc = GMMR0QueryMemoryStatsReq(pVM, idCpu, (PGMMMEMSTATSREQ)pReqHdr);
     1711            rc = GMMR0QueryMemoryStatsReq(pGVM, pVM, idCpu, (PGMMMEMSTATSREQ)pReqHdr);
    17121712            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17131713            break;
     
    17161716            if (u64Arg)
    17171717                return VERR_INVALID_PARAMETER;
    1718             rc = GMMR0BalloonedPagesReq(pVM, idCpu, (PGMMBALLOONEDPAGESREQ)pReqHdr);
     1718            rc = GMMR0BalloonedPagesReq(pGVM, pVM, idCpu, (PGMMBALLOONEDPAGESREQ)pReqHdr);
    17191719            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17201720            break;
     
    17231723            if (u64Arg)
    17241724                return VERR_INVALID_PARAMETER;
    1725             rc = GMMR0MapUnmapChunkReq(pVM, (PGMMMAPUNMAPCHUNKREQ)pReqHdr);
     1725            rc = GMMR0MapUnmapChunkReq(pGVM, pVM, (PGMMMAPUNMAPCHUNKREQ)pReqHdr);
    17261726            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17271727            break;
     
    17301730            if (pReqHdr)
    17311731                return VERR_INVALID_PARAMETER;
    1732             rc = GMMR0SeedChunk(pVM, idCpu, (RTR3PTR)u64Arg);
     1732            rc = GMMR0SeedChunk(pGVM, pVM, idCpu, (RTR3PTR)u64Arg);
    17331733            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17341734            break;
     
    17391739            if (u64Arg)
    17401740                return VERR_INVALID_PARAMETER;
    1741             rc = GMMR0RegisterSharedModuleReq(pVM, idCpu, (PGMMREGISTERSHAREDMODULEREQ)pReqHdr);
     1741            rc = GMMR0RegisterSharedModuleReq(pGVM, pVM, idCpu, (PGMMREGISTERSHAREDMODULEREQ)pReqHdr);
    17421742            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17431743            break;
     
    17481748            if (u64Arg)
    17491749                return VERR_INVALID_PARAMETER;
    1750             rc = GMMR0UnregisterSharedModuleReq(pVM, idCpu, (PGMMUNREGISTERSHAREDMODULEREQ)pReqHdr);
     1750            rc = GMMR0UnregisterSharedModuleReq(pGVM, pVM, idCpu, (PGMMUNREGISTERSHAREDMODULEREQ)pReqHdr);
    17511751            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17521752            break;
     
    17581758                ||  pReqHdr)
    17591759                return VERR_INVALID_PARAMETER;
    1760             rc = GMMR0ResetSharedModules(pVM, idCpu);
     1760            rc = GMMR0ResetSharedModules(pGVM, pVM, idCpu);
    17611761            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17621762            break;
     
    17701770                ||  pReqHdr)
    17711771                return VERR_INVALID_PARAMETER;
    1772 
    1773             PVMCPU pVCpu = &pVM->aCpus[idCpu];
    1774             Assert(pVCpu->hNativeThreadR0 == RTThreadNativeSelf());
    1775 
    1776 # ifdef DEBUG_sandervl
    1777             /* Make sure that log flushes can jump back to ring-3; annoying to get an incomplete log (this is risky though as the code doesn't take this into account). */
    1778             /** @todo this can have bad side effects for unexpected jumps back to r3. */
    1779             rc = GMMR0CheckSharedModulesStart(pVM);
    1780             if (rc == VINF_SUCCESS)
    1781             {
    1782                 rc = vmmR0CallRing3SetJmp(&pVCpu->vmm.s.CallRing3JmpBufR0, GMMR0CheckSharedModules, pVM, pVCpu); /* this may resume code. */
    1783                 Assert(     rc == VINF_SUCCESS
    1784                        ||   (rc == VINF_VMM_CALL_HOST && pVCpu->vmm.s.enmCallRing3Operation == VMMCALLRING3_VMM_LOGGER_FLUSH));
    1785                 GMMR0CheckSharedModulesEnd(pVM);
    1786             }
    1787 # else
    1788             rc = GMMR0CheckSharedModules(pVM, pVCpu);
    1789 # endif
     1772            rc = GMMR0CheckSharedModules(pGVM, pVM, idCpu);
    17901773            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    17911774            break;
     
    17971780            if (u64Arg)
    17981781                return VERR_INVALID_PARAMETER;
    1799             rc = GMMR0FindDuplicatePageReq(pVM, (PGMMFINDDUPLICATEPAGEREQ)pReqHdr);
     1782            rc = GMMR0FindDuplicatePageReq(pGVM, pVM, (PGMMFINDDUPLICATEPAGEREQ)pReqHdr);
    18001783            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    18011784            break;
     
    18051788            if (u64Arg)
    18061789                return VERR_INVALID_PARAMETER;
    1807             rc = GMMR0QueryStatisticsReq(pVM, (PGMMQUERYSTATISTICSSREQ)pReqHdr);
     1790            rc = GMMR0QueryStatisticsReq(pGVM, pVM, (PGMMQUERYSTATISTICSSREQ)pReqHdr);
    18081791            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    18091792            break;
     
    18121795            if (u64Arg)
    18131796                return VERR_INVALID_PARAMETER;
    1814             rc = GMMR0ResetStatisticsReq(pVM, (PGMMRESETSTATISTICSSREQ)pReqHdr);
     1797            rc = GMMR0ResetStatisticsReq(pGVM, pVM, (PGMMRESETSTATISTICSSREQ)pReqHdr);
    18151798            VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING);
    18161799            break;
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