On Wed, Jan 05, 2022 at 09:47:17PM +0100, Stefan Sauer wrote:
If a driver does not supply a drain operation for outputs, a default code path will execute msleep(50). Especially for a virtual midi device this severely limmits the throughput.
This implementation for the virtual midi driver simply flushes the output workqueue.
Signed-off-by: Stefan Sauer st.kost@gmail.com
Hi, Stefan,
Thanks for the patch!
However it seems you forgot to Cc: Takashi Iwai.
Cc:ing him now so he takes notice.
Thank you, Geraldo Nascimento
sound/core/seq/seq_virmidi.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/sound/core/seq/seq_virmidi.c b/sound/core/seq/seq_virmidi.c index 4abc38c70cae..f5cae49500c8 100644 --- a/sound/core/seq/seq_virmidi.c +++ b/sound/core/seq/seq_virmidi.c @@ -262,6 +262,16 @@ static int snd_virmidi_output_close(struct snd_rawmidi_substream *substream) return 0; }
+/*
- drain output work queue
- */
+static void snd_virmidi_output_drain(struct snd_rawmidi_substream *substream) +{
- struct snd_virmidi *vmidi = substream->runtime->private_data;
- flush_work(&vmidi->output_work);
+}
/*
- subscribe callback - allow output to rawmidi device
*/ @@ -336,6 +346,7 @@ static const struct snd_rawmidi_ops snd_virmidi_output_ops = { .open = snd_virmidi_output_open, .close = snd_virmidi_output_close, .trigger = snd_virmidi_output_trigger,
- .drain = snd_virmidi_output_drain,
};
/*
2.34.1