Lines Matching refs:pBwGroup

83     PPDMNSBWGROUP pBwGroup = NULL;
89 pBwGroup = pShaper->pBwGroupsHead;
90 while ( pBwGroup
91 && RTStrCmp(pBwGroup->pszNameR3, pszId))
92 pBwGroup = pBwGroup->pNextR3;
97 return pBwGroup;
101 static void pdmNsBwGroupLink(PPDMNSBWGROUP pBwGroup)
103 PPDMNETSHAPER pShaper = pBwGroup->pShaperR3;
106 pBwGroup->pNextR3 = pShaper->pBwGroupsHead;
107 pShaper->pBwGroupsHead = pBwGroup;
114 static void pdmNsBwGroupUnlink(PPDMNSBWGROUP pBwGroup)
116 PPDMNETSHAPER pShaper = pBwGroup->pShaper;
119 if (pBwGroup == pShaper->pBwGroupsHead)
120 pShaper->pBwGroupsHead = pBwGroup->pNext;
125 && pPrev->pNext != pBwGroup)
129 pPrev->pNext = pBwGroup->pNext;
137 static void pdmNsBwGroupSetLimit(PPDMNSBWGROUP pBwGroup, uint64_t cbPerSecMax)
139 pBwGroup->cbPerSecMax = cbPerSecMax;
140 pBwGroup->cbBucket = RT_MAX(PDM_NETSHAPER_MIN_BUCKET_SIZE, cbPerSecMax * PDM_NETSHAPER_MAX_LATENCY / 1000);
142 pBwGroup->cbPerSecMax, pBwGroup->cbBucket));
155 PPDMNSBWGROUP pBwGroup = pdmNsBwGroupFindById(pShaper, pszBwGroup);
156 if (!pBwGroup)
159 MM_TAG_PDM_NET_SHAPER, (void **)&pBwGroup);
162 rc = PDMR3CritSectInit(pShaper->pVM, &pBwGroup->Lock, RT_SRC_POS, "BWGRP");
165 pBwGroup->pszNameR3 = MMR3HeapStrDup(pShaper->pVM, MM_TAG_PDM_NET_SHAPER, pszBwGroup);
166 if (pBwGroup->pszNameR3)
168 pBwGroup->pShaperR3 = pShaper;
169 pBwGroup->cRefs = 0;
171 pdmNsBwGroupSetLimit(pBwGroup, cbPerSecMax);
173 pBwGroup->cbTokensLast = pBwGroup->cbBucket;
174 pBwGroup->tsUpdatedLast = RTTimeSystemNanoTS();
177 pszBwGroup, pBwGroup->cbBucket));
178 pdmNsBwGroupLink(pBwGroup);
181 PDMR3CritSectDelete(&pBwGroup->Lock);
183 MMHyperFree(pShaper->pVM, pBwGroup);
196 static void pdmNsBwGroupTerminate(PPDMNSBWGROUP pBwGroup)
198 Assert(pBwGroup->cRefs == 0);
199 if (PDMCritSectIsInitialized(&pBwGroup->Lock))
200 PDMR3CritSectDelete(&pBwGroup->Lock);
204 DECLINLINE(void) pdmNsBwGroupRef(PPDMNSBWGROUP pBwGroup)
206 ASMAtomicIncU32(&pBwGroup->cRefs);
210 DECLINLINE(void) pdmNsBwGroupUnref(PPDMNSBWGROUP pBwGroup)
212 Assert(pBwGroup->cRefs > 0);
213 ASMAtomicDecU32(&pBwGroup->cRefs);
217 static void pdmNsBwGroupXmitPending(PPDMNSBWGROUP pBwGroup)
224 AssertPtr(pBwGroup);
225 AssertPtr(pBwGroup->pShaperR3);
226 Assert(RTCritSectIsOwner(&pBwGroup->pShaperR3->Lock));
230 if (pBwGroup->cbPerSecMax == 0)
233 PPDMNSFILTER pFilter = pBwGroup->pFiltersHeadR3;
253 PPDMNSBWGROUP pBwGroup = pFilter->pBwGroupR3;
254 int rc = PDMCritSectEnter(&pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc);
256 pFilter->pNextR3 = pBwGroup->pFiltersHeadR3;
257 pBwGroup->pFiltersHeadR3 = pFilter;
259 rc = PDMCritSectLeave(&pBwGroup->Lock); AssertRC(rc);
265 PPDMNSBWGROUP pBwGroup = pFilter->pBwGroupR3;
271 AssertPtr(pBwGroup);
272 AssertPtr(pBwGroup->pShaperR3);
273 Assert(RTCritSectIsOwner(&pBwGroup->pShaperR3->Lock));
274 int rc = PDMCritSectEnter(&pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc);
276 if (pFilter == pBwGroup->pFiltersHeadR3)
277 pBwGroup->pFiltersHeadR3 = pFilter->pNextR3;
280 PPDMNSFILTER pPrev = pBwGroup->pFiltersHeadR3;
289 rc = PDMCritSectLeave(&pBwGroup->Lock); AssertRC(rc);
358 PPDMNSBWGROUP pBwGroup = ASMAtomicXchgPtrT(&pFilter->pBwGroupR3, NULL, PPDMNSBWGROUP);
359 if (pBwGroup)
360 pdmNsBwGroupUnref(pBwGroup);
382 PPDMNSBWGROUP pBwGroup = pdmNsBwGroupFindById(pShaper, pszBwGroup);
383 if (pBwGroup)
385 rc = PDMCritSectEnter(&pBwGroup->Lock, VERR_SEM_BUSY); AssertRC(rc);
388 pdmNsBwGroupSetLimit(pBwGroup, cbPerSecMax);
391 if (pBwGroup->cbTokensLast > pBwGroup->cbBucket)
392 pBwGroup->cbTokensLast = pBwGroup->cbBucket;
394 int rc2 = PDMCritSectLeave(&pBwGroup->Lock); AssertRC(rc2);
422 PPDMNSBWGROUP pBwGroup = pShaper->pBwGroupsHead;
423 while (pBwGroup)
425 pdmNsBwGroupXmitPending(pBwGroup);
426 pBwGroup = pBwGroup->pNextR3;
462 PPDMNSBWGROUP pBwGroup = pShaper->pBwGroupsHead;
463 while (pBwGroup)
465 PPDMNSBWGROUP pFree = pBwGroup;
466 pBwGroup = pBwGroup->pNextR3;