Rendezvous: plan9 style sync with CVs
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 8 Oct 2013 00:56:40 +0000 (17:56 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 02:22:55 +0000 (18:22 -0800)
commit0c085d561ce72df5d850bd8b24846a56aa708f43
tree4769064c97b0a34b7f9ba8ba9302ecb5fe85231b
parent454683565c67f85c8fc5828022bddef3fd425a5e
Rendezvous: plan9 style sync with CVs

Rendezvous encapsulates a common CV pattern, albeit one where the
locking is grabbed internally.  If you need the lock grabbed externally
to protect some invariant, then you can probably just use CVs directly.

To reiterate: the rendez locks internally, and when we run the func
pointer to check cond, we hold the lock.  But that lock isn't meant to
protect against concurrent changes to the state - it protects the rv
(rendez variable, btw).

The timeout code is a bit trickier.  You can either use rendez as an
example, or use it directly.  If the locking style of rendez is
insufficient and you need a timer, we can consider exposing the rendez
lock, similar to cv_lock().  Assuming your timer code is fairly
identical.  We'll see.

The test handles a few basic cases, but nothing with actual IRQs.
kern/include/rendez.h [new file with mode: 0644]
kern/src/Kbuild
kern/src/rendez.c [new file with mode: 0644]
kern/src/testing.c