diff options
author | Ioan-Adrian Ratiu <adi@adirat.com> | 2017-01-04 23:37:47 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-01-05 07:35:17 +0100 |
commit | 13a6c8328e6056932dc680e447d4c5e8ad9add17 (patch) | |
tree | 1678baeaa0a21ef8ecc188c84533276165fb82bd /sound/usb/endpoint.c | |
parent | ALSA: usb-audio: Fix irq/process data synchronization (diff) | |
download | linux-13a6c8328e6056932dc680e447d4c5e8ad9add17.tar.xz linux-13a6c8328e6056932dc680e447d4c5e8ad9add17.zip |
ALSA: usb-audio: test EP_FLAG_RUNNING at urb completion
Testing EP_FLAG_RUNNING in snd_complete_urb() before running the completion
logic allows us to save a few cpu cycles by returning early, skipping the
pending urb in case the stream was stopped; the stop logic handles the urb
and sets the completion callbacks to NULL.
Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/endpoint.c')
-rw-r--r-- | sound/usb/endpoint.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index 2f0ea70a998c..c90607ebe155 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -384,6 +384,9 @@ static void snd_complete_urb(struct urb *urb) if (unlikely(atomic_read(&ep->chip->shutdown))) goto exit_clear; + if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags))) + goto exit_clear; + if (usb_pipeout(ep->pipe)) { retire_outbound_urb(ep, ctx); /* can be stopped during retire callback */ |