CVSROOT:        /cvs
Module name:    src
Changes by:     m...@cvs.openbsd.org    2021/10/14 02:46:01

Modified files:
        sys/kern       : sys_generic.c 

Log message:
Implement select(2) and 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().  Those
events are lazily deleted to reduce the overhard of freeing/allocating
them when select(2) is called in a loop.

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 select(2) and pselect(2) will now query the
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 a next step.

The various *_poll() routines could be removed as soon as poll(2) and
ppoll(2) are also converted.

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

ok claudio@, bluhm@

Reply via email to