Minor changes to proc_restartcore()
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 8 Mar 2011 03:01:48 +0000 (19:01 -0800)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:00 +0000 (17:36 -0700)
kern/arch/i686/trap.c
kern/src/process.c

index 2b6aaca..c94ab96 100644 (file)
@@ -506,6 +506,9 @@ void __kernel_message(struct trapframe *tf)
                        msg_cp.pc(tf, msg_cp.srcid, msg_cp.arg0, msg_cp.arg1, msg_cp.arg2);
                }
        }
+       /* TODO: should this proc_restartcore, like the irq/trap paths?  Or at least
+        * take some things from __proc_startcore() (since we don't want to re-run
+        * kmsgs). */
 }
 
 /* Runs any outstanding routine kernel messages from within the kernel.  Will
index 4c0bc46..e12da5c 100644 (file)
@@ -598,7 +598,9 @@ void proc_restartcore(void)
         * (and we weren't interrupting another one to finish).  In which case, we
         * should just smp_idle() */
        if (!pcpui->cur_tf) {
-               assert(!current);       /* might be wrong, but i want to know if it is */
+               /* It is possible for us to have current loaded if a kthread restarted
+                * after the process yielded the core. */
+               abandon_core();
                smp_idle();
        }
        /* TODO: this is where we can decide to smp_idle() if there is no cur_tf */