Implement poll(2), select(2), ppoll(2) & pselect(2) on top of kqueue.
authormpi <mpi@openbsd.org>
Sun, 24 Oct 2021 11:23:22 +0000 (11:23 +0000)
committermpi <mpi@openbsd.org>
Sun, 24 Oct 2021 11:23:22 +0000 (11:23 +0000)
commitfdd2406a066a41ff8a28f7c2229907702e86d1f0
treeaeaf7f067a347984e3078158c56fdaffa43a1ced
parent7f9adf34a4095d89cdfc3ba67fcb26fe30ad41ae
Implement poll(2), select(2), ppoll(2) & pselect(2) on top of kqueue.

The given set of fds are converted to equivalent kevents using EV_SET(2)
and passed to the scanning internals of kevent(2): kqueue_scan().

ktrace(1) will now output the converted kevents on top of the usuals set
bits to be able to find possible error in the convertion.

This switch implies that poll(2) and select(2) will now query underlying
kqfilters instead of the *_poll() routines.  An increase in latency is
visible, especially with UDP sockets and NET_LOCK()-contended subsystems
and will be addressed in next steps.

Based on similar work done on MacOS and DragonFlyBSD with inputs from
visa@, millert@, anton@, cheloha@, thanks!

Tested by many, thanks!

ok claudio@, bluhm@
sys/kern/sys_generic.c
sys/miscfs/fifofs/fifo_vnops.c