Uthread can handle clear_notif_pending
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 23 Nov 2011 01:31:00 +0000 (17:31 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 15 Dec 2011 22:48:41 +0000 (14:48 -0800)
commit4f356e2349565eae870ca8615aaeeac539de2b1b
tree0a9fa9ab16616c6faccfe79197372947815d2173
parentef8904bab5829da812881a61b319bc2f82ce6d6a
Uthread can handle clear_notif_pending

clear_notif_pending() might not return, and it might return and clear
your current_uthread.  The latter can happen if you service a preemption
of another vcore that was stuck in vc context and fail to change_to that
vcore (which happens if that vcore starts up for any reason).

So if we lose our current_uthread, we just restart the vcore.  We're
also careful to make sure we don't lose a *uthread if clear_notif
doesn't return.

In the process, I also made a little helper, since there's a lot of
common code between run_cur_uth and run_uth.  __run_cur_uth_raw() is
still a bit weird and different: enough so that I'll leave it alone.
user/parlib/uthread.c
user/parlib/vcore.c