Lines Matching refs:pVCpu

307     PVMCPU pVCpu = &pVM->aCpus[0];
309 PVMMR0LOGGER pR0Logger = pVCpu->vmm.s.pR0LoggerR0;
452 * @param pVCpu Pointer to the VMCPU.
454 * @thread EMT(pVCpu)
456 VMMR0_INT_DECL(int) VMMR0ThreadCtxHooksCreate(PVMCPU pVCpu)
458 VMCPU_ASSERT_EMT(pVCpu);
459 Assert(pVCpu->vmm.s.hR0ThreadCtx == NIL_RTTHREADCTX);
461 int rc = RTThreadCtxHooksCreate(&pVCpu->vmm.s.hR0ThreadCtx);
465 Log(("RTThreadCtxHooksCreate failed! rc=%Rrc pVCpu=%p idCpu=%RU32\n", rc, pVCpu, pVCpu->idCpu));
477 * @param pVCpu Pointer to the VMCPU.
480 VMMR0_INT_DECL(void) VMMR0ThreadCtxHooksRelease(PVMCPU pVCpu)
482 RTThreadCtxHooksRelease(pVCpu->vmm.s.hR0ThreadCtx);
490 * @param pVCpu Pointer to the VMCPU.
493 * @thread EMT(pVCpu)
495 VMMR0_INT_DECL(int) VMMR0ThreadCtxHooksRegister(PVMCPU pVCpu, PFNRTTHREADCTXHOOK pfnThreadHook)
497 VMCPU_ASSERT_EMT(pVCpu);
498 return RTThreadCtxHooksRegister(pVCpu->vmm.s.hR0ThreadCtx, pfnThreadHook, pVCpu);
505 * @param pVCpu Pointer to the VMCPU.
507 * @thread EMT(pVCpu)
509 VMMR0_INT_DECL(void) VMMR0ThreadCtxHooksDeregister(PVMCPU pVCpu)
512 ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
514 if (pVCpu->vmm.s.hR0ThreadCtx != NIL_RTTHREADCTX)
517 int rc = RTThreadCtxHooksDeregister(pVCpu->vmm.s.hR0ThreadCtx);
528 * @param pVCpu Pointer to the VMCPU.
530 VMMR0_INT_DECL(bool) VMMR0ThreadCtxHooksAreCreated(PVMCPU pVCpu)
532 return pVCpu->vmm.s.hR0ThreadCtx != NIL_RTTHREADCTX;
540 * @param pVCpu Pointer to the VMCPU.
542 VMMR0_INT_DECL(bool) VMMR0ThreadCtxHooksAreRegistered(PVMCPU pVCpu)
544 return RTThreadCtxHooksAreRegistered(pVCpu->vmm.s.hR0ThreadCtx);
561 PVMCPU pVCpu = (PVMCPU)pvUser;
578 pVCpu->iHostCpuSet = iHostCpuSet;
579 ASMAtomicWriteU32(&pVCpu->idHostCpu, idHostCpu);
585 VMCPU_FF_SET(pVCpu, VMCPU_FF_TO_R3);
604 pVCpu->iHostCpuSet = UINT32_MAX;
605 ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
621 * @param pVCpu Pointer to the VMCPU.
624 static void vmmR0RecordRC(PVM pVM, PVMCPU pVCpu, int rc)
738 else if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_TIMER))
740 else if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_PDM_CRITSECT))
742 else if (VMCPU_FF_IS_PENDING(pVCpu, VMCPU_FF_TO_R3))
755 switch (pVCpu->vmm.s.enmCallRing3Operation)
855 PVMCPU pVCpu = &pVM->aCpus[idCpu];
856 if (RT_UNLIKELY(pVCpu->hNativeThreadR0 != RTThreadNativeSelf()))
872 if (RT_UNLIKELY(!PGMGetHyperCR3(pVCpu)))
874 pVCpu->vmm.s.iLastGZRc = VERR_PGM_NO_CR3_SHADOW_ROOT;
898 CPUMR0SetLApic(pVCpu, iHostCpuSet);
900 pVCpu->iHostCpuSet = iHostCpuSet;
901 ASMAtomicWriteU32(&pVCpu->idHostCpu, idHostCpu);
904 GVMMR0SchedUpdatePeriodicPreemptionTimer(pVM, pVCpu->idHostCpu, TMCalcHostTimerFrequency(pVM, pVCpu));
921 VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED_EXEC);
922 TMNotifyStartOfExecution(pVCpu);
925 pVCpu->vmm.s.iLastGZRc = rc;
927 TMNotifyEndOfExecution(pVCpu);
928 VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED);
932 SUPR0TracerUmodProbeFire(pVM->pSession, &pVCpu->vmm.s.TracerCtx);
948 VBOXVMM_R0_VMM_RETURN_TO_RING3_RC(pVCpu, CPUMQueryGuestCtxPtr(pVCpu), rc);
951 vmmR0RecordRC(pVM, pVCpu, rc);
955 pVCpu->vmm.s.iLastGZRc = rc;
960 pVCpu->iHostCpuSet = UINT32_MAX;
961 ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
977 pVCpu->vmm.s.iLastGZRc = VINF_EM_RAW_TO_R3;
979 pVCpu->vmm.s.iLastGZRc = rc;
982 pVCpu->vmm.s.iLastGZRc = VERR_INVALID_CPU_INDEX;
995 Assert(!VMMR0ThreadCtxHooksAreRegistered(pVCpu));
1008 pVCpu->iHostCpuSet = iHostCpuSet;
1009 ASMAtomicWriteU32(&pVCpu->idHostCpu, idHostCpu);
1015 GVMMR0SchedUpdatePeriodicPreemptionTimer(pVM, pVCpu->idHostCpu, TMCalcHostTimerFrequency(pVM, pVCpu));
1021 if (pVCpu->idCpu > 0)
1023 PVMMR0LOGGER pR0Logger = pVCpu->vmm.s.pR0LoggerR0;
1040 if ( VMMR0ThreadCtxHooksAreCreated(pVCpu)
1041 && !VMMR0ThreadCtxHooksAreRegistered(pVCpu))
1043 rc = VMMR0ThreadCtxHooksRegister(pVCpu, vmmR0ThreadCtxCallback);
1050 rc = HMR0Enter(pVM, pVCpu);
1053 VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED_HM);
1059 if (VMMR0ThreadCtxHooksAreRegistered(pVCpu))
1068 rc = vmmR0CallRing3SetJmp(&pVCpu->vmm.s.CallRing3JmpBufR0, HMR0RunGuestCode, pVM, pVCpu);
1074 if (RT_UNLIKELY( VMCPU_GET_STATE(pVCpu) != VMCPUSTATE_STARTED_HM
1079 "Got VMCPU state %d expected %d.\n", VMCPU_GET_STATE(pVCpu), VMCPUSTATE_STARTED_HM);
1082 else if (RT_UNLIKELY(VMMR0ThreadCtxHooksAreRegistered(pVCpu)))
1086 "Thread-context hooks still registered! VCPU=%p Id=%u rc=%d.\n", pVCpu, pVCpu->idCpu, rc);
1090 VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED);
1103 pVCpu->iHostCpuSet = UINT32_MAX;
1104 ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
1109 pVCpu->vmm.s.iLastGZRc = rc;
1112 VBOXVMM_R0_VMM_RETURN_TO_RING3_HM(pVCpu, CPUMQueryGuestCtxPtr(pVCpu), rc);
1114 vmmR0RecordRC(pVM, pVCpu, rc);
1122 pVCpu->iHostCpuSet = UINT32_MAX;
1123 ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
1131 pVCpu->vmm.s.iLastGZRc = VINF_EM_RAW_TO_R3;
1133 pVCpu->vmm.s.iLastGZRc = rc;
1136 pVCpu->vmm.s.iLastGZRc = VERR_INVALID_CPU_INDEX;
1145 pVCpu->vmm.s.iLastGZRc = VINF_SUCCESS;
1153 pVCpu->vmm.s.iLastGZRc = VERR_NOT_SUPPORTED;
1324 PVMCPU pVCpu = &pVM->aCpus[idCpu];
1326 if (RT_UNLIKELY(!PGMGetHyperCR3(pVCpu)))
1360 CPUMR0SetLApic(pVCpu, iHostCpuSet);
1362 pVCpu->iHostCpuSet = iHostCpuSet;
1363 ASMAtomicWriteU32(&pVCpu->idHostCpu, idHostCpu);
1390 pVCpu->iHostCpuSet = UINT32_MAX;
1391 ASMAtomicWriteU32(&pVCpu->idHostCpu, NIL_RTCPUID);
1505 PVMCPU pVCpu = &pVM->aCpus[idCpu];
1506 Assert(pVCpu->hNativeThreadR0 == RTThreadNativeSelf());
1514 rc = vmmR0CallRing3SetJmp(&pVCpu->vmm.s.CallRing3JmpBufR0, GMMR0CheckSharedModules, pVM, pVCpu); /* this may resume code. */
1516 || (rc == VINF_VMM_CALL_HOST && pVCpu->vmm.s.enmCallRing3Operation == VMMCALLRING3_VMM_LOGGER_FLUSH));
1520 int rc = GMMR0CheckSharedModules(pVM, pVCpu);
1747 PVMCPU pVCpu = &pVM->aCpus[idCpu];
1749 if (!pVCpu->vmm.s.CallRing3JmpBufR0.pvSavedStack)
1760 return vmmR0CallRing3SetJmpEx(&pVCpu->vmm.s.CallRing3JmpBufR0, vmmR0EntryExWrapper, &Args);
1775 * @param pVCpu Pointer to the VMCPU.
1779 VMMR0_INT_DECL(bool) VMMR0IsLongJumpArmed(PVMCPU pVCpu)
1782 return pVCpu->vmm.s.CallRing3JmpBufR0.eip
1783 && !pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call;
1785 return pVCpu->vmm.s.CallRing3JmpBufR0.rip
1786 && !pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call;
1795 * @param pVCpu Pointer to the VMCPU.
1798 VMMR0_INT_DECL(bool) VMMR0IsInRing3LongJump(PVMCPU pVCpu)
1800 return pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call;
1840 PVMCPU pVCpu = VMMGetCpu(pVM);
1841 if (pVCpu)
1847 if ( !pVCpu->vmm.s.CallRing3JmpBufR0.eip
1848 || pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call)
1850 if ( !pVCpu->vmm.s.CallRing3JmpBufR0.rip
1851 || pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call)
1859 VMMRZCallRing3(pVM, pVCpu, VMMCALLRING3_VMM_LOGGER_FLUSH, 0);
1905 * @param pVCpu Pointer to the VMCPU.
1907 VMMR0_INT_DECL(void) VMMR0LogFlushDisable(PVMCPU pVCpu)
1909 if (pVCpu->vmm.s.pR0LoggerR0)
1910 pVCpu->vmm.s.pR0LoggerR0->fFlushingDisabled = true;
1917 * @param pVCpu Pointer to the VMCPU.
1919 VMMR0_INT_DECL(void) VMMR0LogFlushEnable(PVMCPU pVCpu)
1921 if (pVCpu->vmm.s.pR0LoggerR0)
1922 pVCpu->vmm.s.pR0LoggerR0->fFlushingDisabled = false;
1929 * @param pVCpu Pointer to the VMCPU.
1931 VMMR0_INT_DECL(bool) VMMR0IsLogFlushDisabled(PVMCPU pVCpu)
1933 if (pVCpu->vmm.s.pR0LoggerR0)
1934 return pVCpu->vmm.s.pR0LoggerR0->fFlushingDisabled;
1952 PVMCPU pVCpu = VMMGetCpu(pVM);
1954 if (pVCpu)
1957 if ( pVCpu->vmm.s.CallRing3JmpBufR0.eip
1958 && !pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call)
1960 if ( pVCpu->vmm.s.CallRing3JmpBufR0.rip
1961 && !pVCpu->vmm.s.CallRing3JmpBufR0.fInRing3Call)
1964 int rc = VMMRZCallRing3(pVM, pVCpu, VMMCALLRING3_VM_R0_ASSERTION, 0);