Pthread syscall ev_qs no longer use VCPD mboxes
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 29 Jul 2011 23:47:02 +0000 (16:47 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:05 +0000 (17:36 -0700)
commitfcdf2ceb4cdd4bf3e1547af15fef501ba847bef9
tree7c47d1570a9d5798275f673c98766d1e7df763a9
parent32b875dec5c0dc1dbf42d3a03a41099a90e217e1
Pthread syscall ev_qs no longer use VCPD mboxes

2LSs (and anyone) should not use the VCPD ev_mboxes.  Message delivery
to the VCPD should be for messages meant to go to that specific vcore,
about that vcore's business.

One such bit of business is the indirection event EV_EVENT, telling it
the reason for an IPI is to check a particular event queue (such as the
syscall queue).

You want to decouple these so that different vcores can handle
unblocking threads that slept on a separate vcore, which is necessary if
you want a vcore to yield when it has no work to do but when there are
outstanding syscalls/uthreads.  If we used the VCPD, then another core
would have to process messages of another core's VCPD, which would
include messages that were not meant for the running core - such as
"preempt pending".

Also note that a 2LS could easily have one ev_q for all blocking
syscalls, or even multiple ev_qs (so you can specify IPI targets) but
with one global ev_mbox that all the ev_qs point to (and contend on).
This assumes there are no bugs (which there are).
user/pthread/pthread.c
user/pthread/pthread.h