proc_yield() will return if you have an event
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 14 Sep 2011 01:49:11 +0000 (18:49 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:07 +0000 (17:36 -0700)
commitb17b48ff9273539ebe83109ae99b29a3d602840b
tree7fa0703133638853c391f857ff75afbfa1228b65
parent15b8efed5c65250a0021859afb2366868f0714d9
proc_yield() will return if you have an event

INDIRs will now set notif_pending, whose meaning changes slightly to be
"check your shit".  It's actually always been that, but that was before
we split up INDIRs and IPIs.  Without this, we could miss INDIRs while
trying to leave vcore context.

The intuition here is that processes should not leave vcore context
while notif_pending is set.  There are two ways out, one of which has
been sorted for a while: pop_ros_tf() (note the other uses of
clear_notif_pending()).  The other way is via proc_yield(), and the
kernel will help if we lose those races (racing with send_event()).

When yielding, if we lost the race we bail out.  This is a little
different than the usages of clear_notif_pending() in u/p/uthread.c.  In
those cases, we'll go ahead and run the thread, and the events don't get
a chance to change the mind of the 2LS.  (We can change this in the
future).  When vcore_yield() fails, we go back into the main 2LS loop
(in pthread.c).

Note some of this stuff will be more useful in future patches.  The
details of FALLBACK will change shortly.
Documentation/async_events.txt
kern/src/event.c
kern/src/process.c
user/parlib/include/vcore.h
user/parlib/vcore.c