Changeset 19454 in vbox for trunk/src/VBox/VMM/VMMR0/GMMR0.cpp
- Timestamp:
- May 6, 2009 7:20:18 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 46985
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/GMMR0.cpp
r19381 r19454 1048 1048 * @thread The creator thread / EMT. 1049 1049 */ 1050 GMMR0DECL(int) GMMR0InitialReservation(PVM pVM, unsignedidCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages,1050 GMMR0DECL(int) GMMR0InitialReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages, 1051 1051 GMMOCPOLICY enmPolicy, GMMPRIORITY enmPriority) 1052 1052 { … … 1059 1059 PGMM pGMM; 1060 1060 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 1061 PGVM pGVM = GVMMR0ByVM(pVM); 1062 if (RT_UNLIKELY(!pGVM)) 1063 return VERR_INVALID_PARAMETER; 1064 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 1065 return VERR_NOT_OWNER; 1061 PGVM pGVM; 1062 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 1063 if (RT_FAILURE(rc)) 1064 return rc; 1066 1065 1067 1066 AssertReturn(cBasePages, VERR_INVALID_PARAMETER); … … 1071 1070 AssertReturn(enmPriority > GMMPRIORITY_INVALID && enmPriority < GMMPRIORITY_END, VERR_INVALID_PARAMETER); 1072 1071 1073 intrc = RTSemFastMutexRequest(pGMM->Mtx);1072 rc = RTSemFastMutexRequest(pGMM->Mtx); 1074 1073 AssertRC(rc); 1075 1074 … … 1115 1114 * @param pReq The request packet. 1116 1115 */ 1117 GMMR0DECL(int) GMMR0InitialReservationReq(PVM pVM, unsignedidCpu, PGMMINITIALRESERVATIONREQ pReq)1116 GMMR0DECL(int) GMMR0InitialReservationReq(PVM pVM, VMCPUID idCpu, PGMMINITIALRESERVATIONREQ pReq) 1118 1117 { 1119 1118 /* … … 1144 1143 * @thread EMT. 1145 1144 */ 1146 GMMR0DECL(int) GMMR0UpdateReservation(PVM pVM, unsignedidCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages)1145 GMMR0DECL(int) GMMR0UpdateReservation(PVM pVM, VMCPUID idCpu, uint64_t cBasePages, uint32_t cShadowPages, uint32_t cFixedPages) 1147 1146 { 1148 1147 LogFlow(("GMMR0UpdateReservation: pVM=%p cBasePages=%#llx cShadowPages=%#x cFixedPages=%#x\n", … … 1154 1153 PGMM pGMM; 1155 1154 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 1156 PGVM pGVM = GVMMR0ByVM(pVM); 1157 if (RT_UNLIKELY(!pGVM)) 1158 return VERR_INVALID_PARAMETER; 1159 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 1160 return VERR_NOT_OWNER; 1155 PGVM pGVM; 1156 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 1157 if (RT_FAILURE(rc)) 1158 return rc; 1161 1159 1162 1160 AssertReturn(cBasePages, VERR_INVALID_PARAMETER); … … 1164 1162 AssertReturn(cFixedPages, VERR_INVALID_PARAMETER); 1165 1163 1166 intrc = RTSemFastMutexRequest(pGMM->Mtx);1164 rc = RTSemFastMutexRequest(pGMM->Mtx); 1167 1165 AssertRC(rc); 1168 1166 … … 1207 1205 * @param pReq The request packet. 1208 1206 */ 1209 GMMR0DECL(int) GMMR0UpdateReservationReq(PVM pVM, unsignedidCpu, PGMMUPDATERESERVATIONREQ pReq)1207 GMMR0DECL(int) GMMR0UpdateReservationReq(PVM pVM, VMCPUID idCpu, PGMMUPDATERESERVATIONREQ pReq) 1210 1208 { 1211 1209 /* … … 1851 1849 * @thread EMT. 1852 1850 */ 1853 GMMR0DECL(int) GMMR0AllocateHandyPages(PVM pVM, unsignedidCpu, uint32_t cPagesToUpdate, uint32_t cPagesToAlloc, PGMMPAGEDESC paPages)1851 GMMR0DECL(int) GMMR0AllocateHandyPages(PVM pVM, VMCPUID idCpu, uint32_t cPagesToUpdate, uint32_t cPagesToAlloc, PGMMPAGEDESC paPages) 1854 1852 { 1855 1853 LogFlow(("GMMR0AllocateHandyPages: pVM=%p cPagesToUpdate=%#x cPagesToAlloc=%#x paPages=%p\n", … … 1862 1860 PGMM pGMM; 1863 1861 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 1864 PGVM pGVM = GVMMR0ByVM(pVM); 1865 if (RT_UNLIKELY(!pGVM)) 1866 return VERR_INVALID_PARAMETER; 1867 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 1868 return VERR_NOT_OWNER; 1862 PGVM pGVM; 1863 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 1864 if (RT_FAILURE(rc)) 1865 return rc; 1869 1866 1870 1867 AssertPtrReturn(paPages, VERR_INVALID_PARAMETER); … … 1898 1895 } 1899 1896 1900 intrc = RTSemFastMutexRequest(pGMM->Mtx);1897 rc = RTSemFastMutexRequest(pGMM->Mtx); 1901 1898 AssertRC(rc); 1902 1899 … … 2034 2031 * @thread EMT. 2035 2032 */ 2036 GMMR0DECL(int) GMMR0AllocatePages(PVM pVM, unsignedidCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount)2033 GMMR0DECL(int) GMMR0AllocatePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMPAGEDESC paPages, GMMACCOUNT enmAccount) 2037 2034 { 2038 2035 LogFlow(("GMMR0AllocatePages: pVM=%p cPages=%#x paPages=%p enmAccount=%d\n", pVM, cPages, paPages, enmAccount)); … … 2043 2040 PGMM pGMM; 2044 2041 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 2045 PGVM pGVM = GVMMR0ByVM(pVM); 2046 if (RT_UNLIKELY(!pGVM)) 2047 return VERR_INVALID_PARAMETER; 2048 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 2049 return VERR_NOT_OWNER; 2042 PGVM pGVM; 2043 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 2044 if (RT_FAILURE(rc)) 2045 return rc; 2050 2046 2051 2047 AssertPtrReturn(paPages, VERR_INVALID_PARAMETER); … … 2066 2062 } 2067 2063 2068 intrc = RTSemFastMutexRequest(pGMM->Mtx);2064 rc = RTSemFastMutexRequest(pGMM->Mtx); 2069 2065 AssertRC(rc); 2070 2066 … … 2104 2100 * @param pReq The request packet. 2105 2101 */ 2106 GMMR0DECL(int) GMMR0AllocatePagesReq(PVM pVM, unsignedidCpu, PGMMALLOCATEPAGESREQ pReq)2102 GMMR0DECL(int) GMMR0AllocatePagesReq(PVM pVM, VMCPUID idCpu, PGMMALLOCATEPAGESREQ pReq) 2107 2103 { 2108 2104 /* … … 2430 2426 * @thread EMT. 2431 2427 */ 2432 GMMR0DECL(int) GMMR0FreePages(PVM pVM, unsignedidCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount)2428 GMMR0DECL(int) GMMR0FreePages(PVM pVM, VMCPUID idCpu, uint32_t cPages, PGMMFREEPAGEDESC paPages, GMMACCOUNT enmAccount) 2433 2429 { 2434 2430 LogFlow(("GMMR0FreePages: pVM=%p cPages=%#x paPages=%p enmAccount=%d\n", pVM, cPages, paPages, enmAccount)); … … 2439 2435 PGMM pGMM; 2440 2436 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 2441 PGVM pGVM = GVMMR0ByVM(pVM); 2442 if (RT_UNLIKELY(!pGVM)) 2443 return VERR_INVALID_PARAMETER; 2444 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 2445 return VERR_NOT_OWNER; 2437 PGVM pGVM; 2438 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 2439 if (RT_FAILURE(rc)) 2440 return rc; 2446 2441 2447 2442 AssertPtrReturn(paPages, VERR_INVALID_PARAMETER); … … 2457 2452 * Take the semaphore and call the worker function. 2458 2453 */ 2459 intrc = RTSemFastMutexRequest(pGMM->Mtx);2454 rc = RTSemFastMutexRequest(pGMM->Mtx); 2460 2455 AssertRC(rc); 2461 2456 … … 2476 2471 * @param pReq The request packet. 2477 2472 */ 2478 GMMR0DECL(int) GMMR0FreePagesReq(PVM pVM, unsignedidCpu, PGMMFREEPAGESREQ pReq)2473 GMMR0DECL(int) GMMR0FreePagesReq(PVM pVM, VMCPUID idCpu, PGMMFREEPAGESREQ pReq) 2479 2474 { 2480 2475 /* … … 2518 2513 * @thread EMT. 2519 2514 */ 2520 GMMR0DECL(int) GMMR0BalloonedPages(PVM pVM, unsignedidCpu, uint32_t cBalloonedPages, uint32_t cPagesToFree, PGMMFREEPAGEDESC paPages, bool fCompleted)2515 GMMR0DECL(int) GMMR0BalloonedPages(PVM pVM, VMCPUID idCpu, uint32_t cBalloonedPages, uint32_t cPagesToFree, PGMMFREEPAGEDESC paPages, bool fCompleted) 2521 2516 { 2522 2517 LogFlow(("GMMR0BalloonedPages: pVM=%p cBalloonedPages=%#x cPagestoFree=%#x paPages=%p enmAccount=%d fCompleted=%RTbool\n", … … 2528 2523 PGMM pGMM; 2529 2524 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 2530 PGVM pGVM = GVMMR0ByVM(pVM); 2531 if (RT_UNLIKELY(!pGVM)) 2532 return VERR_INVALID_PARAMETER; 2533 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 2534 return VERR_NOT_OWNER; 2525 PGVM pGVM; 2526 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 2527 if (RT_FAILURE(rc)) 2528 return rc; 2535 2529 2536 2530 AssertPtrReturn(paPages, VERR_INVALID_PARAMETER); … … 2546 2540 * Take the sempahore and do some more validations. 2547 2541 */ 2548 intrc = RTSemFastMutexRequest(pGMM->Mtx);2542 rc = RTSemFastMutexRequest(pGMM->Mtx); 2549 2543 AssertRC(rc); 2550 2544 if (pGVM->gmm.s.Allocated.cBasePages >= cPagesToFree) … … 2604 2598 * @param pReq The request packet. 2605 2599 */ 2606 GMMR0DECL(int) GMMR0BalloonedPagesReq(PVM pVM, unsignedidCpu, PGMMBALLOONEDPAGESREQ pReq)2600 GMMR0DECL(int) GMMR0BalloonedPagesReq(PVM pVM, VMCPUID idCpu, PGMMBALLOONEDPAGESREQ pReq) 2607 2601 { 2608 2602 /* … … 2633 2627 * @thread EMT. 2634 2628 */ 2635 GMMR0DECL(int) GMMR0DeflatedBalloon(PVM pVM, unsignedidCpu, uint32_t cPages)2629 GMMR0DECL(int) GMMR0DeflatedBalloon(PVM pVM, VMCPUID idCpu, uint32_t cPages) 2636 2630 { 2637 2631 LogFlow(("GMMR0DeflatedBalloon: pVM=%p cPages=%#x\n", pVM, cPages)); … … 2642 2636 PGMM pGMM; 2643 2637 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 2644 PGVM pGVM = GVMMR0ByVM(pVM); 2645 if (RT_UNLIKELY(!pGVM)) 2646 return VERR_INVALID_PARAMETER; 2647 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 2648 return VERR_NOT_OWNER; 2638 PGVM pGVM; 2639 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 2640 if (RT_FAILURE(rc)) 2641 return rc; 2649 2642 2650 2643 AssertMsgReturn(cPages < RT_BIT(32 - PAGE_SHIFT), ("%#x\n", cPages), VERR_INVALID_PARAMETER); … … 2653 2646 * Take the sempahore and do some more validations. 2654 2647 */ 2655 intrc = RTSemFastMutexRequest(pGMM->Mtx);2648 rc = RTSemFastMutexRequest(pGMM->Mtx); 2656 2649 AssertRC(rc); 2657 2650 … … 2824 2817 * @thread EMT 2825 2818 */ 2826 GMMR0DECL(int) GMMR0MapUnmapChunk(PVM pVM, unsignedidCpu, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3)2819 GMMR0DECL(int) GMMR0MapUnmapChunk(PVM pVM, VMCPUID idCpu, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3) 2827 2820 { 2828 2821 LogFlow(("GMMR0MapUnmapChunk: pVM=%p idChunkMap=%#x idChunkUnmap=%#x ppvR3=%p\n", … … 2834 2827 PGMM pGMM; 2835 2828 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 2836 PGVM pGVM = GVMMR0ByVM(pVM); 2837 if (RT_UNLIKELY(!pGVM)) 2838 return VERR_INVALID_PARAMETER; 2839 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 2840 return VERR_NOT_OWNER; 2829 PGVM pGVM; 2830 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 2831 if (RT_FAILURE(rc)) 2832 return rc; 2841 2833 2842 2834 AssertCompile(NIL_GMM_CHUNKID == 0); … … 2862 2854 * it it's limits, so, no problem here. 2863 2855 */ 2864 intrc = RTSemFastMutexRequest(pGMM->Mtx);2856 rc = RTSemFastMutexRequest(pGMM->Mtx); 2865 2857 AssertRC(rc); 2866 2858 … … 2909 2901 * @param pReq The request packet. 2910 2902 */ 2911 GMMR0DECL(int) GMMR0MapUnmapChunkReq(PVM pVM, unsignedidCpu, PGMMMAPUNMAPCHUNKREQ pReq)2903 GMMR0DECL(int) GMMR0MapUnmapChunkReq(PVM pVM, VMCPUID idCpu, PGMMMAPUNMAPCHUNKREQ pReq) 2912 2904 { 2913 2905 /* … … 2933 2925 * @param pvR3 Pointer to the chunk size memory block to lock down. 2934 2926 */ 2935 GMMR0DECL(int) GMMR0SeedChunk(PVM pVM, unsignedidCpu, RTR3PTR pvR3)2927 GMMR0DECL(int) GMMR0SeedChunk(PVM pVM, VMCPUID idCpu, RTR3PTR pvR3) 2936 2928 { 2937 2929 /* … … 2940 2932 PGMM pGMM; 2941 2933 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 2942 PGVM pGVM = GVMMR0ByVM(pVM); 2943 if (RT_UNLIKELY(!pGVM)) 2944 return VERR_INVALID_PARAMETER; 2945 if (RT_UNLIKELY(pGVM->aCpus[idCpu].hEMT != RTThreadNativeSelf())) 2946 return VERR_NOT_OWNER; 2934 PGVM pGVM; 2935 int rc = GVMMR0ByVMAndEMT(pVM, idCpu, &pGVM); 2936 if (RT_FAILURE(rc)) 2937 return rc; 2947 2938 2948 2939 AssertPtrReturn(pvR3, VERR_INVALID_POINTER); … … 2959 2950 */ 2960 2951 RTR0MEMOBJ MemObj; 2961 intrc = RTR0MemObjLockUser(&MemObj, pvR3, GMM_CHUNK_SIZE, NIL_RTR0PROCESS);2952 rc = RTR0MemObjLockUser(&MemObj, pvR3, GMM_CHUNK_SIZE, NIL_RTR0PROCESS); 2962 2953 if (RT_SUCCESS(rc)) 2963 2954 {
Note:
See TracChangeset
for help on using the changeset viewer.