ALSA: firewire-lib: schedule work again when MIDI substream has rest of MIDI messages
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 8 Oct 2015 23:10:27 +0000 (08:10 +0900)
committerTakashi Iwai <tiwai@suse.de>
Fri, 9 Oct 2015 07:57:05 +0000 (09:57 +0200)
Currently, when two MIDI trigger callbacks can be called immediately,
transactions for the second MIDI messages can be postpone till next trigger
callback. This is not good for real-time message transmission.

This commit schedules work again at response handling callback if the
MIDI substream still includes untransferred MIDI messages.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/lib.c

index ddc3e88..3e9afd7 100644 (file)
@@ -78,6 +78,9 @@ static void async_midi_port_callback(struct fw_card *card, int rcode,
                snd_rawmidi_transmit_ack(substream, port->consume_bytes);
 
        port->idling = true;
+
+       if (!snd_rawmidi_transmit_empty(substream))
+               schedule_work(&port->work);
 }
 
 static void midi_port_work(struct work_struct *work)