Fixes event FALLBACK code
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 16 Sep 2011 00:10:03 +0000 (17:10 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:07 +0000 (17:36 -0700)
commitcf0371a1f9cf06e7f4af1a0f06a1f3919841473c
treee373d1f4e3667ca0f53414bff4bb08cd3eaf3a93
parent271fe4d6c9ff35c97146f5d335b4f41ee284e8f1
Fixes event FALLBACK code

Previously, we had situations where the kernel couldn't find a core that
can_rcv_msg, and the code couldn't handle going into the PROC_WAITING
state.  It could handle going down to one core, but it couldn't handle
process state.

This new version of alert_core() can handle single cores yielding, the
entire process yielding, bulk preemption, single core preemption, and
anything else I can think of.  It does this without locking in the
common case, which would be a scalability problem.  Arguably, when we
need to FALLBACK, all events will pick the same online vcore (first on
the list), and hammer the same VCPD UCQ, but it won't be while holding a
massive lock.

Note that we could have moved __proc_wakeup() from alert_vcore() to
send_event().  It won't hurt to do that, other than to give you the fall
sense of security that a process will always be able to yield without
missing a wake up.  You need to want an INDIR/IPI and want FALLBACK
(which is rapidly becoming the default) to be guaranteed to wake up.

There are a couple other issues that need to be sorted before this can
be used for preemption messages.  Stay tuned!
Documentation/async_events.txt
kern/src/event.c