1// BlockAllocatorMisc.h
2
3#ifndef BLOCK_ALLOCATOR_MISC_H
4#define BLOCK_ALLOCATOR_MISC_H
5
6#include "Block.h"
7#include "Misc.h"
8
9// block alignment -- start offsets and size
10static const size_t kBlockAlignment = 4;	// must be a power of 2
11
12// block_align_{floor,ceil}
13static inline size_t block_align_floor(size_t value)
14	{ return value & ~(kBlockAlignment - 1); }
15static inline size_t block_align_ceil(size_t value)
16	{ return (value + kBlockAlignment - 1) & ~(kBlockAlignment - 1); }
17
18// minimal size of a gross/net block
19// BAD DOG: No initializers in the kernel!
20//static const size_t kMinBlockSize = block_align_ceil(sizeof(TFreeBlock));
21#define kMinBlockSize	(block_align_ceil(sizeof(TFreeBlock)))
22static const size_t kMinNetBlockSize = 8;
23
24static const size_t kDefragmentingTolerance = 10240;
25
26// bucket_containing_size -- bucket for to contain an area with size
27static inline int bucket_containing_size(size_t size)
28	{ return fls(size / kMinNetBlockSize) + 1; }
29
30// bucket_containing_min_size -- bucket containing areas >= size
31static inline int
32bucket_containing_min_size(size_t size)
33	{ return (size ? bucket_containing_size(size - 1) + 1 : 0); }
34
35
36#endif // BLOCK_ALLOCATOR_MISC_H
37