Home | History | Annotate | Download | only in libufdt

Lines Matching refs:block

32 /* A block is a header appended UFDT_NODE_POOL_ENTRIES_PER_BLOCK entries */
40 * pool block block
73 struct ufdt_node_pool_block_header *block = pool->first_block;
74 while (block != NULL) {
75 if (block->alloc_entry_cnt != 0) is_leak = 1;
77 struct ufdt_node_pool_block_header *next_block = block->next_block;
78 dto_free(block);
79 block = next_block;
95 struct ufdt_node_pool_block_header *block =
99 struct ufdt_node_pool_entry_header **next_ptr = &block->first_free_entry;
111 block->next_block = NULL;
112 block->alloc_entry_cnt = 0;
114 return block;
118 struct ufdt_node_pool_block_header *block) {
119 dto_free(block);
123 struct ufdt_node_pool_block_header *block) {
125 struct ufdt_node_pool_entry_header *entry = block->first_free_entry;
127 block->first_free_entry = entry->next;
128 block->alloc_entry_cnt++;
133 static void _ufdt_node_pool_block_free(struct ufdt_node_pool_block_header *block,
137 entry->next = block->first_free_entry;
139 block->first_free_entry = entry;
140 block->alloc_entry_cnt--;
144 struct ufdt_node_pool *pool, struct ufdt_node_pool_block_header *block) {
146 block->next_block = origin_first_block;
148 pool->first_block = block;
150 pool->last_block_ptr = &block->next_block;
155 struct ufdt_node_pool *pool, struct ufdt_node_pool_block_header *block) {
156 block->next_block = NULL;
158 *pool->last_block_ptr = block;
159 pool->last_block_ptr = &block->next_block;
165 struct ufdt_node_pool_block_header *block = *block_ptr;
166 struct ufdt_node_pool_block_header *next_block = block->next_block;
173 block->next_block = NULL;
182 // If there is no free block, create a new one
183 struct ufdt_node_pool_block_header *block = pool->first_block;
184 if (block == NULL || block->first_free_entry == NULL) {
185 block = _ufdt_node_pool_create_block();
186 _ufdt_node_pool_preppend_block(pool, block);
189 void *node = _ufdt_node_pool_block_alloc(block);
191 // Move the block to the last if there is no free entry
192 if (block->first_free_entry == NULL && *pool->last_block_ptr != block) {
194 _ufdt_node_pool_append_block(pool, block);
204 struct ufdt_node_pool_block_header *block = *block_ptr;
206 (char *)block + sizeof(struct ufdt_node_pool_block_header);
207 const char *block_buf_end = (char *)block + UFDT_NODE_POOL_BLOCK_SIZE;
213 block_ptr = &block->next_block;
230 struct ufdt_node_pool_block_header *block = *block_ptr;
231 _ufdt_node_pool_block_free(block, node);
234 /* Delay free block: free the block only if the block is all freed and
235 there has at least one another free block */
236 if (block->alloc_entry_cnt == 0 && pool->first_block != NULL &&
238 _ufdt_node_pool_destory_block(block);
242 _ufdt_node_pool_preppend_block(pool, block);