Push kernel lock down to dopselect() and doppoll() and unlock select(2),
authormvs <mvs@openbsd.org>
Mon, 13 Feb 2023 09:42:45 +0000 (09:42 +0000)
committermvs <mvs@openbsd.org>
Mon, 13 Feb 2023 09:42:45 +0000 (09:42 +0000)
commit396bdaaeb9e3e52cfc65b782af441fd1f93091a2
tree88c60317c34250915c1c510b1931bf4b5546ed19
parentc2cf2d55146fd2b0091d43e7ea230b025320749b
Push kernel lock down to dopselect() and doppoll() and unlock select(2),
pselect(2), poll(2) and ppoll(2).

select(2) and poll(2) are just wrappers for kqueue(2)/kevent(2) which
are already unlocked. They do temporary event queue initialization and
scan for this call only. The difference is in local data conversion
between select(2)/poll(2) and kevent(2) formats.

To separate possible signal related fallout, dosigsuspend() left under
the kernel lock. It will be taken only if optional signal mask arg
passed to pselect(2) or ppoll(2). dosigsuspend() will be unlocked later
with sigsuspend(2).

Discussed with claudio@ and kettenis@.

ok claudio@
sys/kern/sys_generic.c
sys/kern/syscalls.master