static void heap_dump(void) { dprintf(INFO, "Heap dump:\n"); dprintf(INFO, "\tbase %p, len 0x%zx\n", theheap.base, theheap.len); dprintf(INFO, "\tfree list:\n"); mutex_acquire(&theheap.lock); struct free_heap_chunk *chunk; list_for_every_entry(&theheap.free_list, chunk, struct free_heap_chunk, node) { dump_free_chunk(chunk); } dprintf(INFO, "\tdelayed free list:\n"); list_for_every_entry(&theheap.delayed_free_list, chunk, struct free_heap_chunk, node) { dump_free_chunk(chunk); } mutex_release(&theheap.lock); }
static void heap_dump(void) { dprintf(INFO, "Heap dump:\n"); dprintf(INFO, "\tbase %p, len 0x%zx\n", theheap.base, theheap.len); dprintf(INFO, "\tfree list:\n"); struct free_heap_chunk *chunk; list_for_every_entry(&theheap.free_list, chunk, struct free_heap_chunk, node) { dump_free_chunk(chunk); } }
static void heap_dump(void) { int z; for (z = 0; z < MAX_ZONES; z++) { dprintf(INFO, "\nHeap dump (%s):\n", zone_name(z)); dprintf(INFO, "\tbase %p, len 0x%zx\n", theheap[z].base, theheap[z].len); dprintf(INFO, "\tfree list:\n"); struct free_heap_chunk *chunk; list_for_every_entry(&theheap[z].free_list, chunk, struct free_heap_chunk, node) { dump_free_chunk(chunk); } } }