ALSA: usb-audio: Avoid killing in-flight URBs during draining
authorTakashi Iwai <tiwai@suse.de>
Wed, 29 Sep 2021 08:08:44 +0000 (10:08 +0200)
committerTakashi Iwai <tiwai@suse.de>
Thu, 30 Sep 2021 11:55:26 +0000 (13:55 +0200)
commit813a17cab9b708bbb1e0db8902e19857b57196ec
treef91282e2fbb445a1d96d873bce133dd75b8043a1
parentd5f871f89e21bb71827ea57bd484eedea85839a0
ALSA: usb-audio: Avoid killing in-flight URBs during draining

While draining a stream, ALSA PCM core stops the stream by issuing
snd_pcm_stop() after all data has been sent out.  And, at PCM trigger
stop, currently USB-audio driver kills the in-flight URBs explicitly,
then at sync-stop ops, sync with the finish of all remaining URBs.
This might result in a drop of the drained samples as most of
USB-audio devices / hosts allow relatively long in-flight samples (as
a sort of FIFO).

For avoiding the trimming, this patch changes the stream-stop behavior
during PCM draining state.  Under that condition, the pending URBs
won't be killed.  The leftover in-flight URBs are caught by the
sync-stop operation that shall be performed after the trigger-stop
operation.

Link: https://lore.kernel.org/r/20210929080844.11583-10-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/endpoint.c
sound/usb/endpoint.h
sound/usb/pcm.c