Currently, when two MIDI trigger callbacks are called immediately, transactions for the second MIDI messages are 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 --- sound/firewire/lib.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/sound/firewire/lib.c b/sound/firewire/lib.c index ddc3e88..3e9afd7 100644 --- a/sound/firewire/lib.c +++ b/sound/firewire/lib.c @@ -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)