ev_q option VCORE_MUST_RUN (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 17 Sep 2011 00:59:44 +0000 (17:59 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:07 +0000 (17:36 -0700)
commite9e0888e4fbe52aa12f2f71aa758709f65efa367
tree86a650fccc4944ef59d0b9f28e86ab41ce43ad8f
parent9fee26182e7266a35891f96006b8bdb8b6f67807
ev_q option VCORE_MUST_RUN (XCC)

Some event queues need to have their alerts sent to a vcore that will
definitely run (as of the time alert_vcore() was called), and not just a
can_rcv_msg.  The one (and probably only) example of this is the
preempt_msg ev_q.  Simply put, you can't send the preempt message about
a given vcore to that vcore, which could happen without this option.

Note that the vcore that receives this message can be yielding or
getting preempted or whatever - so long as it wasn't the vcore that
was preempted (and thus generated the preempt message) (unless it will
be forced to run in the ultimate_fallback area).

Even if you want to just poll your preeempt ev_q (and not want an
INDIR), you still need the MUST_RUN flag to make sure the IPI gets
there.  If you don't want an IPI either, you'll have issues with locking
in uthread context and with preemption response latency.
kern/include/ros/event.h
kern/src/event.c