void bt_initialise_slab_second_stage() { BT_u32 i = BT_CACHE_GENERIC_MIN; while(i <= BT_CACHE_GENERIC_MAX) { BT_CACHE *pCache = BT_GetSuitableCache(i); if(!pCache) { break; } pCache->slab_mutex = BT_kMutexCreate(); i = i << 1; } }
void bt_initialise_slab() { BT_u32 i = BT_CACHE_GENERIC_MIN; while(i <= BT_CACHE_GENERIC_MAX) { BT_CACHE *pCache = BT_GetSuitableCache(i); if(!pCache) { break; } init_cache(pCache, i); i = i << 1; } }
void *BT_kMalloc(BT_u32 ulSize) { void *p; if(!ulSize) { return NULL; } ulSize=(ulSize+3)&0xFFFFFFFC; BT_CACHE *pCache = BT_GetSuitableCache(ulSize+sizeof(struct MEM_TAG)+sizeof(struct MAGIC_TAG)); if(pCache) { p = BT_CacheAlloc(pCache); } else { bt_paddr_t phys = bt_page_alloc(ulSize+sizeof(struct MEM_TAG)+sizeof(struct MAGIC_TAG)); if(!phys) { return NULL; } p = (void *) bt_phys_to_virt(phys); } if(!p) { return NULL; } struct MEM_TAG *tag = (struct MEM_TAG *) p; tag->pCache = pCache; tag->size = ulSize; set_magic(&tag->tag_0); set_magic(&tag->tag_1); struct MAGIC_TAG *mempost = (struct MAGIC_TAG *) ((BT_u8 *) (tag+1) + ulSize); set_magic(mempost); /* * Before the allocated memory we place a pointer to the pCache. * This will be 0 in the case of a page allocation! */ return ((void *) (tag + 1)); }
void *BT_kMalloc(BT_u32 ulSize) { void *p; BT_CACHE *pCache = BT_GetSuitableCache(ulSize+sizeof(BT_CACHE *)); if(pCache) { p = BT_CacheAlloc(pCache); } else { p = (void *) bt_phys_to_virt(bt_page_alloc(ulSize+sizeof(BT_CACHE *))); if(!p) { return NULL; } } BT_CACHE **tag = (BT_CACHE **) p; *tag = pCache; /* * Before the allocated memory we place a pointer to the pCache. * This will be 0 in the case of a page allocation! */ return ((void *) (tag + 1)); }