[alsa-devel] [PATCH] wss_lib: remove open_mutex
Takashi Iwai
tiwai at suse.de
Sun Aug 3 10:16:07 CEST 2008
At Sat, 2 Aug 2008 07:48:46 +0200,
Krzysztof Helt wrote:
>
> From: Krzysztof Helt <krzysztof.h1 at wp.pl>
>
> Open and close operations are mutexed in higher layer
> so remove open_mutex inside the driver.
I see snd_wss_open() is called also from the timer API. This isn't
protected for PCM streams, at least.
thanks,
Takashi
>
> Signed-off-by: Krzysztof Helt <krzysztof.h1 at wp.pl>
> ---
>
> diff -urp linux-alsa/include/sound/wss.h linux-mm/include/sound/wss.h
> --- linux-alsa/include/sound/wss.h 2008-07-31 20:39:54.000000000 +0200
> +++ linux-mm/include/sound/wss.h 2008-08-02 07:42:41.256261329 +0200
> @@ -110,7 +110,6 @@ struct snd_wss {
>
> spinlock_t reg_lock;
> struct mutex mce_mutex;
> - struct mutex open_mutex;
>
> int (*rate_constraint) (struct snd_pcm_runtime *runtime);
> void (*set_playback_format) (struct snd_wss *chip,
> diff -urp linux-alsa/sound/isa/wss/wss_lib.c linux-mm/sound/isa/wss/wss_lib.c
> --- linux-alsa/sound/isa/wss/wss_lib.c 2008-07-31 20:39:59.000000000 +0200
> +++ linux-mm/sound/isa/wss/wss_lib.c 2008-08-02 07:42:41.352275508 +0200
> @@ -837,15 +837,11 @@ static int snd_wss_open(struct snd_wss *
> {
> unsigned long flags;
>
> - mutex_lock(&chip->open_mutex);
> if ((chip->mode & mode) ||
> - ((chip->mode & WSS_MODE_OPEN) && chip->single_dma)) {
> - mutex_unlock(&chip->open_mutex);
> + ((chip->mode & WSS_MODE_OPEN) && chip->single_dma))
> return -EAGAIN;
> - }
> if (chip->mode & WSS_MODE_OPEN) {
> chip->mode |= mode;
> - mutex_unlock(&chip->open_mutex);
> return 0;
> }
> /* ok. now enable and ack CODEC IRQ */
> @@ -871,7 +867,6 @@ static int snd_wss_open(struct snd_wss *
> spin_unlock_irqrestore(&chip->reg_lock, flags);
>
> chip->mode = mode;
> - mutex_unlock(&chip->open_mutex);
> return 0;
> }
>
> @@ -879,10 +874,8 @@ static void snd_wss_close(struct snd_wss
> {
> unsigned long flags;
>
> - mutex_lock(&chip->open_mutex);
> chip->mode &= ~mode;
> if (chip->mode & WSS_MODE_OPEN) {
> - mutex_unlock(&chip->open_mutex);
> return;
> }
> snd_wss_calibrate_mute(chip, 1);
> @@ -922,7 +915,6 @@ static void snd_wss_close(struct snd_wss
> snd_wss_calibrate_mute(chip, 0);
>
> chip->mode = 0;
> - mutex_unlock(&chip->open_mutex);
> }
>
> /*
> @@ -1712,7 +1704,6 @@ static int snd_wss_new(struct snd_card *
>
> spin_lock_init(&chip->reg_lock);
> mutex_init(&chip->mce_mutex);
> - mutex_init(&chip->open_mutex);
> chip->card = card;
> chip->rate_constraint = snd_wss_xrate;
> chip->set_playback_format = snd_wss_playback_format;
> @@ -1868,7 +1859,6 @@ int snd_wss_pcm(struct snd_wss *chip, in
>
> spin_lock_init(&chip->reg_lock);
> mutex_init(&chip->mce_mutex);
> - mutex_init(&chip->open_mutex);
>
> snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_wss_playback_ops);
> snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_wss_capture_ops);
>
> ----------------------------------------------------------------------
> Najciekawsze miejsca w Polsce i na swiecie!
> Zobacz >>> http://link.interia.pl/f1e60
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
More information about the Alsa-devel
mailing list