Comment 20 for bug 1095315

Revision history for this message
David Henningsson (diwic) wrote : Re: [alsa-devel] [RFC PATCH] ALSA: usb - fix race in creation of M-Audio Fast track pro driver

On 01/04/2013 05:02 PM, David Henningsson wrote:
> A patch in the 3.2 kernel caused regression with hotplugging the
> M-Audio Fast track pro, or sound after suspend. I don't have the
> device so I haven't done a full analysis, but it seems userspace
> (both udev and pulseaudio) got confused when a card was created,
> immediately destroyed, and then created again.

Since there were no counter proposal patches and the below code actually
fixes a problem for users, would you mind committing it?

>
> However, at least one person in the bug report (martin djfun)
> reports that this patch resolves the issue for him. It also leaves
> a message in the log:
> "snd-usb-audio: probe of 1-1.1:1.1 failed with error -5" which is
> a bit misleading. It is better than non-working audio, but maybe
> there's a more elegant solution?
>
> BugLink: https://bugs.launchpad.net/bugs/1095315
> Signed-off-by: David Henningsson <email address hidden>
> ---
> sound/usb/quirks.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> ...oh, and if you end up taking this patch as it is, you should probably
> add cc to stable (3.2+).
>
> diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
> index acc12f0..e71fc8b 100644
> --- a/sound/usb/quirks.c
> +++ b/sound/usb/quirks.c
> @@ -387,11 +387,13 @@ static int snd_usb_fasttrackpro_boot_quirk(struct usb_device *dev)
> * rules
> */
> err = usb_driver_set_configuration(dev, 2);
> - if (err < 0) {
> + if (err < 0)
> snd_printdd("error usb_driver_set_configuration: %d\n",
> err);
> - return -ENODEV;
> - }
> + /* Always return an error, so that we stop creating a device
> + that will just be destroyed and recreated with a new
> + configuration */
> + return -ENODEV;
> } else
> snd_printk(KERN_INFO "usb-audio: Fast Track Pro config OK\n");
>
>

--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic