diff --git a/kernel/include/kmalloc.h b/kernel/include/kmalloc.h index 2015cc20..ce5b5f56 100644 --- a/kernel/include/kmalloc.h +++ b/kernel/include/kmalloc.h @@ -17,5 +17,6 @@ void *kmalloc(int size, enum ihk_mc_ap_flag flag); void kfree(void *ptr); +void show_free_list(void); #endif diff --git a/kernel/mem.c b/kernel/mem.c index 2687d860..36b37ef8 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -761,3 +761,46 @@ void print_free_list(void) } kprintf("\n"); } + +void print_active_entry(void) +{ + struct cpu_local_var *v = get_this_cpu_local_var(); + struct malloc_header *h = &v->free_list; + struct malloc_header *p; + struct malloc_header *q; + + kprintf("active entries: \n"); + for (p = h->next; (p != h) && (p->next != h) ; p = p->next) { + if (p->size || p->next->size) { + q = p + p->size + 1; + if (q != p->next) { + kprintf(" %p - %p: %d\n", q, p->next, (p->next - q)); + } + } + } + kprintf("\n"); + + return; +} + +void show_free_list(void) +{ + struct cpu_local_var *v = get_this_cpu_local_var(); + struct malloc_header *h = &v->free_list; + struct malloc_header *p; + int count; + int free; + + print_active_entry(); + count = 0; + free = 0; + for (p = h->next; p != h; p = p->next) { + ++count; + free += p->size; + } + + kprintf("[%d]free_list: %d entry %lx bytes\n", + ihk_mc_get_processor_id(), count, sizeof(*p)*free); + + return; +} diff --git a/kernel/process.c b/kernel/process.c index f46a28d6..e87456db 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -1911,6 +1911,7 @@ redo: if ((last != NULL) && (last->status & (PS_ZOMBIE | PS_EXITED))) { free_process_memory(last); release_process(last); + show_free_list(); } } else {