Lines Matching refs:pUVM

43 static int  vmR3ReqProcessOneU(PUVM pUVM, PVMREQ pReq);
73 int rc = VMR3ReqCallVU(pVM->pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VBOX_STATUS,
105 VMMR3DECL(int) VMR3ReqCallWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
110 int rc = VMR3ReqCallVU(pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VBOX_STATUS,
143 int rc = VMR3ReqCallVU(pVM->pUVM, idDstCpu, NULL, 0, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_NO_WAIT,
158 * @param pUVM Pointer to the VM.
168 VMMR3DECL(int) VMR3ReqCallNoWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
172 int rc = VMR3ReqCallVU(pUVM, idDstCpu, NULL, 0, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_NO_WAIT,
203 int rc = VMR3ReqCallVU(pVM->pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VOID,
219 * @param pUVM Pointer to the VM.
229 VMMR3DECL(int) VMR3ReqCallVoidWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
234 int rc = VMR3ReqCallVU(pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VOID,
266 int rc = VMR3ReqCallVU(pVM->pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VOID | VMREQFLAGS_NO_WAIT,
302 int rc = VMR3ReqCallVU(pVM->pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_PRIORITY,
324 * @param pUVM The user mode VM handle.
334 VMMR3DECL(int) VMR3ReqPriorityCallWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
339 int rc = VMR3ReqCallVU(pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VBOX_STATUS | VMREQFLAGS_PRIORITY,
358 * @param pUVM The user mode VM handle.
368 VMMR3DECL(int) VMR3ReqPriorityCallVoidWaitU(PUVM pUVM, VMCPUID idDstCpu, PFNRT pfnFunction, unsigned cArgs, ...)
373 int rc = VMR3ReqCallVU(pUVM, idDstCpu, &pReq, RT_INDEFINITE_WAIT, VMREQFLAGS_VOID | VMREQFLAGS_PRIORITY,
393 * @param pUVM Pointer to the user mode VM structure.
410 VMMR3DECL(int) VMR3ReqCallU(PUVM pUVM, VMCPUID idDstCpu, PVMREQ *ppReq, RTMSINTERVAL cMillies, uint32_t fFlags,
415 int rc = VMR3ReqCallVU(pUVM, idDstCpu, ppReq, cMillies, fFlags, pfnFunction, cArgs, va);
433 * @param pUVM Pointer to the user mode VM structure.
458 VMMR3DECL(int) VMR3ReqCallVU(PUVM pUVM, VMCPUID idDstCpu, PVMREQ *ppReq, RTMSINTERVAL cMillies, uint32_t fFlags,
467 UVM_ASSERT_VALID_EXT_RETURN(pUVM, VERR_INVALID_VM_HANDLE);
482 int rc = VMR3ReqAlloc(pUVM, &pReq, VMREQTYPE_INTERNAL, idDstCpu);
580 * @param pUVM Pointer to the user mode VM structure.
587 VMMR3DECL(int) VMR3ReqAlloc(PUVM pUVM, PVMREQ *ppReq, VMREQTYPE enmType, VMCPUID idDstCpu)
599 || idDstCpu < pUVM->cCpus
602 ("Invalid destination %u (max=%u)\n", idDstCpu, pUVM->cCpus), VERR_INVALID_PARAMETER);
609 int cTries = RT_ELEMENTS(pUVM->vm.s.apReqFree) * 2;
612 PVMREQ volatile *ppHead = &pUVM->vm.s.apReqFree[ASMAtomicIncU32(&pUVM->vm.s.iReqFree) % RT_ELEMENTS(pUVM->vm.s.apReqFree)];
632 STAM_COUNTER_INC(&pUVM->vm.s.StatReqAllocRaces);
633 vmr3ReqJoinFree(&pUVM->vm.s, pReq->pNext);
636 ASMAtomicDecU32(&pUVM->vm.s.cReqFree);
657 for (VMCPUID idCpu = 0; idCpu < pUVM->cCpus; idCpu++)
658 RTSemEventAddSignaller(pReq->EventSem, pUVM->aCpus[idCpu].vm.s.ThreadEMT);
671 Assert(pReq->pUVM == pUVM);
680 STAM_COUNTER_INC(&pUVM->vm.s.StatReqAllocRecycled);
689 PVMREQ pReq = (PVMREQ)MMR3HeapAllocU(pUVM, MM_TAG_VM_REQ, sizeof(*pReq));
704 for (VMCPUID idCpu = 0; idCpu < pUVM->cCpus; idCpu++)
705 RTSemEventAddSignaller(pReq->EventSem, pUVM->aCpus[idCpu].vm.s.ThreadEMT);
712 pReq->pUVM = pUVM;
721 STAM_COUNTER_INC(&pUVM->vm.s.StatReqAllocNew);
763 PUVM pUVM = pReq->pUVM;
764 STAM_COUNTER_INC(&pUVM->vm.s.StatReqFree);
766 if (pUVM->vm.s.cReqFree < 128)
768 ASMAtomicIncU32(&pUVM->vm.s.cReqFree);
769 PVMREQ volatile *ppHead = &pUVM->vm.s.apReqFree[ASMAtomicIncU32(&pUVM->vm.s.iReqFree) % RT_ELEMENTS(pUVM->vm.s.apReqFree)];
780 STAM_COUNTER_INC(&pReq->pUVM->vm.s.StatReqFreeOverflow);
813 AssertMsgReturn( VALID_PTR(pReq->pUVM)
830 PUVM pUVM = ((VMREQ volatile *)pReq)->pUVM; /* volatile paranoia */
831 PUVMCPU pUVCpu = (PUVMCPU)RTTlsGet(pUVM->vm.s.idxTLS);
837 for (unsigned i = 0; i < pUVM->cCpus; i++)
851 for (int i = pUVM->cCpus-1; i >= 0; i--)
866 VMCPUID idTarget = pReq->idDstCpu; Assert(idTarget < pUVM->cCpus);
867 PVMCPU pVCpu = &pUVM->pVM->aCpus[idTarget];
871 pUVCpu = &pUVM->aCpus[idTarget];
889 if (pUVM->pVM)
911 volatile PVMREQ *ppQueueHead = pReq->fFlags & VMREQFLAGS_PRIORITY ? &pUVM->vm.s.pPriorityReqs : &pUVM->vm.s.pNormalReqs;
924 if (pUVM->pVM)
925 VM_FF_SET(pUVM->pVM, VM_FF_REQUEST);
926 VMR3NotifyGlobalFFU(pUVM, fFlags & VMREQFLAGS_POKE ? VMNOTIFYFF_FLAGS_POKE : 0);
943 rc = vmR3ReqProcessOneU(pUVM, pReq);
972 AssertMsgReturn( VALID_PTR(pReq->pUVM)
985 PUVM pUVM = pReq->pUVM;
986 NOREF(pUVM);
1016 * @param pUVM Pointer to the user mode VM structure.
1019 DECLINLINE(void) vmR3ReqSetFF(PUVM pUVM, VMCPUID idDstCpu)
1021 if (RT_LIKELY(pUVM->pVM))
1024 VM_FF_SET(pUVM->pVM, VM_FF_REQUEST);
1026 VMCPU_FF_SET(&pUVM->pVM->aCpus[idDstCpu], VMCPU_FF_REQUEST);
1036 * @param pUVM Pointer to the user mode VM structure
1041 static PVMREQ vmR3ReqProcessUTooManyHelper(PUVM pUVM, VMCPUID idDstCpu, PVMREQ pReqList, PVMREQ volatile *ppReqs)
1043 STAM_COUNTER_INC(&pUVM->vm.s.StatReqMoreThan1);
1063 STAM_COUNTER_INC(&pUVM->vm.s.StatReqPushBackRaces);
1079 vmR3ReqSetFF(pUVM, idDstCpu);
1092 * @param pUVM Pointer to the user mode VM structure.
1104 VMMR3_INT_DECL(int) VMR3ReqProcessU(PUVM pUVM, VMCPUID idDstCpu, bool fPriorityOnly)
1106 LogFlow(("VMR3ReqProcessU: (enmVMState=%d) idDstCpu=%d\n", pUVM->pVM ? pUVM->pVM->enmVMState : VMSTATE_CREATING, idDstCpu));
1115 ppPriorityReqs = &pUVM->vm.s.pPriorityReqs;
1116 ppNormalReqs = !fPriorityOnly ? &pUVM->vm.s.pNormalReqs : ppPriorityReqs;
1120 Assert(idDstCpu < pUVM->cCpus);
1121 Assert(pUVM->aCpus[idDstCpu].vm.s.NativeThreadEMT == RTThreadNativeSelf());
1122 ppPriorityReqs = &pUVM->aCpus[idDstCpu].vm.s.pPriorityReqs;
1123 ppNormalReqs = !fPriorityOnly ? &pUVM->aCpus[idDstCpu].vm.s.pNormalReqs : ppPriorityReqs;
1141 if (RT_LIKELY(pUVM->pVM))
1144 VM_FF_CLEAR(pUVM->pVM, VM_FF_REQUEST);
1146 VMCPU_FF_CLEAR(&pUVM->pVM->aCpus[idDstCpu], VMCPU_FF_REQUEST);
1153 pReq = vmR3ReqProcessUTooManyHelper(pUVM, idDstCpu, pReq, ppPriorityReqs);
1155 vmR3ReqSetFF(pUVM, idDstCpu);
1163 pReq = vmR3ReqProcessUTooManyHelper(pUVM, idDstCpu, pReq, ppNormalReqs);
1169 STAM_COUNTER_INC(&pUVM->vm.s.StatReqProcessed);
1170 int rc2 = vmR3ReqProcessOneU(pUVM, pReq);
1179 LogFlow(("VMR3ReqProcess: returns %Rrc (enmVMState=%d)\n", rc, pUVM->pVM ? pUVM->pVM->enmVMState : VMSTATE_CREATING));
1192 static int vmR3ReqProcessOneU(PUVM pUVM, PVMREQ pReq)
1204 if (fPriorityReq && pUVM->pVM)
1206 pVCpu = VMMGetCpu(pUVM->pVM);