Lines Matching refs:pQueue

45  * @param   pQueue      The queue handle.
48 VMMDECL(PPDMQUEUEITEMCORE) PDMQueueAlloc(PPDMQUEUE pQueue)
50 Assert(VALID_PTR(pQueue) && pQueue->CTX_SUFF(pVM));
56 i = pQueue->iFreeTail;
57 if (i == pQueue->iFreeHead)
59 STAM_REL_COUNTER_INC(&pQueue->StatAllocFailures);
62 pNew = pQueue->aFreeItems[i].CTX_SUFF(pItem);
63 iNext = (i + 1) % (pQueue->cItems + PDMQUEUE_FREE_SLACK);
64 } while (!ASMAtomicCmpXchgU32(&pQueue->iFreeTail, iNext, i));
72 * @param pQueue The PDM queue.
74 static void pdmQueueSetFF(PPDMQUEUE pQueue)
76 PVM pVM = pQueue->CTX_SUFF(pVM);
94 * @param pQueue The queue handle.
98 VMMDECL(void) PDMQueueInsert(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem)
100 Assert(VALID_PTR(pQueue) && pQueue->CTX_SUFF(pVM));
107 pvNext = ASMAtomicUoReadPtr((void * volatile *)&pQueue->CTX_SUFF(pPending));
109 } while (!ASMAtomicCmpXchgPtr(&pQueue->CTX_SUFF(pPending), pItem, pvNext));
114 pNext = pQueue->CTX_SUFF(pPending);
116 } while (!ASMAtomicCmpXchgPtr(&pQueue->CTX_SUFF(pPending), pItem, pNext));
119 if (!pQueue->pTimer)
120 pdmQueueSetFF(pQueue);
121 STAM_REL_COUNTER_INC(&pQueue->StatInsert);
122 STAM_STATS({ ASMAtomicIncU32(&pQueue->cStatPending); });
131 * @param pQueue The queue handle.
137 VMMDECL(void) PDMQueueInsertEx(PPDMQUEUE pQueue, PPDMQUEUEITEMCORE pItem, uint64_t NanoMaxDelay)
140 PDMQueueInsert(pQueue, pItem);
142 PVM pVM = pQueue->CTX_SUFF(pVM);
162 * @returns NULL if pQueue is invalid.
163 * @param pQueue The queue handle.
165 VMMDECL(RCPTRTYPE(PPDMQUEUE)) PDMQueueRCPtr(PPDMQUEUE pQueue)
167 Assert(VALID_PTR(pQueue));
168 Assert(pQueue->pVMR3 && pQueue->pVMRC);
170 return pQueue;
172 return MMHyperCCToRC(pQueue->CTX_SUFF(pVM), pQueue);
181 * @returns NULL if pQueue is invalid.
182 * @param pQueue The queue handle.
184 VMMDECL(R0PTRTYPE(PPDMQUEUE)) PDMQueueR0Ptr(PPDMQUEUE pQueue)
186 Assert(VALID_PTR(pQueue));
187 Assert(pQueue->pVMR3 && pQueue->pVMR0);
189 return pQueue;
191 return MMHyperCCToR0(pQueue->CTX_SUFF(pVM), pQueue);
200 * @param pQueue The queue.
202 VMMDECL(bool) PDMQueueFlushIfNecessary(PPDMQUEUE pQueue)
204 AssertPtr(pQueue);
205 if ( pQueue->pPendingR3 != NIL_RTR3PTR
206 || pQueue->pPendingR0 != NIL_RTR0PTR
207 || pQueue->pPendingRC != NIL_RTRCPTR)
209 pdmQueueSetFF(pQueue);