From badb450153652009c3194e38aabe5e4196abc417 Mon Sep 17 00:00:00 2001 From: "Balazs Gerofi bgerofi@riken.jp" Date: Thu, 22 May 2014 17:27:39 +0900 Subject: [PATCH] more detailed report in memory management error path --- arch/x86/kernel/memory.c | 1 + executer/user/mcexec.c | 2 +- kernel/host.c | 7 +++++++ kernel/process.c | 9 +++++++-- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/memory.c b/arch/x86/kernel/memory.c index 12cdf436..dfacf1a6 100644 --- a/arch/x86/kernel/memory.c +++ b/arch/x86/kernel/memory.c @@ -414,6 +414,7 @@ static int __set_pt_page(struct page_table *pt, void *virt, unsigned long phys, if (pt->entry[l1idx] & PFL1_PRESENT) { if ((pt->entry[l1idx] & PT_PHYSMASK) != phys) { + kprintf("EBUSY: page table for 0x%lX is already set\n", virt); return -EBUSY; } else { return 0; diff --git a/executer/user/mcexec.c b/executer/user/mcexec.c index ccbdd56d..fef809a5 100644 --- a/executer/user/mcexec.c +++ b/executer/user/mcexec.c @@ -1098,7 +1098,7 @@ int main_loop(int fd, int cpu, pthread_mutex_t *lock) if(sig) fprintf(stderr, "Terminate by signal %d\n", sig); else if(term) - __dprintf(stderr, "Exit status: %d\n", term); + __dprintf("Exit status: %d\n", term); } } diff --git a/kernel/host.c b/kernel/host.c index ed321939..1a14e194 100644 --- a/kernel/host.c +++ b/kernel/host.c @@ -105,12 +105,14 @@ int prepare_process_ranges_args_envs(struct process *proc, if ((up_v = ihk_mc_alloc_pages(range_npages, IHK_MC_AP_NOWAIT)) == NULL) { + kprintf("ERROR: alloc pages for ELF section %i\n", i); goto err; } up = virt_to_phys(up_v); if (add_process_memory_range(proc, s, e, up, flags, NULL, 0) != 0) { ihk_mc_free_pages(up_v, range_npages); + kprintf("ERROR: adding memory range for ELF section %i\n", i); goto err; } @@ -197,6 +199,7 @@ int prepare_process_ranges_args_envs(struct process *proc, if(add_process_memory_range(proc, addr, e, cpu_local_var(scp).doorbell_pa, VR_REMOTE | flags, NULL, 0) != 0){ + kprintf("ERROR: adding memory range for syscalls dorbell\n"); goto err; } addr = e; @@ -204,6 +207,7 @@ int prepare_process_ranges_args_envs(struct process *proc, if(add_process_memory_range(proc, addr, e, cpu_local_var(scp).request_pa, VR_REMOTE | flags, NULL, 0) != 0){ + kprintf("ERROR: adding memory range for syscalls request pa\n"); goto err; } addr = e; @@ -211,6 +215,7 @@ int prepare_process_ranges_args_envs(struct process *proc, if(add_process_memory_range(proc, addr, e, cpu_local_var(scp).response_pa, flags, NULL, 0) != 0){ + kprintf("ERROR: adding memory range for syscalls response pa\n"); goto err; } @@ -221,6 +226,7 @@ int prepare_process_ranges_args_envs(struct process *proc, e = addr + PAGE_SIZE * ARGENV_PAGE_COUNT; if((args_envs = ihk_mc_alloc_pages(ARGENV_PAGE_COUNT, IHK_MC_AP_NOWAIT)) == NULL){ + kprintf("ERROR: allocating pages for args/envs\n"); goto err; } args_envs_p = virt_to_phys(args_envs); @@ -228,6 +234,7 @@ int prepare_process_ranges_args_envs(struct process *proc, if(add_process_memory_range(proc, addr, e, args_envs_p, flags, NULL, 0) != 0){ ihk_mc_free_pages(args_envs, ARGENV_PAGE_COUNT); + kprintf("ERROR: adding memory range for args/envs\n"); goto err; } diff --git a/kernel/process.c b/kernel/process.c index 9edb6ccd..5c7491ee 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -440,6 +440,8 @@ int update_process_page_table(struct process *process, if (ihk_mc_pt_set_large_page(process->vm->page_table, (void *)p, pa, attr) != 0) { + kprintf("ERROR: setting large page for 0x%lX -> 0x%lX\n", + p, pa); goto err; } @@ -452,6 +454,7 @@ int update_process_page_table(struct process *process, #endif if(ihk_mc_pt_set_page(process->vm->page_table, (void *)p, pa, attr) != 0){ + kprintf("ERROR: setting page for 0x%lX -> 0x%lX\n", p, pa); goto err; } @@ -593,8 +596,8 @@ int free_process_memory_range(struct process_vm *vm, struct vm_range *range) intptr_t lpend; #endif /* USE_LARGE_PAGES */ - dkprintf("free_process_memory_range(%p,%lx-%lx)\n", - vm, start0, end0); + dkprintf("free_process_memory_range(%p, 0x%lx - 0x%lx)\n", + vm, range->start, range->end); start = range->start; end = range->end; @@ -799,6 +802,7 @@ int add_process_memory_range(struct process *process, range = kmalloc(sizeof(struct vm_range), IHK_MC_AP_NOWAIT); if (!range) { + kprintf("ERROR: allocating pages for range\n"); return -ENOMEM; } INIT_LIST_HEAD(&range->list); @@ -832,6 +836,7 @@ int add_process_memory_range(struct process *process, rc = update_process_page_table(process, range, phys, 0); } if(rc != 0){ + kprintf("ERROR: preparing page tables\n"); kfree(range); return rc; }