From ec47968a489632a9a02fc59556b13cd7f5844556 Mon Sep 17 00:00:00 2001 From: NAKAMURA Gou Date: Wed, 31 Jul 2013 17:33:38 +0900 Subject: [PATCH] =?UTF-8?q?idle=20=E9=96=8B=E5=A7=8B=E6=99=82=E3=81=AB=20f?= =?UTF-8?q?ree=5Flist=20=E3=81=AE=E7=8A=B6=E6=B3=81=E3=82=92=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/include/kmalloc.h | 1 + kernel/mem.c | 43 ++++++++++++++++++++++++++++++++++++++++ kernel/process.c | 1 + 3 files changed, 45 insertions(+) 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 {