[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