Loading sound/core/init.c +9 −17 Original line number Diff line number Diff line Loading @@ -311,6 +311,9 @@ int snd_card_disconnect(struct snd_card *card) struct file *file; int err; if (!card) return -EINVAL; spin_lock(&card->files_lock); if (card->shutdown) { spin_unlock(&card->files_lock); Loading @@ -322,6 +325,7 @@ int snd_card_disconnect(struct snd_card *card) /* phase 1: disable fops (user space) operations for ALSA API */ mutex_lock(&snd_card_mutex); snd_cards[card->number] = NULL; snd_cards_lock &= ~(1 << card->number); mutex_unlock(&snd_card_mutex); /* phase 2: replace file->f_op with special dummy operations */ Loading Loading @@ -365,6 +369,9 @@ int snd_card_disconnect(struct snd_card *card) device_unregister(card->card_dev); card->card_dev = NULL; } #endif #ifdef CONFIG_PM wake_up(&card->power_sleep); #endif return 0; } Loading Loading @@ -411,25 +418,10 @@ static int snd_card_do_free(struct snd_card *card) return 0; } static int snd_card_free_prepare(struct snd_card *card) { if (card == NULL) return -EINVAL; (void) snd_card_disconnect(card); mutex_lock(&snd_card_mutex); snd_cards[card->number] = NULL; snd_cards_lock &= ~(1 << card->number); mutex_unlock(&snd_card_mutex); #ifdef CONFIG_PM wake_up(&card->power_sleep); #endif return 0; } int snd_card_free_when_closed(struct snd_card *card) { int free_now = 0; int ret = snd_card_free_prepare(card); int ret = snd_card_disconnect(card); if (ret) return ret; Loading @@ -449,7 +441,7 @@ EXPORT_SYMBOL(snd_card_free_when_closed); int snd_card_free(struct snd_card *card) { int ret = snd_card_free_prepare(card); int ret = snd_card_disconnect(card); if (ret) return ret; Loading Loading
sound/core/init.c +9 −17 Original line number Diff line number Diff line Loading @@ -311,6 +311,9 @@ int snd_card_disconnect(struct snd_card *card) struct file *file; int err; if (!card) return -EINVAL; spin_lock(&card->files_lock); if (card->shutdown) { spin_unlock(&card->files_lock); Loading @@ -322,6 +325,7 @@ int snd_card_disconnect(struct snd_card *card) /* phase 1: disable fops (user space) operations for ALSA API */ mutex_lock(&snd_card_mutex); snd_cards[card->number] = NULL; snd_cards_lock &= ~(1 << card->number); mutex_unlock(&snd_card_mutex); /* phase 2: replace file->f_op with special dummy operations */ Loading Loading @@ -365,6 +369,9 @@ int snd_card_disconnect(struct snd_card *card) device_unregister(card->card_dev); card->card_dev = NULL; } #endif #ifdef CONFIG_PM wake_up(&card->power_sleep); #endif return 0; } Loading Loading @@ -411,25 +418,10 @@ static int snd_card_do_free(struct snd_card *card) return 0; } static int snd_card_free_prepare(struct snd_card *card) { if (card == NULL) return -EINVAL; (void) snd_card_disconnect(card); mutex_lock(&snd_card_mutex); snd_cards[card->number] = NULL; snd_cards_lock &= ~(1 << card->number); mutex_unlock(&snd_card_mutex); #ifdef CONFIG_PM wake_up(&card->power_sleep); #endif return 0; } int snd_card_free_when_closed(struct snd_card *card) { int free_now = 0; int ret = snd_card_free_prepare(card); int ret = snd_card_disconnect(card); if (ret) return ret; Loading @@ -449,7 +441,7 @@ EXPORT_SYMBOL(snd_card_free_when_closed); int snd_card_free(struct snd_card *card) { int ret = snd_card_free_prepare(card); int ret = snd_card_disconnect(card); if (ret) return ret; Loading