Lines Matching refs:pVCpu

142 static int                  vmmR3ServiceCallRing3Request(PVM pVM, PVMCPU pVCpu);
301 PVMCPU pVCpu = &pVM->aCpus[idCpu];
308 PAGE_SIZE, MM_TAG_VMM, fFlags, (void **)&pVCpu->vmm.s.pbEMTStackR3);
312 pVCpu->vmm.s.pbEMTStackR3 += PAGE_SIZE;
317 pVCpu->vmm.s.CallRing3JmpBufR0.pvSavedStack = NIL_RTR0PTR;
320 pVCpu->vmm.s.CallRing3JmpBufR0.pvSavedStack = MMHyperR3ToR0(pVM, pVCpu->vmm.s.pbEMTStackR3);
321 pVCpu->vmm.s.pbEMTStackRC = MMHyperR3ToRC(pVM, pVCpu->vmm.s.pbEMTStackR3);
322 pVCpu->vmm.s.pbEMTStackBottomRC = pVCpu->vmm.s.pbEMTStackRC + VMM_STACK_SIZE;
323 AssertRelease(pVCpu->vmm.s.pbEMTStackRC);
325 CPUMSetHyperESP(pVCpu, pVCpu->vmm.s.pbEMTStackBottomRC);
364 PVMCPU pVCpu = &pVM->aCpus[i];
366 (void **)&pVCpu->vmm.s.pR0LoggerR3);
369 pVCpu->vmm.s.pR0LoggerR3->pVM = pVM->pVMR0;
370 //pVCpu->vmm.s.pR0LoggerR3->fCreated = false;
371 pVCpu->vmm.s.pR0LoggerR3->cbLogger = (uint32_t)cbLogger;
372 pVCpu->vmm.s.pR0LoggerR0 = MMHyperR3ToR0(pVM, pVCpu->vmm.s.pR0LoggerR3);
491 PVMCPU pVCpu = VMMGetCpu(pVM);
492 Assert(pVCpu && pVCpu->idCpu == 0);
498 if ( pVCpu->vmm.s.pR0LoggerR3
499 && !pVCpu->vmm.s.pR0LoggerR3->fCreated)
523 if ( pVCpu->vmm.s.pR0LoggerR3
524 && pVCpu->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
525 RTLogFlushR0(NULL, &pVCpu->vmm.s.pR0LoggerR3->Logger);
529 rc = vmmR3ServiceCallRing3Request(pVM, pVCpu);
561 PVMCPU pVCpu = VMMGetCpu(pVM);
562 Assert(pVCpu && pVCpu->idCpu == 0);
580 CPUMSetHyperESP(pVCpu, pVCpu->vmm.s.pbEMTStackBottomRC); /* Clear the stack. */
582 CPUMPushHyper(pVCpu, (uint32_t)(u64TS >> 32)); /* Param 4: The program startup TS - Hi. */
583 CPUMPushHyper(pVCpu, (uint32_t)u64TS); /* Param 4: The program startup TS - Lo. */
584 CPUMPushHyper(pVCpu, vmmGetBuildType()); /* Param 3: Version argument. */
585 CPUMPushHyper(pVCpu, VMMGetSvnRev()); /* Param 2: Version argument. */
586 CPUMPushHyper(pVCpu, VMMGC_DO_VMMGC_INIT); /* Param 1: Operation. */
587 CPUMPushHyper(pVCpu, pVM->pVMRC); /* Param 0: pVM */
588 CPUMPushHyper(pVCpu, 6 * sizeof(RTRCPTR)); /* trampoline param: stacksize. */
589 CPUMPushHyper(pVCpu, RCPtrEP); /* Call EIP. */
590 CPUMSetHyperEIP(pVCpu, pVM->vmm.s.pfnCallTrampolineRC);
591 Assert(CPUMGetHyperCR3(pVCpu) && CPUMGetHyperCR3(pVCpu) == PGMGetHyperCR3(pVCpu));
614 rc = vmmR3ServiceCallRing3Request(pVM, pVCpu);
621 VMMR3FatalDump(pVM, pVCpu, rc);
742 PVMCPU pVCpu = VMMGetCpu(pVM);
743 Assert(pVCpu && pVCpu->idCpu == 0);
761 if ( pVCpu->vmm.s.pR0LoggerR3
762 && pVCpu->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
763 RTLogFlushR0(NULL, &pVCpu->vmm.s.pR0LoggerR3->Logger);
767 rc = vmmR3ServiceCallRing3Request(pVM, pVCpu);
840 PVMCPU pVCpu = &pVM->aCpus[i];
842 CPUMSetHyperESP(pVCpu, CPUMGetHyperESP(pVCpu) + offDelta);
844 pVCpu->vmm.s.pbEMTStackRC = MMHyperR3ToRC(pVM, pVCpu->vmm.s.pbEMTStackR3);
845 pVCpu->vmm.s.pbEMTStackBottomRC = pVCpu->vmm.s.pbEMTStackRC + VMM_STACK_SIZE;
933 PVMCPU pVCpu = &pVM->aCpus[i];
934 PVMMR0LOGGER pR0LoggerR3 = pVCpu->vmm.s.pR0LoggerR3;
948 pVCpu->vmm.s.pR0LoggerR0 + RT_OFFSETOF(VMMR0LOGGER, Logger),
957 pVCpu->vmm.s.pR0LoggerR0 + RT_OFFSETOF(VMMR0LOGGER, Logger),
967 rc = RTLogCopyGroupsAndFlagsForR0(&pR0LoggerR3->Logger, pVCpu->vmm.s.pR0LoggerR0 + RT_OFFSETOF(VMMR0LOGGER, Logger),
1264 * @param pVCpu Pointer to the VMCPU.
1266 VMMR3_INT_DECL(int) VMMR3RawRunGC(PVM pVM, PVMCPU pVCpu)
1268 Log2(("VMMR3RawRunGC: (cs:eip=%04x:%08x)\n", CPUMGetGuestCS(pVCpu), CPUMGetGuestEIP(pVCpu)));
1276 CPUMSetHyperState(pVCpu,
1277 CPUMGetGuestEFlags(pVCpu) & X86_EFL_VM
1280 pVCpu->vmm.s.pbEMTStackBottomRC, /* esp */
1282 VM_RC_ADDR(pVM, &pVCpu->cpum) /* edx */);
1290 if (RT_UNLIKELY(!CPUMGetHyperCR3(pVCpu) || CPUMGetHyperCR3(pVCpu) != PGMGetHyperCR3(pVCpu)))
1291 EMR3FatalError(pVCpu, VERR_VMM_HYPER_CR3_MISMATCH);
1305 rc = pVCpu->vmm.s.iLastGZRc;
1325 Log2(("VMMR3RawRunGC: returns %Rrc (cs:eip=%04x:%08x)\n", rc, CPUMGetGuestCS(pVCpu), CPUMGetGuestEIP(pVCpu)));
1328 rc = vmmR3ServiceCallRing3Request(pVM, pVCpu);
1341 * @param pVCpu Pointer to the VMCPU.
1343 VMMR3_INT_DECL(int) VMMR3HmRunGC(PVM pVM, PVMCPU pVCpu)
1345 Log2(("VMMR3HmRunGC: (cs:rip=%04x:%RX64)\n", CPUMGetGuestCS(pVCpu), CPUMGetGuestRIP(pVCpu)));
1355 rc = SUPR3CallVMMR0Fast(pVM->pVMR0, VMMR0_DO_HM_RUN, pVCpu->idCpu);
1357 rc = pVCpu->vmm.s.iLastGZRc;
1362 Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_TO_R3));
1369 PVMMR0LOGGER pR0LoggerR3 = pVCpu->vmm.s.pR0LoggerR3;
1376 Log2(("VMMR3HmRunGC: returns %Rrc (cs:rip=%04x:%RX64)\n", rc, CPUMGetGuestCS(pVCpu), CPUMGetGuestRIP(pVCpu)));
1379 rc = vmmR3ServiceCallRing3Request(pVM, pVCpu);
1395 PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);
1396 VMCPU_ASSERT_EMT(pVCpu);
1399 if (EMGetState(pVCpu) != EMSTATE_WAIT_SIPI)
1403 PCPUMCTX pCtx = CPUMQueryGuestCtxPtr(pVCpu);
1415 EMSetState(pVCpu, EMSTATE_HALTED);
1418 VMCPU_ASSERT_STATE(pVCpu, VMCPUSTATE_STOPPED);
1419 VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED);
1426 PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);
1427 VMCPU_ASSERT_EMT(pVCpu);
1431 PGMR3ResetCpu(pVM, pVCpu);
1432 CPUMR3ResetCpu(pVM, pVCpu);
1535 * @param pVCpu The VMCPU structure for the calling EMT.
1542 static int vmmR3EmtRendezvousCommon(PVM pVM, PVMCPU pVCpu, bool fIsCaller,
1569 rc = RTSemEventWait(pVM->vmm.s.pahEvtRendezvousEnterOrdered[pVCpu->idCpu], RT_INDEFINITE_WAIT);
1616 if (pVCpu->idCpu != iFirst)
1620 rc = RTSemEventWait(pVM->vmm.s.pahEvtRendezvousEnterOrdered[pVCpu->idCpu], RT_INDEFINITE_WAIT);
1634 VBOXSTRICTRC rcStrict = pfnRendezvous(pVM, pVCpu, pvUser);
1669 Assert(cDone == pVCpu->idCpu + 1U);
1670 rc = RTSemEventSignal(pVM->vmm.s.pahEvtRendezvousEnterOrdered[pVCpu->idCpu + 1U]);
1675 Assert(pVM->cCpus - cDone == pVCpu->idCpu);
1707 * @param pVCpu The handle of the calling EMT.
1711 VMMR3_INT_DECL(int) VMMR3EmtRendezvousFF(PVM pVM, PVMCPU pVCpu)
1713 Assert(!pVCpu->vmm.s.fInRendezvous);
1714 pVCpu->vmm.s.fInRendezvous = true;
1715 int rc = vmmR3EmtRendezvousCommon(pVM, pVCpu, false /* fIsCaller */, pVM->vmm.s.fRendezvousFlags,
1717 pVCpu->vmm.s.fInRendezvous = false;
1754 PVMCPU pVCpu = VMMGetCpu(pVM);
1755 if (!pVCpu)
1766 AssertLogRelReturn(!pVCpu->vmm.s.fInRendezvous, VERR_DEADLOCK);
1767 pVCpu->vmm.s.fInRendezvous = true;
1768 rcStrict = pfnRendezvous(pVM, pVCpu, pvUser);
1769 pVCpu->vmm.s.fInRendezvous = false;
1781 AssertLogRelReturn(!pVCpu->vmm.s.fInRendezvous, VERR_DEADLOCK);
1787 rc = VMMR3EmtRendezvousFF(pVM, pVCpu);
1798 Assert(!pVCpu->vmm.s.fInRendezvous);
1799 pVCpu->vmm.s.fInRendezvous = true;
1830 vmmR3EmtRendezvousCommon(pVM, pVCpu, true /* fIsCaller */, fFlags, pfnRendezvous, pvUser);
1847 pVCpu->vmm.s.fInRendezvous = false;
1874 * @param pVCpu The handle of the calling EMT.
1877 VMMR3_INT_DECL(bool) VMMR3EmtRendezvousSetDisabled(PVMCPU pVCpu, bool fDisabled)
1879 VMCPU_ASSERT_EMT(pVCpu);
1880 bool fOld = pVCpu->vmm.s.fInRendezvous;
1881 pVCpu->vmm.s.fInRendezvous = fDisabled;
1899 PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);
1900 AssertReturn(pVCpu, VERR_INVALID_PARAMETER);
1903 RTHCUINTPTR off = R0Addr - MMHyperCCToR0(pVM, pVCpu->vmm.s.pbEMTStackR3);
1905 RTHCUINTPTR off = pVCpu->vmm.s.CallRing3JmpBufR0.cbSavedStack - (pVCpu->vmm.s.CallRing3JmpBufR0.SpCheck - R0Addr);
1911 memcpy(pvBuf, &pVCpu->vmm.s.pbEMTStackR3[off], cbRead);
1947 PVMCPU pVCpu = &pVM->aCpus[0];
1954 CPUMSetHyperState(pVCpu,
1956 pVCpu->vmm.s.pbEMTStackBottomRC - cArgs * sizeof(RTGCUINTPTR32), /* esp */
1962 memset(pVCpu->vmm.s.pbEMTStackR3, 0xaa, VMM_STACK_SIZE); /* Clear the stack. */
1964 PRTGCUINTPTR32 pFrame = (PRTGCUINTPTR32)(pVCpu->vmm.s.pbEMTStackR3 + VMM_STACK_SIZE) - cArgs;
1969 CPUMPushHyper(pVCpu, cArgs * sizeof(RTGCUINTPTR32)); /* stack frame size */
1970 CPUMPushHyper(pVCpu, RCPtrEntry); /* what to call */
1978 Assert(CPUMGetHyperCR3(pVCpu) && CPUMGetHyperCR3(pVCpu) == PGMGetHyperCR3(pVCpu));
1986 rc = pVCpu->vmm.s.iLastGZRc;
2005 VMMR3FatalDump(pVM, pVCpu, rc);
2008 Log2(("VMMR3CallGCV: returns %Rrc (cs:eip=%04x:%08x)\n", rc, CPUMGetGuestCS(pVCpu), CPUMGetGuestEIP(pVCpu)));
2011 rc = vmmR3ServiceCallRing3Request(pVM, pVCpu);
2031 PVMCPU pVCpu = VMMGetCpu(pVM);
2032 AssertReturn(pVCpu, VERR_VM_THREAD_NOT_EMT);
2043 rc = SUPR3CallVMMR0Ex(pVM->pVMR0, pVCpu->idCpu, uOperation, u64Arg, pReqHdr);
2049 if ( pVCpu->vmm.s.pR0LoggerR3
2050 && pVCpu->vmm.s.pR0LoggerR3->Logger.offScratch > 0)
2051 RTLogFlushR0(NULL, &pVCpu->vmm.s.pR0LoggerR3->Logger);
2055 rc = vmmR3ServiceCallRing3Request(pVM, pVCpu);
2075 * @param pVCpu Pointer to the VMCPU.
2077 VMMR3DECL(int) VMMR3ResumeHyper(PVM pVM, PVMCPU pVCpu)
2079 Log(("VMMR3ResumeHyper: eip=%RRv esp=%RRv\n", CPUMGetHyperEIP(pVCpu), CPUMGetHyperESP(pVCpu)));
2088 Assert(CPUMGetHyperCR3(pVCpu) && CPUMGetHyperCR3(pVCpu) == PGMGetHyperCR3(pVCpu));
2096 rc = pVCpu->vmm.s.iLastGZRc;
2115 VMMR3FatalDump(pVM, pVCpu, rc);
2121 rc = vmmR3ServiceCallRing3Request(pVM, pVCpu);
2134 * @param pVCpu Pointer to the VMCPU.
2137 static int vmmR3ServiceCallRing3Request(PVM pVM, PVMCPU pVCpu)
2143 if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_PDM_CRITSECT))
2144 PDMCritSectBothFF(pVCpu);
2146 switch (pVCpu->vmm.s.enmCallRing3Operation)
2153 pVCpu->vmm.s.rcCallRing3 = PDMR3CritSectEnterEx((PPDMCRITSECT)(uintptr_t)pVCpu->vmm.s.u64CallRing3Arg,
2163 pVCpu->vmm.s.rcCallRing3 = PDMR3CritSectRwEnterExclEx((PPDMCRITSECTRW)(uintptr_t)pVCpu->vmm.s.u64CallRing3Arg,
2173 pVCpu->vmm.s.rcCallRing3 = PDMR3CritSectRwEnterSharedEx((PPDMCRITSECTRW)(uintptr_t)pVCpu->vmm.s.u64CallRing3Arg,
2183 pVCpu->vmm.s.rcCallRing3 = PDMR3LockCall(pVM);
2192 pVCpu->vmm.s.rcCallRing3 = PGMR3PoolGrow(pVM);
2201 pVCpu->vmm.s.rcCallRing3 = PGMR3PhysChunkMap(pVM, pVCpu->vmm.s.u64CallRing3Arg);
2210 pVCpu->vmm.s.rcCallRing3 = PGMR3PhysAllocateHandyPages(pVM);
2219 pVCpu->vmm.s.rcCallRing3 = PGMR3PhysAllocateLargeHandyPage(pVM, pVCpu->vmm.s.u64CallRing3Arg);
2228 pVCpu->vmm.s.rcCallRing3 = PGMR3LockCall(pVM);
2237 pVCpu->vmm.s.rcCallRing3 = MMR3LockCall(pVM);
2248 pVCpu->vmm.s.rcCallRing3 = VINF_SUCCESS;
2258 pVCpu->vmm.s.rcCallRing3 = VINF_SUCCESS;
2267 pVCpu->vmm.s.rcCallRing3 = VINF_SUCCESS;
2274 pVCpu->vmm.s.rcCallRing3 = VMR3SetRuntimeErrorWorker(pVM);
2282 pVCpu->vmm.s.enmCallRing3Operation = VMMCALLRING3_INVALID;
2283 pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call = false;
2285 pVCpu->vmm.s.CallRing3JmpBufR0.eip = 0;
2287 pVCpu->vmm.s.CallRing3JmpBufR0.rip = 0;
2290 *(uint64_t *)pVCpu->vmm.s.pbEMTStackR3 = 0; /* clear marker */
2300 pVCpu->vmm.s.rcCallRing3 = VINF_SUCCESS;
2304 pVCpu->vmm.s.rcCallRing3 = FTMR3SetCheckpoint(pVM, (FTMCHECKPOINTTYPE)pVCpu->vmm.s.u64CallRing3Arg);
2308 AssertMsgFailed(("enmCallRing3Operation=%d\n", pVCpu->vmm.s.enmCallRing3Operation));
2312 pVCpu->vmm.s.enmCallRing3Operation = VMMCALLRING3_INVALID;