Changeset 68007 in vbox
- Timestamp:
- Jul 17, 2017 5:07:37 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 117019
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/gmm.h
r67994 r68007 400 400 GMMR0DECL(void) GMMR0InitPerVMData(PGVM pGVM); 401 401 GMMR0DECL(void) GMMR0CleanupVM(PGVM pGVM); 402 GMMR0DECL(int) GMMR0InitialReservation(P VM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,402 GMMR0DECL(int) GMMR0InitialReservation(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages, 403 403 GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority); 404 GMMR0DECL(int) GMMR0UpdateReservation(P VM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages);404 GMMR0DECL(int) GMMR0UpdateReservation(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages); 405 405 GMMR0DECL(int) GMMR0AllocateHandyPages(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cPagesToUpdate, 406 406 uint32_t cPagesToAlloc, PGMMPAGEDESC paPages); 407 GMMR0DECL(int) GMMR0AllocatePages(P VM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount);407 GMMR0DECL(int) GMMR0AllocatePages(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount); 408 408 GMMR0DECL(int) GMMR0AllocateLargePage(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cbPage, uint32_t *pIdPage, RTHCPHYS *pHCPhys); 409 GMMR0DECL(int) GMMR0FreePages(P VM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount);410 GMMR0DECL(int) GMMR0FreeLargePage(P VM pVM, VMCPUID idCpu, uint32_t idPage);411 GMMR0DECL(int) GMMR0BalloonedPages(P VM pVM, VMCPUID idCpu, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages);412 GMMR0DECL(int) GMMR0MapUnmapChunk(P VM pVM, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3);413 GMMR0DECL(int) GMMR0SeedChunk(P VM pVM, VMCPUID idCpu, RTR3PTR pvR3);414 GMMR0DECL(int) GMMR0RegisterSharedModule(P VM pVM, VMCPUID idCpu, VBOXOSFAMILY enmGuestOS, char *pszModuleName, char *pszVersion,415 RTGCPTR GCBaseAddr, uint32_t cbModule, uint32_t cRegions,409 GMMR0DECL(int) GMMR0FreePages(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount); 410 GMMR0DECL(int) GMMR0FreeLargePage(PGVM pGVM, PVM pVM, VMCPUID idCpu, uint32_t idPage); 411 GMMR0DECL(int) GMMR0BalloonedPages(PGVM pGVM, PVM pVM, VMCPUID idCpu, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages); 412 GMMR0DECL(int) GMMR0MapUnmapChunk(PGVM pGVM, PVM pVM, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3); 413 GMMR0DECL(int) GMMR0SeedChunk(PGVM pGVM, PVM pVM, VMCPUID idCpu, RTR3PTR pvR3); 414 GMMR0DECL(int) GMMR0RegisterSharedModule(PGVM pGVM, PVM pVM, VMCPUID idCpu, VBOXOSFAMILY enmGuestOS, char *pszModuleName, 415 char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule, uint32_t cRegions, 416 416 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); 417 GMMR0DECL(int) GMMR0UnregisterSharedModule(PGVM pGVM, PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion, 418 RTGCPTR GCBaseAddr, uint32_t cbModule); 419 GMMR0DECL(int) GMMR0UnregisterAllSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu); 420 GMMR0DECL(int) GMMR0CheckSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu); 421 GMMR0DECL(int) GMMR0ResetSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu); 423 422 GMMR0DECL(int) GMMR0QueryStatistics(PGMMSTATS pStats, PSUPDRVSESSION pSession); 424 423 GMMR0DECL(int) GMMR0ResetStatistics(PCGMMSTATS pStats, PSUPDRVSESSION pSession); … … 441 440 typedef GMMINITIALRESERVATIONREQ *PGMMINITIALRESERVATIONREQ; 442 441 443 GMMR0DECL(int) GMMR0InitialReservationReq(P VM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq);442 GMMR0DECL(int) GMMR0InitialReservationReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq); 444 443 445 444 … … 459 458 typedef GMMUPDATERESERVATIONREQ *PGMMUPDATERESERVATIONREQ; 460 459 461 GMMR0DECL(int) GMMR0UpdateReservationReq(P VM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq);460 GMMR0DECL(int) GMMR0UpdateReservationReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq); 462 461 463 462 … … 480 479 typedef GMMALLOCATEPAGESREQ *PGMMALLOCATEPAGESREQ; 481 480 482 GMMR0DECL(int) GMMR0AllocatePagesReq(P VM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq);481 GMMR0DECL(int) GMMR0AllocatePagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq); 483 482 484 483 … … 501 500 typedef GMMFREEPAGESREQ *PGMMFREEPAGESREQ; 502 501 503 GMMR0DECL(int) GMMR0FreePagesReq(P VM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq);502 GMMR0DECL(int) GMMR0FreePagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq); 504 503 505 504 /** … … 519 518 typedef GMMBALLOONEDPAGESREQ *PGMMBALLOONEDPAGESREQ; 520 519 521 GMMR0DECL(int) GMMR0BalloonedPagesReq(P VM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq);520 GMMR0DECL(int) GMMR0BalloonedPagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq); 522 521 523 522 … … 544 543 typedef GMMMEMSTATSREQ *PGMMMEMSTATSREQ; 545 544 546 GMMR0DECL(int) GMMR0QueryHypervisorMemoryStatsReq(P VM pVM, PGMMMEMSTATSREQ pReq);547 GMMR0DECL(int) GMMR0QueryMemoryStatsReq(P VM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq);545 GMMR0DECL(int) GMMR0QueryHypervisorMemoryStatsReq(PGMMMEMSTATSREQ pReq); 546 GMMR0DECL(int) GMMR0QueryMemoryStatsReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq); 548 547 549 548 /** … … 565 564 typedef GMMMAPUNMAPCHUNKREQ *PGMMMAPUNMAPCHUNKREQ; 566 565 567 GMMR0DECL(int) GMMR0MapUnmapChunkReq(P VM pVM, PGMMMAPUNMAPCHUNKREQ pReq);566 GMMR0DECL(int) GMMR0MapUnmapChunkReq(PGVM pGVM, PVM pVM, PGMMMAPUNMAPCHUNKREQ pReq); 568 567 569 568 … … 582 581 typedef GMMFREELARGEPAGEREQ *PGMMFREELARGEPAGEREQ; 583 582 584 GMMR0DECL(int) GMMR0FreeLargePageReq(P VM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq);583 GMMR0DECL(int) GMMR0FreeLargePageReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq); 585 584 586 585 /** Maximum length of the shared module name string, terminator included. */ … … 617 616 typedef GMMREGISTERSHAREDMODULEREQ *PGMMREGISTERSHAREDMODULEREQ; 618 617 619 GMMR0DECL(int) GMMR0RegisterSharedModuleReq(P VM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq);618 GMMR0DECL(int) GMMR0RegisterSharedModuleReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq); 620 619 621 620 /** … … 704 703 typedef GMMUNREGISTERSHAREDMODULEREQ *PGMMUNREGISTERSHAREDMODULEREQ; 705 704 706 GMMR0DECL(int) GMMR0UnregisterSharedModuleReq(P VM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq);705 GMMR0DECL(int) GMMR0UnregisterSharedModuleReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq); 707 706 708 707 #if defined(VBOX_STRICT) && HC_ARCH_BITS == 64 … … 723 722 typedef GMMFINDDUPLICATEPAGEREQ *PGMMFINDDUPLICATEPAGEREQ; 724 723 725 GMMR0DECL(int) GMMR0FindDuplicatePageReq(P VM pVM, PGMMFINDDUPLICATEPAGEREQ pReq);724 GMMR0DECL(int) GMMR0FindDuplicatePageReq(PGVM pGVM, PVM pVM, PGMMFINDDUPLICATEPAGEREQ pReq); 726 725 #endif /* VBOX_STRICT && HC_ARCH_BITS == 64 */ 727 726 … … 744 743 typedef GMMQUERYSTATISTICSSREQ *PGMMQUERYSTATISTICSSREQ; 745 744 746 GMMR0DECL(int) GMMR0QueryStatisticsReq(P VM pVM, PGMMQUERYSTATISTICSSREQ pReq);745 GMMR0DECL(int) GMMR0QueryStatisticsReq(PGVM pGVM, PVM pVM, PGMMQUERYSTATISTICSSREQ pReq); 747 746 748 747 … … 765 764 typedef GMMRESETSTATISTICSSREQ *PGMMRESETSTATISTICSSREQ; 766 765 767 GMMR0DECL(int) GMMR0ResetStatisticsReq(P VM pVM, PGMMRESETSTATISTICSSREQ pReq);766 GMMR0DECL(int) GMMR0ResetStatisticsReq(PGVM pGVM, PVM pVM, PGMMRESETSTATISTICSSREQ pReq); 768 767 769 768 -
trunk/src/VBox/VMM/VMMR0/GMMR0.cpp
r67994 r68007 1540 1540 * @retval VERR_GMM_ 1541 1541 * 1542 * @param pGVM The global (ring-0) VM structure. 1542 1543 * @param pVM The cross context VM structure. 1543 * @param idCpu The VCPU id .1544 * @param idCpu The VCPU id - must be zero. 1544 1545 * @param cBasePages The number of pages that may be allocated for the base RAM and ROMs. 1545 1546 * This does not include MMIO2 and similar. … … 1550 1551 * @param enmPriority The priority in an out-of-memory situation. 1551 1552 * 1552 * @thread The creator thread / EMT .1553 */ 1554 GMMR0DECL(int) GMMR0InitialReservation(P VM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,1555 GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority)1556 { 1557 LogFlow(("GMMR0InitialReservation: p VM=%p cBasePages=%#llx cShadowPages=%#x cFixedPages=%#x enmPolicy=%d enmPriority=%d\n",1558 p VM, cBasePages, cShadowPages, cFixedPages, enmPolicy, enmPriority));1553 * @thread The creator thread / EMT(0). 1554 */ 1555 GMMR0DECL(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)); 1559 1560 1560 1561 /* 1561 1562 * Validate, get basics and take the semaphore. 1562 1563 */ 1564 AssertReturn(idCpu == 0, VERR_INVALID_CPU_ID); 1563 1565 PGMM pGMM; 1564 1566 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); 1567 1568 if (RT_FAILURE(rc)) 1568 1569 return rc; … … 1617 1618 * 1618 1619 * @returns see GMMR0InitialReservation. 1620 * @param pGVM The global (ring-0) VM structure. 1619 1621 * @param pVM The cross context VM structure. 1620 1622 * @param idCpu The VCPU id. 1621 1623 * @param pReq Pointer to the request packet. 1622 1624 */ 1623 GMMR0DECL(int) GMMR0InitialReservationReq(P VM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq)1625 GMMR0DECL(int) GMMR0InitialReservationReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq) 1624 1626 { 1625 1627 /* … … 1630 1632 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); 1631 1633 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); 1633 1636 } 1634 1637 … … 1640 1643 * @retval VERR_GMM_MEMORY_RESERVATION_DECLINED 1641 1644 * 1645 * @param pGVM The global (ring-0) VM structure. 1642 1646 * @param pVM The cross context VM structure. 1643 1647 * @param idCpu The VCPU id. … … 1648 1652 * hyper heap, MMIO2 and similar. 1649 1653 * 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 */ 1656 GMMR0DECL(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)); 1656 1661 1657 1662 /* … … 1660 1665 PGMM pGMM; 1661 1666 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); 1664 1668 if (RT_FAILURE(rc)) 1665 1669 return rc; … … 1711 1715 * 1712 1716 * @returns see GMMR0UpdateReservation. 1717 * @param pGVM The global (ring-0) VM structure. 1713 1718 * @param pVM The cross context VM structure. 1714 1719 * @param idCpu The VCPU id. 1715 1720 * @param pReq Pointer to the request packet. 1716 1721 */ 1717 GMMR0DECL(int) GMMR0UpdateReservationReq(P VM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq)1722 GMMR0DECL(int) GMMR0UpdateReservationReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq) 1718 1723 { 1719 1724 /* … … 1724 1729 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); 1725 1730 1726 return GMMR0UpdateReservation(p VM, idCpu, pReq->cBasePages, pReq->cShadowPages, pReq->cFixedPages);1731 return GMMR0UpdateReservation(pGVM, pVM, idCpu, pReq->cBasePages, pReq->cShadowPages, pReq->cFixedPages); 1727 1732 } 1728 1733 … … 2918 2923 * that is we're trying to allocate more than we've reserved. 2919 2924 * 2925 * @param pGVM The global (ring-0) VM structure. 2920 2926 * @param pVM The cross context VM structure. 2921 2927 * @param idCpu The VCPU id. … … 2928 2934 * @thread EMT. 2929 2935 */ 2930 GMMR0DECL(int) GMMR0AllocatePages(P VM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount)2931 { 2932 LogFlow(("GMMR0AllocatePages: p VM=%p cPages=%#x paPages=%p enmAccount=%d\n", pVM, cPages, paPages, enmAccount));2936 GMMR0DECL(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)); 2933 2939 2934 2940 /* … … 2937 2943 PGMM pGMM; 2938 2944 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); 2941 2946 if (RT_FAILURE(rc)) 2942 2947 return rc; … … 2984 2989 * 2985 2990 * @returns see GMMR0AllocatePages. 2991 * @param pGVM The global (ring-0) VM structure. 2986 2992 * @param pVM The cross context VM structure. 2987 2993 * @param idCpu The VCPU id. 2988 2994 * @param pReq Pointer to the request packet. 2989 2995 */ 2990 GMMR0DECL(int) GMMR0AllocatePagesReq(P VM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq)2996 GMMR0DECL(int) GMMR0AllocatePagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq) 2991 2997 { 2992 2998 /* 2993 2999 * Validate input and pass it on. 2994 3000 */ 2995 AssertPtrReturn(pVM, VERR_INVALID_POINTER);2996 3001 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 2997 3002 AssertMsgReturn(pReq->Hdr.cbReq >= RT_UOFFSETOF(GMMALLOCATEPAGESREQ, aPages[0]), … … 3002 3007 VERR_INVALID_PARAMETER); 3003 3008 3004 return GMMR0AllocatePages(p VM, idCpu, pReq->cPages, &pReq->aPages[0], pReq->enmAccount);3009 return GMMR0AllocatePages(pGVM, pVM, idCpu, pReq->cPages, &pReq->aPages[0], pReq->enmAccount); 3005 3010 } 3006 3011 … … 3127 3132 * 3128 3133 * @returns VBox status code: 3134 * @param pGVM The global (ring-0) VM structure. 3129 3135 * @param pVM The cross context VM structure. 3130 3136 * @param idCpu The VCPU id. 3131 3137 * @param idPage The large page id. 3132 3138 */ 3133 GMMR0DECL(int) GMMR0FreeLargePage(P VM pVM, VMCPUID idCpu, uint32_t idPage)3134 { 3135 LogFlow(("GMMR0FreeLargePage: p VM=%p idPage=%x\n", pVM, idPage));3139 GMMR0DECL(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)); 3136 3142 3137 3143 /* … … 3140 3146 PGMM pGMM; 3141 3147 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); 3144 3149 if (RT_FAILURE(rc)) 3145 3150 return rc; … … 3194 3199 * 3195 3200 * @returns see GMMR0FreeLargePage. 3201 * @param pGVM The global (ring-0) VM structure. 3196 3202 * @param pVM The cross context VM structure. 3197 3203 * @param idCpu The VCPU id. 3198 3204 * @param pReq Pointer to the request packet. 3199 3205 */ 3200 GMMR0DECL(int) GMMR0FreeLargePageReq(P VM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq)3206 GMMR0DECL(int) GMMR0FreeLargePageReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq) 3201 3207 { 3202 3208 /* 3203 3209 * Validate input and pass it on. 3204 3210 */ 3205 AssertPtrReturn(pVM, VERR_INVALID_POINTER);3206 3211 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 3207 3212 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMFREEPAGESREQ), … … 3209 3214 VERR_INVALID_PARAMETER); 3210 3215 3211 return GMMR0FreeLargePage(p VM, idCpu, pReq->idPage);3216 return GMMR0FreeLargePage(pGVM, pVM, idCpu, pReq->idPage); 3212 3217 } 3213 3218 … … 3555 3560 * @retval xxx 3556 3561 * 3562 * @param pGVM The global (ring-0) VM structure. 3557 3563 * @param pVM The cross context VM structure. 3558 3564 * @param idCpu The VCPU id. … … 3563 3569 * @thread EMT. 3564 3570 */ 3565 GMMR0DECL(int) GMMR0FreePages(P VM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount)3566 { 3567 LogFlow(("GMMR0FreePages: p VM=%p cPages=%#x paPages=%p enmAccount=%d\n", pVM, cPages, paPages, enmAccount));3571 GMMR0DECL(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)); 3568 3574 3569 3575 /* … … 3572 3578 PGMM pGMM; 3573 3579 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); 3576 3581 if (RT_FAILURE(rc)) 3577 3582 return rc; … … 3607 3612 * 3608 3613 * @returns see GMMR0FreePages. 3614 * @param pGVM The global (ring-0) VM structure. 3609 3615 * @param pVM The cross context VM structure. 3610 3616 * @param idCpu The VCPU id. 3611 3617 * @param pReq Pointer to the request packet. 3612 3618 */ 3613 GMMR0DECL(int) GMMR0FreePagesReq(P VM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq)3619 GMMR0DECL(int) GMMR0FreePagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq) 3614 3620 { 3615 3621 /* 3616 3622 * Validate input and pass it on. 3617 3623 */ 3618 AssertPtrReturn(pVM, VERR_INVALID_POINTER);3619 3624 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 3620 3625 AssertMsgReturn(pReq->Hdr.cbReq >= RT_UOFFSETOF(GMMFREEPAGESREQ, aPages[0]), … … 3625 3630 VERR_INVALID_PARAMETER); 3626 3631 3627 return GMMR0FreePages(p VM, idCpu, pReq->cPages, &pReq->aPages[0], pReq->enmAccount);3632 return GMMR0FreePages(pGVM, pVM, idCpu, pReq->cPages, &pReq->aPages[0], pReq->enmAccount); 3628 3633 } 3629 3634 … … 3645 3650 * but to hope the VM won't use the memory that was returned to it.) 3646 3651 * 3652 * @param pGVM The global (ring-0) VM structure. 3647 3653 * @param pVM The cross context VM structure. 3648 3654 * @param idCpu The VCPU id. … … 3650 3656 * @param cBalloonedPages The number of pages that was ballooned. 3651 3657 * 3652 * @thread EMT .3653 */ 3654 GMMR0DECL(int) GMMR0BalloonedPages(P VM pVM, VMCPUID idCpu, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages)3655 { 3656 LogFlow(("GMMR0BalloonedPages: p VM=%p enmAction=%d cBalloonedPages=%#x\n",3657 p VM, enmAction, cBalloonedPages));3658 * @thread EMT(idCpu) 3659 */ 3660 GMMR0DECL(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)); 3658 3664 3659 3665 AssertMsgReturn(cBalloonedPages < RT_BIT(32 - PAGE_SHIFT), ("%#x\n", cBalloonedPages), VERR_INVALID_PARAMETER); … … 3664 3670 PGMM pGMM; 3665 3671 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); 3668 3673 if (RT_FAILURE(rc)) 3669 3674 return rc; … … 3777 3782 * 3778 3783 * @returns see GMMR0BalloonedPages. 3784 * @param pGVM The global (ring-0) VM structure. 3779 3785 * @param pVM The cross context VM structure. 3780 3786 * @param idCpu The VCPU id. 3781 3787 * @param pReq Pointer to the request packet. 3782 3788 */ 3783 GMMR0DECL(int) GMMR0BalloonedPagesReq(P VM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq)3789 GMMR0DECL(int) GMMR0BalloonedPagesReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq) 3784 3790 { 3785 3791 /* 3786 3792 * Validate input and pass it on. 3787 3793 */ 3788 AssertPtrReturn(pVM, VERR_INVALID_POINTER);3789 3794 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 3790 3795 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMBALLOONEDPAGESREQ), … … 3792 3797 VERR_INVALID_PARAMETER); 3793 3798 3794 return GMMR0BalloonedPages(pVM, idCpu, pReq->enmAction, pReq->cBalloonedPages); 3795 } 3799 return GMMR0BalloonedPages(pGVM, pVM, idCpu, pReq->enmAction, pReq->cBalloonedPages); 3800 } 3801 3796 3802 3797 3803 /** 3798 3804 * Return memory statistics for the hypervisor 3799 3805 * 3800 * @returns VBox status code: 3801 * @param pVM The cross context VM structure. 3806 * @returns VBox status code. 3802 3807 * @param pReq Pointer to the request packet. 3803 3808 */ 3804 GMMR0DECL(int) GMMR0QueryHypervisorMemoryStatsReq(P VM pVM, PGMMMEMSTATSREQ pReq)3809 GMMR0DECL(int) GMMR0QueryHypervisorMemoryStatsReq(PGMMMEMSTATSREQ pReq) 3805 3810 { 3806 3811 /* 3807 3812 * Validate input and pass it on. 3808 3813 */ 3809 AssertPtrReturn(pVM, VERR_INVALID_POINTER);3810 3814 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 3811 3815 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMMEMSTATSREQ), … … 3828 3832 } 3829 3833 3834 3830 3835 /** 3831 3836 * Return memory statistics for the VM 3832 3837 * 3833 * @returns VBox status code: 3838 * @returns VBox status code. 3839 * @param pGVM The global (ring-0) VM structure. 3834 3840 * @param pVM The cross context VM structure. 3835 3841 * @param idCpu Cpu id. 3836 3842 * @param pReq Pointer to the request packet. 3837 */ 3838 GMMR0DECL(int) GMMR0QueryMemoryStatsReq(PVM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq) 3843 * 3844 * @thread EMT(idCpu) 3845 */ 3846 GMMR0DECL(int) GMMR0QueryMemoryStatsReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMMEMSTATSREQ pReq) 3839 3847 { 3840 3848 /* 3841 3849 * Validate input and pass it on. 3842 3850 */ 3843 AssertPtrReturn(pVM, VERR_INVALID_POINTER);3844 3851 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 3845 3852 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMMEMSTATSREQ), … … 3852 3859 PGMM pGMM; 3853 3860 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); 3856 3862 if (RT_FAILURE(rc)) 3857 3863 return rc; … … 4123 4129 * 4124 4130 * @returns VBox status code. 4131 * @param pGVM The global (ring-0) VM structure. 4125 4132 * @param pVM The cross context VM structure. 4126 4133 * @param idChunkMap The chunk to map. NIL_GMM_CHUNKID if nothing to map. 4127 4134 * @param idChunkUnmap The chunk to unmap. NIL_GMM_CHUNKID if nothing to unmap. 4128 4135 * @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(P VM pVM, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3)4132 { 4133 LogFlow(("GMMR0MapUnmapChunk: p VM=%p idChunkMap=%#x idChunkUnmap=%#x ppvR3=%p\n",4134 p VM, idChunkMap, idChunkUnmap, ppvR3));4136 * @thread EMT ??? 4137 */ 4138 GMMR0DECL(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)); 4135 4142 4136 4143 /* … … 4139 4146 PGMM pGMM; 4140 4147 GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE); 4141 PGVM pGVM; 4142 int rc = GVMMR0ByVM(pVM, &pGVM); 4148 int rc = GVMMR0ValidateGVMandVM(pGVM, pVM); 4143 4149 if (RT_FAILURE(rc)) 4144 4150 return rc; … … 4215 4221 * 4216 4222 * @returns see GMMR0MapUnmapChunk. 4223 * @param pGVM The global (ring-0) VM structure. 4217 4224 * @param pVM The cross context VM structure. 4218 4225 * @param pReq Pointer to the request packet. 4219 4226 */ 4220 GMMR0DECL(int) GMMR0MapUnmapChunkReq(P VM pVM, PGMMMAPUNMAPCHUNKREQ pReq)4227 GMMR0DECL(int) GMMR0MapUnmapChunkReq(PGVM pGVM, PVM pVM, PGMMMAPUNMAPCHUNKREQ pReq) 4221 4228 { 4222 4229 /* 4223 4230 * Validate input and pass it on. 4224 4231 */ 4225 AssertPtrReturn(pVM, VERR_INVALID_POINTER);4226 4232 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 4227 4233 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); 4228 4234 4229 return GMMR0MapUnmapChunk(p VM, pReq->idChunkMap, pReq->idChunkUnmap, &pReq->pvR3);4235 return GMMR0MapUnmapChunk(pGVM, pVM, pReq->idChunkMap, pReq->idChunkUnmap, &pReq->pvR3); 4230 4236 } 4231 4237 … … 4238 4244 * 4239 4245 * @returns VBox status code. 4246 * @param pGVM The global (ring-0) VM structure. 4240 4247 * @param pVM The cross context VM structure. 4241 4248 * @param idCpu The VCPU id. 4242 4249 * @param pvR3 Pointer to the chunk size memory block to lock down. 4243 4250 */ 4244 GMMR0DECL(int) GMMR0SeedChunk(P VM pVM, VMCPUID idCpu, RTR3PTR pvR3)4251 GMMR0DECL(int) GMMR0SeedChunk(PGVM pGVM, PVM pVM, VMCPUID idCpu, RTR3PTR pvR3) 4245 4252 { 4246 4253 /* … … 4249 4256 PGMM pGMM; 4250 4257 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); 4253 4259 if (RT_FAILURE(rc)) 4254 4260 return rc; … … 4522 4528 * 4523 4529 * @returns VBox status code. 4530 * @param pGVM The global (ring-0) VM structure. 4524 4531 * @param pVM The cross context VM structure. 4525 4532 * @param idCpu The VCPU id. … … 4531 4538 * @param cRegions The mumber of shared region descriptors. 4532 4539 * @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 */ 4542 GMMR0DECL(int) GMMR0RegisterSharedModule(PGVM pGVM, PVM pVM, VMCPUID idCpu, VBOXOSFAMILY enmGuestOS, char *pszModuleName, 4535 4543 char *pszVersion, RTGCPTR GCPtrModBase, uint32_t cbModule, 4536 4544 uint32_t cRegions, struct VMMDEVSHAREDREGIONDESC const *paRegions) … … 4545 4553 PGMM pGMM; 4546 4554 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); 4549 4556 if (RT_FAILURE(rc)) 4550 4557 return rc; … … 4669 4676 * 4670 4677 * @returns see GMMR0RegisterSharedModule. 4678 * @param pGVM The global (ring-0) VM structure. 4671 4679 * @param pVM The cross context VM structure. 4672 4680 * @param idCpu The VCPU id. 4673 4681 * @param pReq Pointer to the request packet. 4674 4682 */ 4675 GMMR0DECL(int) GMMR0RegisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq)4683 GMMR0DECL(int) GMMR0RegisterSharedModuleReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq) 4676 4684 { 4677 4685 /* 4678 4686 * Validate input and pass it on. 4679 4687 */ 4680 AssertPtrReturn(pVM, VERR_INVALID_POINTER);4681 4688 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); 4683 4692 4684 4693 /* Pass back return code in the request packet to preserve informational codes. (VMMR3CallR0 chokes on them) */ 4685 pReq->rc = GMMR0RegisterSharedModule(p VM, idCpu, pReq->enmGuestOS, pReq->szName, pReq->szVersion,4694 pReq->rc = GMMR0RegisterSharedModule(pGVM, pVM, idCpu, pReq->enmGuestOS, pReq->szName, pReq->szVersion, 4686 4695 pReq->GCBaseAddr, pReq->cbModule, pReq->cRegions, pReq->aRegions); 4687 4696 return VINF_SUCCESS; … … 4693 4702 * 4694 4703 * @returns VBox status code. 4704 * @param pGVM The global (ring-0) VM structure. 4695 4705 * @param pVM The cross context VM structure. 4696 4706 * @param idCpu The VCPU id. … … 4700 4710 * @param cbModule The module size. 4701 4711 */ 4702 GMMR0DECL(int) GMMR0UnregisterSharedModule(P VM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion,4712 GMMR0DECL(int) GMMR0UnregisterSharedModule(PGVM pGVM, PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion, 4703 4713 RTGCPTR GCPtrModBase, uint32_t cbModule) 4704 4714 { … … 4709 4719 PGMM pGMM; 4710 4720 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); 4713 4722 if (RT_FAILURE(rc)) 4714 4723 return rc; … … 4753 4762 #else 4754 4763 4755 NOREF(p VM); 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); 4756 4765 return VERR_NOT_IMPLEMENTED; 4757 4766 #endif … … 4763 4772 * 4764 4773 * @returns see GMMR0UnregisterSharedModule. 4774 * @param pGVM The global (ring-0) VM structure. 4765 4775 * @param pVM The cross context VM structure. 4766 4776 * @param idCpu The VCPU id. 4767 4777 * @param pReq Pointer to the request packet. 4768 4778 */ 4769 GMMR0DECL(int) GMMR0UnregisterSharedModuleReq(P VM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq)4779 GMMR0DECL(int) GMMR0UnregisterSharedModuleReq(PGVM pGVM, PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq) 4770 4780 { 4771 4781 /* 4772 4782 * Validate input and pass it on. 4773 4783 */ 4774 AssertPtrReturn(pVM, VERR_INVALID_POINTER);4775 4784 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 4776 4785 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); 4777 4786 4778 return GMMR0UnregisterSharedModule(p VM, idCpu, pReq->szName, pReq->szVersion, pReq->GCBaseAddr, pReq->cbModule);4787 return GMMR0UnregisterSharedModule(pGVM, pVM, idCpu, pReq->szName, pReq->szVersion, pReq->GCBaseAddr, pReq->cbModule); 4779 4788 } 4780 4789 … … 5070 5079 * 5071 5080 * @returns VBox status code. 5081 * @param pGVM The global (ring-0) VM structure. 5072 5082 * @param pVM The cross context VM structure. 5073 5083 * @param idCpu The VCPU id. 5074 5084 */ 5075 GMMR0DECL(int) GMMR0ResetSharedModules(P VM pVM, VMCPUID idCpu)5085 GMMR0DECL(int) GMMR0ResetSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu) 5076 5086 { 5077 5087 #ifdef VBOX_WITH_PAGE_SHARING … … 5081 5091 PGMM pGMM; 5082 5092 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); 5085 5094 if (RT_FAILURE(rc)) 5086 5095 return rc; … … 5108 5117 return rc; 5109 5118 #else 5110 NOREF(pVM); NOREF(idCpu);5119 RT_NOREF(pGVM, pVM, idCpu); 5111 5120 return VERR_NOT_IMPLEMENTED; 5112 5121 #endif … … 5134 5143 5135 5144 #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. 5140 5148 * 5141 5149 * @returns VBox status code. 5150 * @param pGVM The global (ring-0) VM structure. 5142 5151 * @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 */ 5155 GMMR0DECL(int) GMMR0CheckSharedModules(PGVM pGVM, PVM pVM, VMCPUID idCpu) 5156 { 5157 #ifdef VBOX_WITH_PAGE_SHARING 5146 5158 /* 5147 5159 * Validate input and get the basics. … … 5149 5161 PGMM pGMM; 5150 5162 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); 5201 5164 if (RT_FAILURE(rc)) 5202 5165 return rc; … … 5217 5180 GMMCHECKSHAREDMODULEINFO Args; 5218 5181 Args.pGVM = pGVM; 5219 Args.idCpu = pVCpu->idCpu;5182 Args.idCpu = idCpu; 5220 5183 rc = RTAvlGCPtrDoWithAll(&pGVM->gmm.s.pSharedModuleTree, true /* fFromLeft */, gmmR0CheckSharedModule, &Args); 5221 5184 … … 5287 5250 * 5288 5251 * @returns VBox status code. 5252 * @param pGVM The global (ring-0) VM structure. 5289 5253 * @param pVM The cross context VM structure. 5290 5254 * @param pReq Pointer to the request packet. 5291 5255 */ 5292 GMMR0DECL(int) GMMR0FindDuplicatePageReq(P VM pVM, PGMMFINDDUPLICATEPAGEREQ pReq)5256 GMMR0DECL(int) GMMR0FindDuplicatePageReq(PGVM pGVM, PVM pVM, PGMMFINDDUPLICATEPAGEREQ pReq) 5293 5257 { 5294 5258 /* 5295 5259 * Validate input and pass it on. 5296 5260 */ 5297 AssertPtrReturn(pVM, VERR_INVALID_POINTER);5298 5261 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 5299 5262 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); … … 5302 5265 GMM_GET_VALID_INSTANCE(pGMM, VERR_GMM_INSTANCE); 5303 5266 5304 PGVM pGVM; 5305 int rc = GVMMR0ByVM(pVM, &pGVM); 5267 int rc = GVMMR0ValidateGVMandVM(pGVM, pVM); 5306 5268 if (RT_FAILURE(rc)) 5307 5269 return rc; … … 5361 5323 * @param pStats Where to put the statistics. 5362 5324 * @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 */ 5328 GMMR0DECL(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)); 5368 5331 5369 5332 /* … … 5378 5341 5379 5342 /* 5380 * Resolve the VM handle, if not NULL, and lock the GMM.5343 * Validate the VM handle, if not NULL, and lock the GMM. 5381 5344 */ 5382 5345 int rc; 5383 PGVM pGVM; 5384 if (pVM) 5385 { 5386 rc = GVMMR0ByVM(pVM, &pGVM); 5346 if (pGVM) 5347 { 5348 rc = GVMMR0ValidateGVMandVM(pGVM, pVM); 5387 5349 if (RT_FAILURE(rc)) 5388 5350 return rc; 5389 5351 } 5390 else5391 pGVM = NULL;5392 5352 5393 5353 rc = gmmR0MutexAcquire(pGMM); … … 5428 5388 * 5429 5389 * @returns see GMMR0QueryStatistics. 5390 * @param pGVM The global (ring-0) VM structure. Optional. 5430 5391 * @param pVM The cross context VM structure. Optional. 5431 5392 * @param pReq Pointer to the request packet. 5432 5393 */ 5433 GMMR0DECL(int) GMMR0QueryStatisticsReq(P VM pVM, PGMMQUERYSTATISTICSSREQ pReq)5394 GMMR0DECL(int) GMMR0QueryStatisticsReq(PGVM pGVM, PVM pVM, PGMMQUERYSTATISTICSSREQ pReq) 5434 5395 { 5435 5396 /* … … 5439 5400 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); 5440 5401 5441 return GMMR0QueryStatistics(&pReq->Stats, pReq->pSession, p VM);5402 return GMMR0QueryStatistics(&pReq->Stats, pReq->pSession, pGVM, pVM); 5442 5403 } 5443 5404 … … 5451 5412 * indicates which to reset. 5452 5413 * @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 */ 5417 GMMR0DECL(int) GMMR0ResetStatistics(PCGMMSTATS pStats, PSUPDRVSESSION pSession, PGVM pGVM, PVM pVM) 5418 { 5419 NOREF(pStats); NOREF(pSession); NOREF(pVM); NOREF(pGVM); 5458 5420 /* Currently nothing we can reset at the moment. */ 5459 5421 return VINF_SUCCESS; … … 5465 5427 * 5466 5428 * @returns see GMMR0ResetStatistics. 5429 * @param pGVM The global (ring-0) VM structure. Optional. 5467 5430 * @param pVM The cross context VM structure. Optional. 5468 5431 * @param pReq Pointer to the request packet. 5469 5432 */ 5470 GMMR0DECL(int) GMMR0ResetStatisticsReq(P VM pVM, PGMMRESETSTATISTICSSREQ pReq)5433 GMMR0DECL(int) GMMR0ResetStatisticsReq(PGVM pGVM, PVM pVM, PGMMRESETSTATISTICSSREQ pReq) 5471 5434 { 5472 5435 /* … … 5476 5439 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); 5477 5440 5478 return GMMR0ResetStatistics(&pReq->Stats, pReq->pSession, p VM);5479 } 5480 5441 return GMMR0ResetStatistics(&pReq->Stats, pReq->pSession, pGVM, pVM); 5442 } 5443 -
trunk/src/VBox/VMM/VMMR0/GVMMR0.cpp
r68001 r68007 2396 2396 * @param pVM The cross context VM structure. 2397 2397 * @param idCpu The Virtual CPU ID of the EMT to wake up. 2398 * @param fTakeUsedLock Take the used lock or not2399 2398 * @thread Any but EMT(idCpu). 2400 2399 * @deprecated Don't use in new code if possible! Use the GVM variant. -
trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
r68001 r68007 1665 1665 if (u64Arg) 1666 1666 return VERR_INVALID_PARAMETER; 1667 rc = GMMR0InitialReservationReq(p VM, idCpu, (PGMMINITIALRESERVATIONREQ)pReqHdr);1667 rc = GMMR0InitialReservationReq(pGVM, pVM, idCpu, (PGMMINITIALRESERVATIONREQ)pReqHdr); 1668 1668 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1669 1669 break; … … 1672 1672 if (u64Arg) 1673 1673 return VERR_INVALID_PARAMETER; 1674 rc = GMMR0UpdateReservationReq(p VM, idCpu, (PGMMUPDATERESERVATIONREQ)pReqHdr);1674 rc = GMMR0UpdateReservationReq(pGVM, pVM, idCpu, (PGMMUPDATERESERVATIONREQ)pReqHdr); 1675 1675 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1676 1676 break; … … 1679 1679 if (u64Arg) 1680 1680 return VERR_INVALID_PARAMETER; 1681 rc = GMMR0AllocatePagesReq(p VM, idCpu, (PGMMALLOCATEPAGESREQ)pReqHdr);1681 rc = GMMR0AllocatePagesReq(pGVM, pVM, idCpu, (PGMMALLOCATEPAGESREQ)pReqHdr); 1682 1682 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1683 1683 break; … … 1686 1686 if (u64Arg) 1687 1687 return VERR_INVALID_PARAMETER; 1688 rc = GMMR0FreePagesReq(p VM, idCpu, (PGMMFREEPAGESREQ)pReqHdr);1688 rc = GMMR0FreePagesReq(pGVM, pVM, idCpu, (PGMMFREEPAGESREQ)pReqHdr); 1689 1689 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1690 1690 break; … … 1693 1693 if (u64Arg) 1694 1694 return VERR_INVALID_PARAMETER; 1695 rc = GMMR0FreeLargePageReq(p VM, idCpu, (PGMMFREELARGEPAGEREQ)pReqHdr);1695 rc = GMMR0FreeLargePageReq(pGVM, pVM, idCpu, (PGMMFREELARGEPAGEREQ)pReqHdr); 1696 1696 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1697 1697 break; … … 1700 1700 if (u64Arg) 1701 1701 return VERR_INVALID_PARAMETER; 1702 rc = GMMR0QueryHypervisorMemoryStatsReq( pVM,(PGMMMEMSTATSREQ)pReqHdr);1702 rc = GMMR0QueryHypervisorMemoryStatsReq((PGMMMEMSTATSREQ)pReqHdr); 1703 1703 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1704 1704 break; … … 1709 1709 if (u64Arg) 1710 1710 return VERR_INVALID_PARAMETER; 1711 rc = GMMR0QueryMemoryStatsReq(p VM, idCpu, (PGMMMEMSTATSREQ)pReqHdr);1711 rc = GMMR0QueryMemoryStatsReq(pGVM, pVM, idCpu, (PGMMMEMSTATSREQ)pReqHdr); 1712 1712 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1713 1713 break; … … 1716 1716 if (u64Arg) 1717 1717 return VERR_INVALID_PARAMETER; 1718 rc = GMMR0BalloonedPagesReq(p VM, idCpu, (PGMMBALLOONEDPAGESREQ)pReqHdr);1718 rc = GMMR0BalloonedPagesReq(pGVM, pVM, idCpu, (PGMMBALLOONEDPAGESREQ)pReqHdr); 1719 1719 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1720 1720 break; … … 1723 1723 if (u64Arg) 1724 1724 return VERR_INVALID_PARAMETER; 1725 rc = GMMR0MapUnmapChunkReq(p VM, (PGMMMAPUNMAPCHUNKREQ)pReqHdr);1725 rc = GMMR0MapUnmapChunkReq(pGVM, pVM, (PGMMMAPUNMAPCHUNKREQ)pReqHdr); 1726 1726 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1727 1727 break; … … 1730 1730 if (pReqHdr) 1731 1731 return VERR_INVALID_PARAMETER; 1732 rc = GMMR0SeedChunk(p VM, idCpu, (RTR3PTR)u64Arg);1732 rc = GMMR0SeedChunk(pGVM, pVM, idCpu, (RTR3PTR)u64Arg); 1733 1733 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1734 1734 break; … … 1739 1739 if (u64Arg) 1740 1740 return VERR_INVALID_PARAMETER; 1741 rc = GMMR0RegisterSharedModuleReq(p VM, idCpu, (PGMMREGISTERSHAREDMODULEREQ)pReqHdr);1741 rc = GMMR0RegisterSharedModuleReq(pGVM, pVM, idCpu, (PGMMREGISTERSHAREDMODULEREQ)pReqHdr); 1742 1742 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1743 1743 break; … … 1748 1748 if (u64Arg) 1749 1749 return VERR_INVALID_PARAMETER; 1750 rc = GMMR0UnregisterSharedModuleReq(p VM, idCpu, (PGMMUNREGISTERSHAREDMODULEREQ)pReqHdr);1750 rc = GMMR0UnregisterSharedModuleReq(pGVM, pVM, idCpu, (PGMMUNREGISTERSHAREDMODULEREQ)pReqHdr); 1751 1751 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1752 1752 break; … … 1758 1758 || pReqHdr) 1759 1759 return VERR_INVALID_PARAMETER; 1760 rc = GMMR0ResetSharedModules(p VM, idCpu);1760 rc = GMMR0ResetSharedModules(pGVM, pVM, idCpu); 1761 1761 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1762 1762 break; … … 1770 1770 || pReqHdr) 1771 1771 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); 1790 1773 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1791 1774 break; … … 1797 1780 if (u64Arg) 1798 1781 return VERR_INVALID_PARAMETER; 1799 rc = GMMR0FindDuplicatePageReq(p VM, (PGMMFINDDUPLICATEPAGEREQ)pReqHdr);1782 rc = GMMR0FindDuplicatePageReq(pGVM, pVM, (PGMMFINDDUPLICATEPAGEREQ)pReqHdr); 1800 1783 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1801 1784 break; … … 1805 1788 if (u64Arg) 1806 1789 return VERR_INVALID_PARAMETER; 1807 rc = GMMR0QueryStatisticsReq(p VM, (PGMMQUERYSTATISTICSSREQ)pReqHdr);1790 rc = GMMR0QueryStatisticsReq(pGVM, pVM, (PGMMQUERYSTATISTICSSREQ)pReqHdr); 1808 1791 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1809 1792 break; … … 1812 1795 if (u64Arg) 1813 1796 return VERR_INVALID_PARAMETER; 1814 rc = GMMR0ResetStatisticsReq(p VM, (PGMMRESETSTATISTICSSREQ)pReqHdr);1797 rc = GMMR0ResetStatisticsReq(pGVM, pVM, (PGMMRESETSTATISTICSSREQ)pReqHdr); 1815 1798 VMM_CHECK_SMAP_CHECK2(pVM, RT_NOTHING); 1816 1799 break;
Note:
See TracChangeset
for help on using the changeset viewer.