Commit 7560ee03 authored by Stefan Sauer's avatar Stefan Sauer Committed by Takashi Iwai

ALSA: seq: virmidi: Add a drain operation

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: default avatarStefan Sauer <st_kost@gmx.de>
Link: https://lore.kernel.org/r/20220106124145.17254-1-st_kost@gmx.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b81e9e5c
...@@ -262,6 +262,16 @@ static int snd_virmidi_output_close(struct snd_rawmidi_substream *substream) ...@@ -262,6 +262,16 @@ static int snd_virmidi_output_close(struct snd_rawmidi_substream *substream)
return 0; 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 * subscribe callback - allow output to rawmidi device
*/ */
...@@ -336,6 +346,7 @@ static const struct snd_rawmidi_ops snd_virmidi_output_ops = { ...@@ -336,6 +346,7 @@ static const struct snd_rawmidi_ops snd_virmidi_output_ops = {
.open = snd_virmidi_output_open, .open = snd_virmidi_output_open,
.close = snd_virmidi_output_close, .close = snd_virmidi_output_close,
.trigger = snd_virmidi_output_trigger, .trigger = snd_virmidi_output_trigger,
.drain = snd_virmidi_output_drain,
}; };
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment