Commit 66b6cfac authored by Takashi Iwai's avatar Takashi Iwai

ALSA: pcm - fix page conversion on non-coherent MIPS arch

The non-coherent MIPS arch doesn't give the correct address by a simple
virt_to_page() for pages allocated via dma_alloc_coherent().

Original patch by Wu Zhangjin <wuzj@lemote.com>.
[Ralf mentioned: "The origins of this patch go back far further.
 The oldest patch I could find which is a superset of this was written
 by Atsushi Nemoto and various incarnations of it have been sumitted
 to and reject by me a number of times through the years."]
A proper check of the buffer allocation type was added to avoid the
wrong conversion.

Note that this doesn't fix perfectly: the pages should be marked with
proper pgprot value.  This will be done in a future implementation like
the conversion to dma_mmap_coherent().
Acked-by: default avatarRalf Baechle <ralf@linux-mips.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 9eb4a067
...@@ -3066,6 +3066,10 @@ static inline struct page * ...@@ -3066,6 +3066,10 @@ static inline struct page *
snd_pcm_default_page_ops(struct snd_pcm_substream *substream, unsigned long ofs) snd_pcm_default_page_ops(struct snd_pcm_substream *substream, unsigned long ofs)
{ {
void *vaddr = substream->runtime->dma_area + ofs; void *vaddr = substream->runtime->dma_area + ofs;
#if defined(CONFIG_MIPS) && defined(CONFIG_DMA_NONCOHERENT)
if (substream->dma_buffer.dev.type == SNDRV_DMA_TYPE_DEV)
return virt_to_page(CAC_ADDR(vaddr));
#endif
return virt_to_page(vaddr); return virt_to_page(vaddr);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment