On Sat, Oct 23, 2021 at 10:40:56AM +0100, Martin Pieuchot wrote:
> Diff below switches both poll(2) and select(2) to the kqueue-based
> implementation.
> 
> In addition it switches libevent(3) to use poll(2) by default for
> testing purposes.
> 
> I don't have any open bug left with this diff and I'm happily running
> GNOME with it.  So I'd be happy if you could try to break it and report
> back.
> 

Without the below diff (copied from audio(4) driver), kernel panics
upon the first MIDI input byte.

ok? suggestion for a better fix?

Index: midi.c
===================================================================
RCS file: /cvs/src/sys/dev/midi.c,v
retrieving revision 1.48
diff -u -p -r1.48 midi.c
--- midi.c      25 Dec 2020 12:59:52 -0000      1.48
+++ midi.c      29 Oct 2021 11:09:47 -0000
@@ -386,9 +386,11 @@ filt_midiread(struct knote *kn, long hin
        struct midi_softc *sc = (struct midi_softc *)kn->kn_hook;
        int retval;
 
-       mtx_enter(&audio_lock);
+       if ((hint & NOTE_SUBMIT) == 0)
+               mtx_enter(&audio_lock);
        retval = !MIDIBUF_ISEMPTY(&sc->inbuf);
-       mtx_leave(&audio_lock);
+       if ((hint & NOTE_SUBMIT) == 0)
+               mtx_leave(&audio_lock);
 
        return (retval);
 }
@@ -409,9 +411,11 @@ filt_midiwrite(struct knote *kn, long hi
        struct midi_softc *sc = (struct midi_softc *)kn->kn_hook;
        int                retval;
 
-       mtx_enter(&audio_lock);
+       if ((hint & NOTE_SUBMIT) == 0)
+               mtx_enter(&audio_lock);
        retval = !MIDIBUF_ISFULL(&sc->outbuf);
-       mtx_leave(&audio_lock);
+       if ((hint & NOTE_SUBMIT) == 0)
+               mtx_leave(&audio_lock);
 
        return (retval);
 }


Reply via email to