• Mark Brown's avatar
    ALSA: Fix double locking of card list in snd_card_register() · 872c7820
    Mark Brown authored
    The introduction of snd_card_set_id() added a lock on the card list
    to the old choose_default_id() function when using it to implement
    the new API call. This lock is needed to allow us to walk the list
    and check to see if our new name is a duplicate. Unfortunately this
    causes a lockup when called from snd_card_register() (in cases
    where no ID is supplied for the card) since the card list is already
    locked there.
    
    Fix this fairly hideously by factoring out the implementation and
    using a flag to indicate if the lock should be held. A better fix
    would probably be to refactor snd_card_register() to move the
    _set_id() outside the locking region but I can't immediately see
    anything I can convince myself is safe.
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    872c7820
init.c 23.5 KB