kerneltest/e32test/nkernsa/tlsf.cpp
branchRCL_3
changeset 43 c1f20ce4abcf
parent 0 a41df078684a
child 44 3e88ff8f41d5
equal deleted inserted replaced
42:a179b74831c9 43:c1f20ce4abcf
   355 TUint32 STlsfAllocator::ConsistencyCheck()
   355 TUint32 STlsfAllocator::ConsistencyCheck()
   356 	{
   356 	{
   357 	TUint32 a;
   357 	TUint32 a;
   358 	TUint32 szs = 0;
   358 	TUint32 szs = 0;
   359 	TUint32 size;
   359 	TUint32 size;
   360 	TUint32 total_user_size;
       
   361 	TUint32 total_block_size = 0;
   360 	TUint32 total_block_size = 0;
   362 	TUint32 block_count = 0;
   361 	TUint32 block_count = 0;
   363 	TUint32 flb = 0;
   362 	TUint32 flb = 0;
   364 	TUint32 slb[32];
   363 	TUint32 slb[32];
   365 	TUint32 sli;
   364 	TUint32 sli;
   366 	TUint32 fli;
   365 	TUint32 fli;
   367 	TUint32 total_free = 0;
   366 	TUint32 total_free = 0;
   368 	SBlock* b = iff;
   367 	SBlock* b = iff;
   369 	SBlock* pb = 0;
   368 	SBlock* pb = 0;
       
   369 	TUint32 total_user_size;
   370 
   370 
   371 	memset(slb, 0, sizeof(slb));
   371 	memset(slb, 0, sizeof(slb));
   372 	__NK_ASSERT_DEBUG(imin_size == 16);
   372 	__NK_ASSERT_ALWAYS(imin_size == 16);
   373 	__NK_ASSERT_DEBUG(insl == 16);
   373 	__NK_ASSERT_ALWAYS(insl == 16);
   374 	__NK_ASSERT_DEBUG(il2min == 4);
   374 	__NK_ASSERT_ALWAYS(il2min == 4);
   375 	__NK_ASSERT_DEBUG(il2nsl == 4);
   375 	__NK_ASSERT_ALWAYS(il2nsl == 4);
   376 	__NK_ASSERT_DEBUG(infl == __e32_find_ms1_32(itotal_size) - il2min + 1);
   376 	__NK_ASSERT_ALWAYS(infl == __e32_find_ms1_32(itotal_size) - il2min + 1);
   377 	a = (TUint32)&islb[infl];
   377 	a = (TUint32)&islb[infl];
   378 	a = (a+63)&~63;
   378 	a = (a+63)&~63;
   379 	__NK_ASSERT_DEBUG(isll == (SFreeBlock**)a);
   379 	__NK_ASSERT_ALWAYS(isll == (SFreeBlock**)a);
   380 	a += insl * infl * sizeof(TUint32*);
   380 	a += insl * infl * sizeof(TUint32*);
   381 	__NK_ASSERT_DEBUG(iff == (SBlock*)a);
   381 	__NK_ASSERT_ALWAYS(iff == (SBlock*)a);
   382 	total_user_size = itotal_size - (a - (TUint32)this);
   382 	total_user_size = itotal_size - (a - (TUint32)this);
   383 
   383 
   384 	do	{
   384 	do	{
   385 		szs = b->size;
   385 		szs = b->size;
   386 		size = szs & BLOCK_SIZE_MASK;
   386 		size = szs & BLOCK_SIZE_MASK;
   387 		__NK_ASSERT_DEBUG(b->predecessor == pb);
   387 		__NK_ASSERT_ALWAYS(b->predecessor == pb);
   388 		__NK_ASSERT_DEBUG(size > 0);
   388 		__NK_ASSERT_ALWAYS(size > 0);
   389 		__NK_ASSERT_DEBUG(size <= total_user_size);
   389 		__NK_ASSERT_ALWAYS(size <= total_user_size);
   390 		__NK_ASSERT_DEBUG(size == ((size >> il2min) << il2min));
   390 		__NK_ASSERT_ALWAYS(size == ((size >> il2min) << il2min));
   391 		total_block_size += size;
   391 		total_block_size += size;
   392 		++block_count;
   392 		++block_count;
   393 		pb = b;
   393 		pb = b;
   394 		b = (SBlock*)((TUint32)b + size);
   394 		b = (SBlock*)((TUint32)b + size);
   395 		} while(!(szs & BLOCK_STATUS_FINAL));
   395 		} while(!(szs & BLOCK_STATUS_FINAL));
   396 	__NK_ASSERT_DEBUG((TUint32)b == (TUint32)this + itotal_size);
   396 	__NK_ASSERT_ALWAYS((TUint32)b == (TUint32)this + itotal_size);
   397 	__NK_ASSERT_DEBUG(total_block_size == total_user_size);
   397 	__NK_ASSERT_ALWAYS(total_block_size == total_user_size);
   398 
   398 
   399 	b = iff;
   399 	b = iff;
   400 	do	{
   400 	do	{
   401 		szs = b->size;
   401 		szs = b->size;
   402 		size = szs & BLOCK_SIZE_MASK;
   402 		size = szs & BLOCK_SIZE_MASK;
   403 		if (szs & BLOCK_STATUS_FREE)
   403 		if (szs & BLOCK_STATUS_FREE)
   404 			{
   404 			{
   405 			SFreeBlock* fb = (SFreeBlock*)b;
   405 			SFreeBlock* fb = (SFreeBlock*)b;
       
   406 			TUint32 lhi;
       
   407 			SFreeBlock* lh;
   406 			SFreeBlock* pfb = fb;
   408 			SFreeBlock* pfb = fb;
   407 			SFreeBlock* lh;
       
   408 			TUint32 lhi;
       
   409 			TInt lh_found = 0;
   409 			TInt lh_found = 0;
   410 			TInt c = (TInt)block_count;
   410 			TInt c = (TInt)block_count;
   411 			TUint32 fli = __e32_find_ms1_32(size) - il2min;
   411 			TUint32 fli = __e32_find_ms1_32(size) - il2min;
   412 			TUint32 sli = (size >> il2min) - (1u << fli);
   412 			TUint32 sli = (size >> il2min) - (1u << fli);
   413 			TUint32 sli2;
   413 			TUint32 sli2;
   414 			TUint32 fli2 = MapSize(size, &sli2, 0);
   414 			TUint32 fli2 = MapSize(size, &sli2, 0);
   415 			(void)sli2, (void)fli2;
   415 			(void)sli2, (void)fli2;
   416 			if (fli > il2nsl)
   416 			if (fli > il2nsl)
   417 				sli >>= (fli - il2nsl);
   417 				sli >>= (fli - il2nsl);
   418 			__NK_ASSERT_DEBUG(fli == fli2);
   418 			__NK_ASSERT_ALWAYS(fli == fli2);
   419 			__NK_ASSERT_DEBUG(sli == sli2);
   419 			__NK_ASSERT_ALWAYS(sli == sli2);
   420 			flb |= (1u << fli);
   420 			flb |= (1u << fli);
   421 			slb[fli] |= (1u << sli);
   421 			slb[fli] |= (1u << sli);
   422 			lhi = (fli << il2nsl) | sli;
   422 			lhi = (fli << il2nsl) | sli;
   423 			lh = isll[lhi];
   423 			lh = isll[lhi];
   424 			do	{
   424 			do	{
   425 				if (fb == lh)
   425 				if (fb == lh)
   426 					lh_found = 1;
   426 					lh_found = 1;
   427 				pfb = fb;
   427 				pfb = fb;
   428 				fb = fb->next;
   428 				fb = fb->next;
   429 				__NK_ASSERT_DEBUG(fb->prev == pfb);
   429 				__NK_ASSERT_ALWAYS(fb->prev == pfb);
   430 				__NK_ASSERT_DEBUG(fb->b.size & BLOCK_STATUS_FREE);
   430 				__NK_ASSERT_ALWAYS(fb->b.size & BLOCK_STATUS_FREE);
   431 				} while ((fb != (SFreeBlock*)b) && --c>=0);
   431 				} while ((fb != (SFreeBlock*)b) && --c>=0);
   432 			__NK_ASSERT_DEBUG(fb == (SFreeBlock*)b);
   432 			__NK_ASSERT_ALWAYS(fb == (SFreeBlock*)b);
   433 			__NK_ASSERT_DEBUG(lh_found);
   433 			__NK_ASSERT_ALWAYS(lh_found);
   434 			total_free += size;
   434 			total_free += size;
   435 			}
   435 			}
   436 		b = (SBlock*)((TUint32)b + size);
   436 		b = (SBlock*)((TUint32)b + size);
   437 		} while(!(szs & BLOCK_STATUS_FINAL));
   437 		} while(!(szs & BLOCK_STATUS_FINAL));
   438 
   438 
   439 	__NK_ASSERT_DEBUG(flb == iflb);
   439 	__NK_ASSERT_ALWAYS(flb == iflb);
   440 	for (fli=0; fli<infl; ++fli)
   440 	for (fli=0; fli<infl; ++fli)
   441 		{
   441 		{
   442 		__NK_ASSERT_DEBUG(slb[fli] == islb[fli]);
   442 		__NK_ASSERT_ALWAYS(slb[fli] == islb[fli]);
   443 		if (!(flb & (1u<<fli)))
   443 		if (!(flb & (1u<<fli)))
   444 			__NK_ASSERT_DEBUG(slb[fli]==0);
   444 			__NK_ASSERT_ALWAYS(slb[fli]==0);
   445 		for (sli=0; sli<insl; ++sli)
   445 		for (sli=0; sli<insl; ++sli)
   446 			{
   446 			{
   447 			TUint32 lhi = (fli << il2nsl) | sli;
   447 			TUint32 lhi = (fli << il2nsl) | sli;
   448 			(void)lhi;
       
   449 			if (!(slb[fli] & (1u<<sli)))
   448 			if (!(slb[fli] & (1u<<sli)))
   450 				__NK_ASSERT_DEBUG(!isll[lhi]);
   449 				__NK_ASSERT_ALWAYS(!isll[lhi]);
   451 			}
   450 			}
   452 		}
   451 		}
   453 	return total_free;
   452 	return total_free;
   454 	}
   453 	}
   455 
   454