Allow all event queue functionality for SCPs (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 4 Aug 2015 18:00:32 +0000 (14:00 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
commita4ce45aed688a4cfa046aff4756ab021d7c2288c
tree8ea3425118cba0288aeafde75a65e9ecbbfefb97
parent3e51313c09e4cd50c9dbd45dd07941f37804f71d
Allow all event queue functionality for SCPs (XCC)

Previously, SCPs event delivery would be short-circuited.  Regardless of
where you wanted the event to go, we'd just spam it to vcore 0.  This
would bypass whatever ev_q you set up, including its mailbox and custom
handlers.  It worked if all you do is use a UCQ.

With this change, SCPs have full access to the ev_q functionality,
including INDIRs, spam requests, and wakeups.  Since SCPs are no longer
short-circuited, they need to use EVENT_WAKEUP to ensure they wake up
and receive the message, if that is desired.

Spamming works, e.g. for indirs or public messages; the message goes to
the only vcore: VC 0.  It's unnecessary for the common case.  If you use
an INDIR and WAKEUP, you'll wake up and see the INDIR in VC 0 - no need
to spam.  But code that is used for both MCPs and SCPs can safely use
EVENT_SPAM_* without worry.

Rebuild everything. (make xcc-upgrade-from-scratch)
Documentation/async_events.txt
kern/src/event.c
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/syscall.c