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@xxxxxxxxx> 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 >