Don't miss events for early SCPs (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 25 Jan 2017 19:04:46 +0000 (14:04 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 9 Feb 2017 17:30:33 +0000 (12:30 -0500)
commit35ac94714808bccdc524eb62e468b463605769b7
tree6743d6cafa8ffa3b57a3505ed658fa9d74ba39db
parent4a35be6e234e06f36747c9be35b5fe7d74eef581
Don't miss events for early SCPs (XCC)

On occasion (esp in qemu), processes would hang.  They'd appear to be
waiting, but would have no syscalls pending.

It turns out that they were missing the "syscall complete" event.  You'd
need a blocking syscall that completed at a specific time:
- after we returned to userspace
- after they check for completion and register for an event
- before they yield
In that case, the process would expect notif_pending to prevent the yield.
notif_pending on vcore 0 was expected to get set by the event.

However, we only asked for a wakeup.  Under the current rules, we need to
actually specify an action related to a vcore to get that vcore to have
notif_pending set.  e.g. INDIR, SPAM, IPI - those all relate to specific
vcores.

I might change all this in the future - specifically so that EVENT_WAKEUP
is considered a 'SPAM' for notif_pending, but not for an actual message.
It's a bit complicated.

Rebuild glibc at your leisure.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/syscall.c