more detailed report in memory management error path
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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