Stop using KERNEL_LOCK to protect the per process kqueue list
authorclaudio <claudio@openbsd.org>
Tue, 6 Aug 2024 08:44:54 +0000 (08:44 +0000)
committerclaudio <claudio@openbsd.org>
Tue, 6 Aug 2024 08:44:54 +0000 (08:44 +0000)
commit0747e3d20bf138958765ed50a0a2854bbcb6704f
tree1fcdd0dc9fd3584c4af2b120ad57c7ea73394bcc
parentc812a2a431dcdad903e54d5c35bc58020575bfe1
Stop using KERNEL_LOCK to protect the per process kqueue list

Instead of the KERNEL_LOCK use the ps_mtx for most operations.
If the ps_klist is modified an additional global rwlock (kqueue_ps_list_lock)
is required. This includes the knotes with NOTE_FORK and NOTE_EXIT since
in either cases a ps_klist is changed. In the NOTE_FORK | NOTE_TRACK case
the call to kqueue_register() can sleep this is why a global rwlock is used.

Adjust the reaper() to call knote_processexit() without KERNEL_LOCK.
Double lock idea from visa@
OK mvs@
sys/kern/kern_event.c
sys/kern/kern_exec.c
sys/kern/kern_exit.c
sys/kern/kern_fork.c
sys/kern/kern_sig.c
sys/sys/event.h
sys/sys/proc.h