Fixes bug with run_current_uthread()
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 20 Dec 2011 10:02:30 +0000 (02:02 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 20 Dec 2011 10:02:30 +0000 (02:02 -0800)
commit4602599be9d0c8bd4472fa67dc77e29a6df4e4e6
treea0bbde63483716ae74523cb856212a3a7d035ca4
parentbe4ddb03c39bd4e8b072dbc28ef630afb2a383e5
Fixes bug with run_current_uthread()

The code had been assuming that if you had a current_uthread, that it
was RUNNING and its TF was loaded in the vcpd notif_tf.  That's not
always the case.

Previously, it wasn't the case for brief moments between setting current
and popping that TF.  During one of those moments, you could handle a
message that made you start over at vcore entry (if there was a
CHECK_MSGS for instance, or a handle_vcpd_mbox()).  When you restarted
in vcore context, you could get to a run_current_uthread() that assumed
it was running out of the notif_tf.

Anyway, now run_current_uthread() and run_uthread() are two wrappers
around the real __run_current_uthread(), which does the heavy lifting,
especially managing the uthread TF and related flags.  The wrappers are
mostly for setting cur_uth and debugging( which is the main reason I
have those uthread states and whatnot).
user/parlib/include/i686/vcore.h
user/parlib/uthread.c