Lines Matching refs:block
38 * Each page is divided in blocks. There is at least one block in a page.
51 struct block {
55 struct block *next;
62 struct block block[1];
68 #define HDR_BLOCK (sizeof (struct block) - sizeof (void *))
109 struct block *block;
111 for (block = page->block; block; block = block->next) {
112 struct block *block2;
114 if (block->status == BUSY)
116 for (block2 = block->next; block2 &&
118 block->next = block2->next;
119 block->size += block2->size + HDR_BLOCK;
135 split(struct block *block, size_t size)
137 if (block->size > size + sizeof (struct block)) {
138 struct block *newblock;
140 newblock = (struct block *)
141 ((char *)block + HDR_BLOCK + size);
142 newblock->next = block->next;
143 block->next = newblock;
145 newblock->page = block->page;
146 newblock->size = block->size - size - HDR_BLOCK;
147 block->size = size;
161 struct block *block;
170 for (block = page->block; block; block = block->next) {
171 if ((block->status == FREE) && (block->size >= size))
191 block = page->block;
192 block->next = 0;
193 block->status = FREE;
194 block->size = totpage - HDR_PAGE;
195 block->page = page;
198 split(block, size);
200 scribble((ulong_t *)&block->memstart, NEWMEM, block->size);
202 block->status = BUSY;
203 return (&block->memstart);
233 struct block *block;
241 block = (struct block *)((char *)ptr - HDR_BLOCK);
243 osize = block->size;
246 * Join block with next one if it is free
248 if (block->next && block->next->status == FREE) {
249 block->size += block->next->size + HDR_BLOCK;
250 block->next = block->next->next;
253 if (size <= block->size) {
254 split(block, size);
256 if (block->size > osize)
258 (block->size - osize));
266 block->status = FREE;
269 * Add the free block to the free APlist for later defragmentation.
280 (void) aplist_test(&free_alp, block->page, AL_CNT_FREELIST);
291 struct block *block;
297 block = (struct block *)((char *)ptr - HDR_BLOCK);
298 block->status = FREE;
300 scribble((ulong_t *)&block->memstart, FREMEM, block->size);
302 (void) aplist_test(&free_alp, block->page, AL_CNT_FREELIST);
319 struct block *block;
328 block = page->block;
329 block->next = 0;
330 block->status = FREE;
331 block->size = bytes - HDR_PAGE;
332 block->page = page;