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 |