Lines Matching defs:pGVM

110     PGVM                pGVM;
303 static void gvmmR0InitPerVMData(PGVM pGVM);
775 && !pHandle->pGVM
794 pHandle->pGVM = NULL;
807 PGVM pGVM = (PGVM)RTMemAllocZ(RT_UOFFSETOF(GVM, aCpus[cCpus]));
808 if (pGVM)
810 pGVM->u32Magic = GVM_MAGIC;
811 pGVM->hSelf = iHandle;
812 pGVM->pVM = NULL;
813 pGVM->cCpus = cCpus;
815 gvmmR0InitPerVMData(pGVM);
816 GMMR0InitPerVMData(pGVM);
823 rc = RTR0MemObjAllocLow(&pGVM->gvmm.s.VMMemObj, cPages << PAGE_SHIFT, false /* fExecutable */);
826 PVM pVM = (PVM)RTR0MemObjAddress(pGVM->gvmm.s.VMMemObj); AssertPtr(pVM);
840 rc = RTR0MemObjAllocPage(&pGVM->gvmm.s.VMPagesMemObj, cPages * sizeof(SUPPAGE), false /* fExecutable */);
843 PSUPPAGE paPages = (PSUPPAGE)RTR0MemObjAddress(pGVM->gvmm.s.VMPagesMemObj); AssertPtr(paPages);
847 paPages[iPage].Phys = RTR0MemObjGetPagePhysAddr(pGVM->gvmm.s.VMMemObj, iPage);
854 rc = RTR0MemObjMapUser(&pGVM->gvmm.s.VMMapObj, pGVM->gvmm.s.VMMemObj, (RTR3PTR)-1, 0,
858 pVM->pVMR3 = RTR0MemObjAddressR3(pGVM->gvmm.s.VMMapObj);
870 rc = RTR0MemObjMapUser(&pGVM->gvmm.s.VMPagesMapObj, pGVM->gvmm.s.VMPagesMemObj, (RTR3PTR)-1,
875 pVM->paVMPagesR3 = RTR0MemObjAddressR3(pGVM->gvmm.s.VMPagesMapObj);
883 pHandle->pGVM = pGVM;
886 pGVM->pVM = pVM;
887 pGVM->aCpus[0].hEMT = hEMT0;
894 VBOXVMM_R0_GVMM_VM_CREATED(pGVM, pVM, ProcId, (void *)hEMT0, cCpus);
900 Log(("GVMMR0CreateVM: pVM=%p pVMR3=%p pGVM=%p hGVM=%d\n", pVM, pVM->pVMR3, pGVM, iHandle));
905 RTR0MemObjFree(pGVM->gvmm.s.VMMapObj, false /* fFreeMappings */);
906 pGVM->gvmm.s.VMMapObj = NIL_RTR0MEMOBJ;
908 RTR0MemObjFree(pGVM->gvmm.s.VMPagesMemObj, false /* fFreeMappings */);
909 pGVM->gvmm.s.VMPagesMemObj = NIL_RTR0MEMOBJ;
911 RTR0MemObjFree(pGVM->gvmm.s.VMMemObj, false /* fFreeMappings */);
912 pGVM->gvmm.s.VMMemObj = NIL_RTR0MEMOBJ;
948 * @param pGVM Pointer to the global VM structure.
950 static void gvmmR0InitPerVMData(PGVM pGVM)
954 pGVM->gvmm.s.VMMemObj = NIL_RTR0MEMOBJ;
955 pGVM->gvmm.s.VMMapObj = NIL_RTR0MEMOBJ;
956 pGVM->gvmm.s.VMPagesMemObj = NIL_RTR0MEMOBJ;
957 pGVM->gvmm.s.VMPagesMapObj = NIL_RTR0MEMOBJ;
958 pGVM->gvmm.s.fDoneVMMR0Init = false;
959 pGVM->gvmm.s.fDoneVMMR0Term = false;
961 for (VMCPUID i = 0; i < pGVM->cCpus; i++)
963 pGVM->aCpus[i].gvmm.s.HaltEventMulti = NIL_RTSEMEVENTMULTI;
964 pGVM->aCpus[i].hEMT = NIL_RTNATIVETHREAD;
982 PGVM pGVM;
984 int rc = gvmmR0ByVMAndEMT(pVM, 0 /* idCpu */, &pGVM, &pGVMM);
987 if ( !pGVM->gvmm.s.fDoneVMMR0Init
988 && pGVM->aCpus[0].gvmm.s.HaltEventMulti == NIL_RTSEMEVENTMULTI)
990 for (VMCPUID i = 0; i < pGVM->cCpus; i++)
992 rc = RTSemEventMultiCreate(&pGVM->aCpus[i].gvmm.s.HaltEventMulti);
995 pGVM->aCpus[i].gvmm.s.HaltEventMulti = NIL_RTSEMEVENTMULTI;
1019 PGVM pGVM;
1021 int rc = gvmmR0ByVMAndEMT(pVM, 0 /* idCpu */, &pGVM, &pGVMM);
1025 pGVM->gvmm.s.fDoneVMMR0Init = true;
1034 * @param pGVM Pointer to the global VM structure. Optional.
1037 GVMMR0DECL(bool) GVMMR0DoingTermVM(PVM pVM, PGVM pGVM)
1040 AssertPtrNullReturn(pGVM, false);
1041 AssertReturn(!pGVM || pGVM->u32Magic == GVM_MAGIC, false);
1042 if (!pGVM)
1045 int rc = gvmmR0ByVMAndEMT(pVM, 0 /* idCpu */, &pGVM, &pGVMM);
1050 if (pGVM->gvmm.s.fDoneVMMR0Term)
1052 pGVM->gvmm.s.fDoneVMMR0Term = true;
1112 && VALID_PTR(pHandle->pGVM)
1113 && pHandle->pGVM->u32Magic == GVM_MAGIC)
1145 * @param pGVM The GVM pointer.
1147 static void gvmmR0CleanupVM(PGVM pGVM)
1149 if ( pGVM->gvmm.s.fDoneVMMR0Init
1150 && !pGVM->gvmm.s.fDoneVMMR0Term)
1152 if ( pGVM->gvmm.s.VMMemObj != NIL_RTR0MEMOBJ
1153 && RTR0MemObjAddress(pGVM->gvmm.s.VMMemObj) == pGVM->pVM)
1156 VMMR0TermVM(pGVM->pVM, pGVM);
1159 AssertMsgFailed(("gvmmR0CleanupVM: VMMemObj=%p pVM=%p\n", pGVM->gvmm.s.VMMemObj, pGVM->pVM));
1162 GMMR0CleanupVM(pGVM);
1250 PGVM pGVM = pHandle->pGVM;
1251 if ( VALID_PTR(pGVM)
1252 && pGVM->u32Magic == GVM_MAGIC)
1254 pGVMM->cEMTs -= pGVM->cCpus;
1257 gvmmR0CleanupVM(pGVM);
1263 if (pGVM->gvmm.s.VMPagesMapObj != NIL_RTR0MEMOBJ)
1265 rc = RTR0MemObjFree(pGVM->gvmm.s.VMPagesMapObj, false /* fFreeMappings */); AssertRC(rc);
1266 pGVM->gvmm.s.VMPagesMapObj = NIL_RTR0MEMOBJ;
1269 if (pGVM->gvmm.s.VMMapObj != NIL_RTR0MEMOBJ)
1271 rc = RTR0MemObjFree(pGVM->gvmm.s.VMMapObj, false /* fFreeMappings */); AssertRC(rc);
1272 pGVM->gvmm.s.VMMapObj = NIL_RTR0MEMOBJ;
1275 if (pGVM->gvmm.s.VMPagesMemObj != NIL_RTR0MEMOBJ)
1277 rc = RTR0MemObjFree(pGVM->gvmm.s.VMPagesMemObj, false /* fFreeMappings */); AssertRC(rc);
1278 pGVM->gvmm.s.VMPagesMemObj = NIL_RTR0MEMOBJ;
1281 if (pGVM->gvmm.s.VMMemObj != NIL_RTR0MEMOBJ)
1283 rc = RTR0MemObjFree(pGVM->gvmm.s.VMMemObj, false /* fFreeMappings */); AssertRC(rc);
1284 pGVM->gvmm.s.VMMemObj = NIL_RTR0MEMOBJ;
1287 for (VMCPUID i = 0; i < pGVM->cCpus; i++)
1289 if (pGVM->aCpus[i].gvmm.s.HaltEventMulti != NIL_RTSEMEVENTMULTI)
1291 rc = RTSemEventMultiDestroy(pGVM->aCpus[i].gvmm.s.HaltEventMulti); AssertRC(rc);
1292 pGVM->aCpus[i].gvmm.s.HaltEventMulti = NIL_RTSEMEVENTMULTI;
1297 pGVM->u32Magic |= UINT32_C(0x80000000);
1298 RTMemFree(pGVM);
1311 ASMAtomicWriteNullPtr(&pHandle->pGVM);
1340 PGVM pGVM;
1342 int rc = gvmmR0ByVM(pVM, &pGVM, &pGVMM, false /* fTakeUsedLock */);
1346 AssertReturn(idCpu < pGVM->cCpus, VERR_INVALID_CPU_ID);
1347 AssertReturn(pGVM->aCpus[idCpu].hEMT == NIL_RTNATIVETHREAD, VERR_ACCESS_DENIED);
1348 Assert(pGVM->cCpus == pVM->cCpus);
1351 pVM->aCpus[idCpu].hNativeThreadR0 = pGVM->aCpus[idCpu].hEMT = RTThreadNativeSelf();
1381 PGVM pGVM = pHandle->pGVM;
1382 AssertPtrReturn(pGVM, NULL);
1383 AssertReturn(pGVM->pVM == pHandle->pVM, NULL);
1385 return pHandle->pGVM;
1430 PGVM pGVM;
1436 pGVM = pHandle->pGVM;
1440 || !VALID_PTR(pGVM)
1441 || pGVM->pVM != pVM))
1456 pGVM = pHandle->pGVM;
1457 if (RT_UNLIKELY(!VALID_PTR(pGVM)))
1459 if (RT_UNLIKELY(pGVM->pVM != pVM))
1463 *ppGVM = pGVM;
1523 PGVM pGVM = pHandle->pGVM;
1524 AssertPtrReturn(pGVM, VERR_NOT_OWNER);
1525 AssertReturn(pGVM->pVM == pVM, VERR_NOT_OWNER);
1527 AssertReturn(idCpu < pGVM->cCpus, VERR_INVALID_CPU_ID);
1528 AssertReturn(pGVM->aCpus[idCpu].hEMT == hAllegedEMT, VERR_NOT_OWNER);
1530 *ppGVM = pGVM;
1562 PGVM pGVM = GVMMR0ByHandle(hGVM);
1563 return pGVM ? pGVM->pVM : NULL;
1602 && VALID_PTR(pGVMM->aHandles[i].pGVM))
1608 PGVM pGVM = pGVMM->aHandles[i].pGVM;
1609 VMCPUID const cCpus = pGVM->cCpus;
1614 if (pGVM->aCpus[idCpu].hEMT == hEMT)
1663 PGVM pCurGVM = pGVMM->aHandles[i].pGVM;
1704 PGVM pCurGVM = pGVMM->aHandles[i].pGVM;
1734 PGVM pCurGVM = pGVMM->aHandles[i].pGVM;
1784 PGVM pGVM;
1786 int rc = gvmmR0ByVMAndEMT(pVM, idCpu, &pGVM, &pGVMM);
1789 pGVM->gvmm.s.StatsSched.cHaltCalls++;
1791 PGVMCPU pCurGVCpu = &pGVM->aCpus[idCpu];
1810 pGVM->gvmm.s.StatsSched.cHaltWakeUps += gvmmR0SchedDoWakeUps(pGVMM, u64NowGip);
1822 pGVM->gvmm.s.StatsSched.cHaltBlocking++;
1843 pGVM->gvmm.s.StatsSched.cHaltTimeouts++;
1849 pGVM->gvmm.s.StatsSched.cHaltNotBlocking++;
1865 * @param pGVM The global (ring-0) VM structure.
1868 DECLINLINE(int) gvmmR0SchedWakeUpOne(PGVM pGVM, PGVMCPU pGVCpu)
1870 pGVM->gvmm.s.StatsSched.cWakeUpCalls++;
1890 pGVM->gvmm.s.StatsSched.cWakeUpNotHalted++;
1917 PGVM pGVM;
1919 int rc = gvmmR0ByVM(pVM, &pGVM, &pGVMM, fTakeUsedLock);
1922 if (idCpu < pGVM->cCpus)
1927 rc = gvmmR0SchedWakeUpOne(pGVM, &pGVM->aCpus[idCpu]);
1936 pGVM->gvmm.s.StatsSched.cWakeUpWakeUps += gvmmR0SchedDoWakeUps(pGVMM, u64Now);
1978 * @param pGVM The global (ring-0) VM structure.
1981 DECLINLINE(int) gvmmR0SchedPokeOne(PGVM pGVM, PVMCPU pVCpu)
1983 pGVM->gvmm.s.StatsSched.cPokeCalls++;
1989 pGVM->gvmm.s.StatsSched.cPokeNotBusy++;
2014 PGVM pGVM;
2016 int rc = gvmmR0ByVM(pVM, &pGVM, &pGVMM, fTakeUsedLock);
2019 if (idCpu < pGVM->cCpus)
2020 rc = gvmmR0SchedPokeOne(pGVM, &pVM->aCpus[idCpu]);
2070 PGVM pGVM;
2072 int rc = gvmmR0ByVM(pVM, &pGVM, &pGVMM, true /* fTakeUsedLock */);
2076 VMCPUID idCpu = pGVM->cCpus;
2080 if (pGVM->aCpus[idCpu].hEMT == hSelf)
2085 gvmmR0SchedWakeUpOne(pGVM, &pGVM->aCpus[idCpu]);
2087 gvmmR0SchedPokeOne(pGVM, &pVM->aCpus[idCpu]);
2139 PGVM pGVM;
2141 int rc = gvmmR0ByVMAndEMT(pVM, idCpu, &pGVM, &pGVMM);
2146 pGVM->gvmm.s.StatsSched.cPollCalls++;
2152 pGVM->gvmm.s.StatsSched.cPollWakeUps += gvmmR0SchedDoWakeUps(pGVMM, u64Now);
2360 PGVM pGVM;
2361 int rc = gvmmR0ByVM(pVM, &pGVM, &pGVMM, true /*fTakeUsedLock*/);
2364 pStats->SchedVM = pGVM->gvmm.s.StatsSched;
2386 PGVM pGVM = pGVMM->aHandles[i].pGVM;
2389 && VALID_PTR(pGVM)
2390 && pGVM->u32Magic == GVM_MAGIC
2394 pStats->cEMTs += pGVM->cCpus;
2396 pStats->SchedSum.cHaltCalls += pGVM->gvmm.s.StatsSched.cHaltCalls;
2397 pStats->SchedSum.cHaltBlocking += pGVM->gvmm.s.StatsSched.cHaltBlocking;
2398 pStats->SchedSum.cHaltTimeouts += pGVM->gvmm.s.StatsSched.cHaltTimeouts;
2399 pStats->SchedSum.cHaltNotBlocking += pGVM->gvmm.s.StatsSched.cHaltNotBlocking;
2400 pStats->SchedSum.cHaltWakeUps += pGVM->gvmm.s.StatsSched.cHaltWakeUps;
2402 pStats->SchedSum.cWakeUpCalls += pGVM->gvmm.s.StatsSched.cWakeUpCalls;
2403 pStats->SchedSum.cWakeUpNotHalted += pGVM->gvmm.s.StatsSched.cWakeUpNotHalted;
2404 pStats->SchedSum.cWakeUpWakeUps += pGVM->gvmm.s.StatsSched.cWakeUpWakeUps;
2406 pStats->SchedSum.cPokeCalls += pGVM->gvmm.s.StatsSched.cPokeCalls;
2407 pStats->SchedSum.cPokeNotBusy += pGVM->gvmm.s.StatsSched.cPokeNotBusy;
2409 pStats->SchedSum.cPollCalls += pGVM->gvmm.s.StatsSched.cPollCalls;
2410 pStats->SchedSum.cPollHalts += pGVM->gvmm.s.StatsSched.cPollHalts;
2411 pStats->SchedSum.cPollWakeUps += pGVM->gvmm.s.StatsSched.cPollWakeUps;
2494 PGVM pGVM;
2495 int rc = gvmmR0ByVM(pVM, &pGVM, &pGVMM, true /*fTakeUsedLock*/);
2499 do { if (pStats->SchedVM. field ) { pGVM->gvmm.s.StatsSched. field = 0; } } while (0)
2532 PGVM pGVM = pGVMM->aHandles[i].pGVM;
2535 && VALID_PTR(pGVM)
2536 && pGVM->u32Magic == GVM_MAGIC
2540 do { if (pStats->SchedSum. field ) { pGVM->gvmm.s.StatsSched. field = 0; } } while (0)