Lines Matching refs:pPage

256         PRTMEMCACHEPAGE pPage = pThis->pPageHead;
257 pThis->pPageHead = pPage->pNext;
258 pPage->cFree = 0;
262 uint32_t iObj = pPage->cObjects;
264 if (ASMBitTestAndClear(pPage->pbmCtor, iObj))
265 pThis->pfnDtor(hMemCache, pPage->pbObjects + iObj * pThis->cbObject, pThis->pvUser);
268 RTMemPageFree(pPage, PAGE_SIZE);
302 PRTMEMCACHEPAGE pPage = (PRTMEMCACHEPAGE)RTMemPageAlloc(PAGE_SIZE);
303 if (pPage)
307 ASMMemZeroPage(pPage);
308 pPage->pCache = pThis;
309 pPage->pNext = NULL;
310 pPage->cFree = cObjects;
311 pPage->cObjects = cObjects;
312 uint8_t *pb = (uint8_t *)(pPage + 1);
314 pPage->pbmCtor = pb;
315 pb = (uint8_t *)pPage + PAGE_SIZE - pThis->cbObject * cObjects;
316 pPage->pbObjects = pb; Assert(RT_ALIGN_P(pb, pThis->cbAlignment) == pb);
319 pPage->pbmAlloc = pb;
320 Assert((uintptr_t)pPage->pbmCtor + pThis->cBits / 8 <= (uintptr_t)pPage->pbmAlloc);
324 ASMBitSet(pPage->pbmAlloc, iBit);
327 ASMAtomicWritePtr(&pThis->pPageHint, pPage);
330 ASMAtomicWritePtr(pThis->ppPageNext, pPage);
331 pThis->ppPageNext = &pPage->pNext;
348 * @param pPage Pointer to the page.
350 DECL_FORCE_INLINE(int32_t) rtMemCacheGrabObj(PRTMEMCACHEPAGE pPage)
352 if (ASMAtomicUoReadS32(&pPage->cFree) > 0)
354 int32_t cFreeNew = ASMAtomicDecS32(&pPage->cFree);
357 ASMAtomicIncS32(&pPage->cFree);
417 PRTMEMCACHEPAGE pPage = ASMAtomicUoReadPtrT(&pThis->pPageHint, PRTMEMCACHEPAGE);
418 int32_t iObj = pPage ? rtMemCacheGrabObj(pPage) : -1;
423 for (pPage = pThis->pPageHead; pPage; pPage = pPage->pNext)
425 iObj = rtMemCacheGrabObj(pPage);
429 ASMAtomicWritePtr(&pThis->pPageHint, pPage);
446 if (ASMAtomicBitTestAndSet(pPage->pbmAlloc, iObj))
450 iObj = ASMBitFirstClear(pPage->pbmAlloc, pThis->cBits);
453 if (!ASMAtomicBitTestAndSet(pPage->pbmAlloc, iObj))
462 void *pvObj = &pPage->pbObjects[iObj * pThis->cbObject];
463 Assert((uintptr_t)pvObj - (uintptr_t)pPage < PAGE_SIZE);
469 && !ASMAtomicBitTestAndSet(pPage->pbmCtor, iObj))
474 ASMAtomicBitClear(pPage->pbmCtor, iObj);
509 PRTMEMCACHEPAGE pPage = (PRTMEMCACHEPAGE)(((uintptr_t)pvObj) & ~(uintptr_t)PAGE_OFFSET_MASK);
510 Assert(pPage->pCache == pThis);
511 Assert(ASMAtomicUoReadS32(&pPage->cFree) < (int32_t)pThis->cPerPage);
516 uintptr_t offObj = (uintptr_t)pvObj - (uintptr_t)pPage->pbObjects;
520 AssertReturnVoid(ASMAtomicBitTestAndClear(pPage->pbmAlloc, iObj));
522 ASMAtomicIncS32(&pPage->cFree);
565 PRTMEMCACHEPAGE pPage = (PRTMEMCACHEPAGE)(((uintptr_t)pvObj) & ~(uintptr_t)PAGE_OFFSET_MASK);
566 Assert(pPage->pCache == pThis);
567 Assert(ASMAtomicUoReadS32(&pPage->cFree) < (int32_t)pThis->cPerPage);
568 uintptr_t offObj = (uintptr_t)pvObj - (uintptr_t)pPage->pbObjects;
572 AssertReturnVoid(ASMBitTest(pPage->pbmAlloc, (int32_t)iObj));