qio: Add callbacks for unblocking queues
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 3 Aug 2015 16:03:00 +0000 (12:03 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
commitcc7a1a60bd9eeb408ba9c39151641a76f7cebaec
treefe58db51d21a6a69f5179953dbe90c788191bce4
parente5b13cdca4b8985e9ead7ad33c1f2e5cd47d9867
qio: Add callbacks for unblocking queues

When queues want to wake up any waiters is an edge-triggered event.  If
we would have done a rendez, then presumably userspace could be
interested in that event.

This commit adds callbacks triggered by these events, such that other
systems (e.g. #I) can support FD taps.  The callback takes an FD tap
filter, and uses that space of flags to express its events.

I considered hooking the taps directly into the queues, instead of in
the conversation.  Two things make that difficult:
- Not all queues are equal.  Conversations have two queues: send (wq)
  and receive (rq).  #I's FD taps only care about when the read queue
becomes readable, not when it becomes writable.  Likewise with the write
queue.
- Putting the tap in two places in the qio code is more complicated than
  keeping it in one place in the conversation - especially when we'd
like to support modifying taps in the future.
kern/include/ns.h
kern/src/ns/qio.c