diff options
Diffstat (limited to 'sound/core')
| -rw-r--r-- | sound/core/pcm_native.c | 7 | ||||
| -rw-r--r-- | sound/core/timer.c | 5 | 
2 files changed, 10 insertions, 2 deletions
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c index 87288762403..20b5982c996 100644 --- a/sound/core/pcm_native.c +++ b/sound/core/pcm_native.c @@ -36,6 +36,9 @@  #include <sound/timer.h>  #include <sound/minors.h>  #include <asm/io.h> +#if defined(CONFIG_MIPS) && defined(CONFIG_DMA_NONCOHERENT) +#include <dma-coherence.h> +#endif  /*   *  Compatibility @@ -3184,6 +3187,10 @@ static int snd_pcm_default_mmap(struct snd_pcm_substream *substream,  					 substream->runtime->dma_area,  					 substream->runtime->dma_addr,  					 area->vm_end - area->vm_start); +#elif defined(CONFIG_MIPS) && defined(CONFIG_DMA_NONCOHERENT) +	if (substream->dma_buffer.dev.type == SNDRV_DMA_TYPE_DEV && +	    !plat_device_is_coherent(substream->dma_buffer.dev.dev)) +		area->vm_page_prot = pgprot_noncached(area->vm_page_prot);  #endif /* ARCH_HAS_DMA_MMAP_COHERENT */  	/* mmap with fault handler */  	area->vm_ops = &snd_pcm_vm_ops_data_fault; diff --git a/sound/core/timer.c b/sound/core/timer.c index 73943651cae..5040c7b862f 100644 --- a/sound/core/timer.c +++ b/sound/core/timer.c @@ -1160,6 +1160,7 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,  {  	struct snd_timer_user *tu = timeri->callback_data;  	struct snd_timer_tread r1; +	unsigned long flags;  	if (event >= SNDRV_TIMER_EVENT_START &&  	    event <= SNDRV_TIMER_EVENT_PAUSE) @@ -1169,9 +1170,9 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,  	r1.event = event;  	r1.tstamp = *tstamp;  	r1.val = resolution; -	spin_lock(&tu->qlock); +	spin_lock_irqsave(&tu->qlock, flags);  	snd_timer_user_append_to_tqueue(tu, &r1); -	spin_unlock(&tu->qlock); +	spin_unlock_irqrestore(&tu->qlock, flags);  	kill_fasync(&tu->fasync, SIGIO, POLL_IN);  	wake_up(&tu->qchange_sleep);  }  |