Properly finalize contexts when reflecting traps
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 6 Jan 2016 17:18:31 +0000 (12:18 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 14 Jan 2016 21:04:46 +0000 (16:04 -0500)
I missed this when doing the partial context work.  We were still doing
a manual copy of the context, which wasn't also calling
arch_finalize_ctx().  This means the core was in a potentially unstable
state.

I noticed this because a page faulting SCP was rebooting my VM.  I'm
surprised it didn't pop up earlier, since all it took was a null pointer
dereference.  Might be something weird with my VM.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/trap.c

index 4c156af..56e5c0f 100644 (file)
@@ -66,7 +66,7 @@ void reflect_unhandled_trap(unsigned int trap_nr, unsigned int err,
        __arch_reflect_trap_hwtf(hw_tf, trap_nr, err, aux);
        /* the guts of a __notify */
        vcpd->notif_disabled = TRUE;
-       vcpd->uthread_ctx = *pcpui->cur_ctx;
+       copy_current_ctx_to(&vcpd->uthread_ctx);
        memset(pcpui->cur_ctx, 0, sizeof(struct user_context));
        proc_init_ctx(pcpui->cur_ctx, vcoreid, vcpd->vcore_entry,
                      vcpd->vcore_stack, vcpd->vcore_tls_desc);