linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* ALSA: vmalloc buffers should use normal mmap
@ 2011-03-25  6:51 Benjamin Herrenschmidt
  2011-03-25 10:14 ` Takashi Iwai
  0 siblings, 1 reply; 2+ messages in thread
From: Benjamin Herrenschmidt @ 2011-03-25  6:51 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: linux-kernel, linuxppc-dev

It's a big no-no to use pgprot_noncached() when mmap'ing such buffers
into userspace since they are mapped cachable in kernel space.

This can cause all sort of interesting things ranging from to garbled
sound to lockups on various architectures. I've observed that usb-audio
is broken on powerpc 4xx for example because of that.

Also remove the now unused snd_pcm_lib_mmap_noncached(). It's
an arch business to know when to use uncached mappings, there's
already hacks for MIPS inside snd_pcm_default_mmap() and other
archs are supposed to use dma_mmap_coherent().

(See my separate patch that adds dma_mmap_coherent() to powerpc)

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
CC: Takashi Iwai <tiwai@suse.de>
---
 include/sound/pcm.h     |    4 +---
 sound/core/pcm_native.c |    9 ---------
 2 files changed, 1 insertions(+), 12 deletions(-)

diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 430a9cc..e1bad11 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -1031,9 +1031,7 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream, struct vm_area_s
 #define snd_pcm_lib_mmap_iomem	NULL
 #endif
 
-int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream,
-			       struct vm_area_struct *area);
-#define snd_pcm_lib_mmap_vmalloc	snd_pcm_lib_mmap_noncached
+#define snd_pcm_lib_mmap_vmalloc NULL
 
 static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max)
 {
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 2d99c37..7639407 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -3194,15 +3194,6 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream,
 EXPORT_SYMBOL(snd_pcm_lib_mmap_iomem);
 #endif /* SNDRV_PCM_INFO_MMAP */
 
-/* mmap callback with pgprot_noncached */
-int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream,
-			       struct vm_area_struct *area)
-{
-	area->vm_page_prot = pgprot_noncached(area->vm_page_prot);
-	return snd_pcm_default_mmap(substream, area);
-}
-EXPORT_SYMBOL(snd_pcm_lib_mmap_noncached);
-
 /*
  * mmap DMA buffer
  */



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: ALSA: vmalloc buffers should use normal mmap
  2011-03-25  6:51 ALSA: vmalloc buffers should use normal mmap Benjamin Herrenschmidt
@ 2011-03-25 10:14 ` Takashi Iwai
  0 siblings, 0 replies; 2+ messages in thread
From: Takashi Iwai @ 2011-03-25 10:14 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linux-kernel, linuxppc-dev

At Fri, 25 Mar 2011 17:51:54 +1100,
Benjamin Herrenschmidt wrote:
> 
> It's a big no-no to use pgprot_noncached() when mmap'ing such buffers
> into userspace since they are mapped cachable in kernel space.
> 
> This can cause all sort of interesting things ranging from to garbled
> sound to lockups on various architectures. I've observed that usb-audio
> is broken on powerpc 4xx for example because of that.
> 
> Also remove the now unused snd_pcm_lib_mmap_noncached(). It's
> an arch business to know when to use uncached mappings, there's
> already hacks for MIPS inside snd_pcm_default_mmap() and other
> archs are supposed to use dma_mmap_coherent().
> 
> (See my separate patch that adds dma_mmap_coherent() to powerpc)
> 
> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> CC: Takashi Iwai <tiwai@suse.de>

Applied now to sound git tree.  Thanks.


Takashi

> ---
>  include/sound/pcm.h     |    4 +---
>  sound/core/pcm_native.c |    9 ---------
>  2 files changed, 1 insertions(+), 12 deletions(-)
> 
> diff --git a/include/sound/pcm.h b/include/sound/pcm.h
> index 430a9cc..e1bad11 100644
> --- a/include/sound/pcm.h
> +++ b/include/sound/pcm.h
> @@ -1031,9 +1031,7 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream, struct vm_area_s
>  #define snd_pcm_lib_mmap_iomem	NULL
>  #endif
>  
> -int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream,
> -			       struct vm_area_struct *area);
> -#define snd_pcm_lib_mmap_vmalloc	snd_pcm_lib_mmap_noncached
> +#define snd_pcm_lib_mmap_vmalloc NULL
>  
>  static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max)
>  {
> diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
> index 2d99c37..7639407 100644
> --- a/sound/core/pcm_native.c
> +++ b/sound/core/pcm_native.c
> @@ -3194,15 +3194,6 @@ int snd_pcm_lib_mmap_iomem(struct snd_pcm_substream *substream,
>  EXPORT_SYMBOL(snd_pcm_lib_mmap_iomem);
>  #endif /* SNDRV_PCM_INFO_MMAP */
>  
> -/* mmap callback with pgprot_noncached */
> -int snd_pcm_lib_mmap_noncached(struct snd_pcm_substream *substream,
> -			       struct vm_area_struct *area)
> -{
> -	area->vm_page_prot = pgprot_noncached(area->vm_page_prot);
> -	return snd_pcm_default_mmap(substream, area);
> -}
> -EXPORT_SYMBOL(snd_pcm_lib_mmap_noncached);
> -
>  /*
>   * mmap DMA buffer
>   */
> 
> 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-03-25 10:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-03-25  6:51 ALSA: vmalloc buffers should use normal mmap Benjamin Herrenschmidt
2011-03-25 10:14 ` Takashi Iwai

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).