Remove the assertion that `curproc' must be SONPROC if found on the sleepqueue.
authormpi <mpi@openbsd.org>
Thu, 7 Oct 2021 08:51:00 +0000 (08:51 +0000)
committermpi <mpi@openbsd.org>
Thu, 7 Oct 2021 08:51:00 +0000 (08:51 +0000)
commitc82429e43faf04467907df00b7c8c3467d5bd954
tree75f6556fdcff8f00ba0eac1471b741f8d0c9d879
parent5b35d1ba3d9b961070be5ef93e5755dfd12b0ffd
Remove the assertion that `curproc' must be SONPROC if found on the sleepqueue.

If `curproc' finds itself on the sleepqueue inside wakeup(9) it is obviously
being executed.  Such wakeup(9) currently happens inside the critical section
of the SCHED_LOCK(), generally before cpu_switchto().  However `p_stat' is
changed many operations before cpu_switchto() and the KASSERT() isn't helpful
at catching real bugs.

One example of this is a call to rwsleep() that calls wakeup() via rw_exit()
before sleep_finish(), contented futex(2) triggers that a lot.

Another example are dt(4)'s scheduler TRACEPOINT() in setrunqueue() and
mi_switch().

Suggested by and ok kettenis@
sys/kern/kern_synch.c