more detailed report in memory management error path

This commit is contained in:
Balazs Gerofi bgerofi@riken.jp
2014-05-22 17:27:39 +09:00
parent 6a8e75dda0
commit badb450153
4 changed files with 16 additions and 3 deletions

View File

@ -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;
}

View File

@ -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;
}