Beispiel #1
0
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;
	}
}
Beispiel #2
0
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;
	}
}
Beispiel #3
0
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));
}
Beispiel #4
0
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));
}