At Wed, 8 Aug 2007 12:58:52 +0100, Ralf Baechle wrote:
On Tue, Aug 07, 2007 at 08:41:10PM +0200, Takashi Iwai wrote:
It's ALSA that is doing funny things here so there is no point in fixing the arch code to work for ALSA.
Yep, but OTOH, the arch code doesn't provide a proper standard way to mmap the pages allocated via dma_alloc_coherent(). That's the missing piece, especially on mips and sparc. ARM has already one.
My wish is implementing dma_mmap_coherent() on all architectures, so that the driver can use it safely without messy ifdefs.
Adding dma_mmap_coherent has been proposed in 2004 but the discussion for some reason went nowhere because it apparently isn't implementable on PARISC due to cache synonyms - on MIPS we'd solve those issues where they exist by using uncached or writethrough mappings, as apropriate.
Actually, if it cannot be implemented (or not yet implemented properly) on some architectures, it's fine. Then we can simply drop the mmap support just for such an architecture. I suppose an inlined dma_mmap_coherent() that always returns an error, just like the earlier version of asm-generic/dma-mapping-broken.h, would work well.
But, currently, the driver has no idea which architecture is OK and which not, and which method to choose. That is where we got stuck.
Takashi