more detailed report in memory management error path
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user