diff --git a/arch/x86/mm/page.c b/arch/x86/mm/page.c index c153cb0bd..a91b0359d 100644 --- a/arch/x86/mm/page.c +++ b/arch/x86/mm/page.c @@ -290,6 +290,9 @@ void page_fault_handler(struct state *s) spinlock_irqsave_unlock(&page_lock); + // clear cr2 to signalize that the pagefault is solved by the pagefault handler + write_cr2(0); + return; } @@ -308,6 +311,9 @@ default_handler: if (task->heap) LOG_ERROR("Heap 0x%llx - 0x%llx\n", task->heap->start, task->heap->end); + // clear cr2 to signalize that the pagefault is solved by the pagefault handler + write_cr2(0); + apic_eoi(s->int_no); //do_abort(); sys_exit(-EFAULT); diff --git a/kernel/main.c b/kernel/main.c index bc20398bb..5e873c514 100644 --- a/kernel/main.c +++ b/kernel/main.c @@ -311,8 +311,9 @@ int smp_main(void) print_status(); /* wait for the other cpus */ - while(atomic_int32_read(&cpu_online) < atomic_int32_read(&possible_cpus)) + while(atomic_int32_read(&cpu_online) < atomic_int32_read(&possible_cpus)) { PAUSE; + } while(1) { check_workqueues(); @@ -387,7 +388,7 @@ static int initd(void* arg) // initialize network err = init_netifs(); - if(is_uhyve()) { + if (is_uhyve()) { int i; uhyve_cmdsize_t uhyve_cmdsize; uhyve_cmdval_t uhyve_cmdval;