Defer selwakeup() calls to a softintr
authorratchov <ratchov@openbsd.org>
Sat, 30 Oct 2021 12:26:26 +0000 (12:26 +0000)
committerratchov <ratchov@openbsd.org>
Sat, 30 Oct 2021 12:26:26 +0000 (12:26 +0000)
commit02e0ccc46e145a7e98782b74e99ea37ba6d80a98
tree3bcb45b5a80d3ee424c77d9af12e37a0e026399d
parent671067d099413194809142535588bc3c91def9c2
Defer selwakeup() calls to a softintr

selwakeup() needs to be protected by KERNEL_LOCK, but we're not
allowed to grab KERNEL_LOCK on interrupt context because midi runs at
IPL_AUDIO with the audio_lock held. Furthermore, doing so is a locking
order bug: syscall code-path grabs KERNEL_LOCK first while interrupt
code-path does the opposite when calling selwakeup().

ok visa
sys/dev/midi.c
sys/dev/midivar.h