]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
ALSA: snd_usb_caiaq: track submitted output urbs
authorDaniel Mack <zonque@gmail.com>
Sun, 14 Aug 2011 09:31:16 +0000 (11:31 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 29 Aug 2011 21:32:58 +0000 (14:32 -0700)
commitf699ee1f5af1aab237e573ee0b169d54fe24ab5d
treedba193dbf8c7acb5930d4400b64923e6364573fa
parent505f44dd825d79078942101e8da911b90bc39057
ALSA: snd_usb_caiaq: track submitted output urbs

commit da6094ea7d3c2295473d8f5134279307255d6ebf upstream.

The snd_usb_caiaq driver currently assumes that output urbs are serviced
in time and doesn't track when and whether they are given back by the
USB core. That usually works fine, but due to temporary limitations of
the XHCI stack, we faced that urbs were submitted more than once with
this approach.

As it's no good practice to fire and forget urbs anyway, this patch
introduces a proper bit mask to track which requests have been submitted
and given back.

That alone however doesn't make the driver work in case the host
controller is broken and doesn't give back urbs at all, and the output
stream will stop once all pre-allocated output urbs are consumed. But
it does prevent crashes of the controller stack in such cases.

See http://bugzilla.kernel.org/show_bug.cgi?id=40702 for more details.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Reported-and-tested-by: Matej Laitl <matej@laitl.cz>
Cc: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
sound/usb/caiaq/audio.c
sound/usb/caiaq/device.h