From 20fadb56741349ec7fba305f20d9cf6a29ebaa9c Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Thu, 17 Apr 2008 12:52:02 +0200 Subject: [PATCH] --- yaml --- r: 92229 b: refs/heads/master c: f18638dcf0c481eca2430206ebcdc7295aec8623 h: refs/heads/master i: 92227: 0e7dae5dbeccab4a5e859571489a26297a50be78 v: v3 --- [refs] | 2 +- trunk/sound/core/init.c | 26 +++++++++----------------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/[refs] b/[refs] index ab2635c17d9d..491f507e7a14 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 73d38b13ffb105ab633bd91969c8d218b2de38d4 +refs/heads/master: f18638dcf0c481eca2430206ebcdc7295aec8623 diff --git a/trunk/sound/core/init.c b/trunk/sound/core/init.c index 07acac77ea45..ac0573416130 100644 --- a/trunk/sound/core/init.c +++ b/trunk/sound/core/init.c @@ -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); @@ -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 */ @@ -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; } @@ -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; @@ -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;