[alsa-devel] USB Audio initialization race

David Henningsson david.henningsson at canonical.com
Tue Sep 17 00:21:27 CEST 2013

On 09/15/2013 10:49 AM, Clemens Ladisch wrote:
> Alan Stern wrote:
>> On Sat, 14 Sep 2013, Clemens Ladisch wrote:
>>> Alan Stern wrote:
>>>> So here's my question: If the sound driver recognizes that interface B
>>>> is connected with interface A when B is probed, why can't it recognize
>>>> this fact when A is probed?  It could claim B while A's probe is
>>>> running.  Then the sound card would be registered with the PCM
>>>> component already in place.
>>> The sound driver already does this.
>> It does?  Why does the comment preceding snd_usb_audio_probe() say:
>>  * thus we check the usb device pointer and creates the card instance
>>  * only at the first time.  the successive calls of this function will
>>  * append the pcm interface to the corresponding card.
> For UAC devices with correct descriptors, and for devices with multi-
> interface quirks, the driver claims all interfaces at once.  But it is
> still possible to have devices with zero or two audio control interfaces.

So, indeed there is some claiming being done in the usb audio driver, so
maybe this is not as much of a problem as I thought, but I think this
comment is wrong:

	/* we are allowed to call snd_card_register() many times */

...because it implies that it is okay to change the card and then call
snd_card_register again, and it is not, because userspace cannot handle
that correctly. It would be more appropriate to print a warning if this

Also, I wonder if it makes sense to also claim control interfaces
(USB_SUBCLASS_AUDIOCONTROL) in snd_usb_create_stream, in case the audio
streaming interface is probed before the control interface?

Anyway, I'm waiting for the (latest) bug reporter to return back to me
with "lsusb -v" and some more info, so I can verify if this could
actually be the problem or not.

David Henningsson, Canonical Ltd.

More information about the Alsa-devel mailing list