Fixes up syscall_blockon functions (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 13 Jul 2015 18:19:41 +0000 (14:19 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jul 2015 20:07:52 +0000 (16:07 -0400)
commit73135fc796b594a9b801c5cf726f301f17702055
tree930170caa9d432e65aae645cbaf59a1bc2f1d853
parent459c2b3d1afbbaa57935b5513c1cd9fbc019860d
Fixes up syscall_blockon functions (XCC)

Our old blockon functions had three problems:

- MCP blockon was assuming MCP == 2LS.

- SCPs in VC context that blocked would clear notif disabled!  The
  danger here is that the vcore's stack would get clobbered.  To have
this happen, you'd need to have an SCP that dropped into vcore context
and issued a blocking syscall, and then receive a notif.

- Excessive SCP notifies, due to using the early blockon in glibc.  For
  instance, any SCP that had a blocking syscall would issue the call, a
yield, and then a self-notify.  The notify was due to us manually
disabling/enabling notifs.

This commit fixes the old early blockon (was scp_blockon) and only uses
it for early SCPs (pre-vcore context).  It updates the uthread blockon
(was mcp_blockon) to support *all* SCPs, with or without 2LSs, and MCPs.

Note that the early blockon is basically like vcore context, and it is
used for vcore contexts that issued blocking syscalls for SCPs in any
state (2LS or not).  Likewise, before parlib initializes, the kernel
knows the process can't handle vcore context, and handles it
accordingly.

Rebuild glibc.
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/Versions
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/sys/syscall.h
tools/compilers/gcc-glibc/glibc-2.19-akaros/sysdeps/akaros/syscall.c
user/parlib/thread0_sched.c
user/parlib/uthread.c