On Thu, Mar 18, 2010 at 01:15:58PM +0200, saeed bishara wrote: > >> The only conclusion I came to so far is that ARMv5 where highmem works > >> just fine in all cases has VIVT cache whereas ARMv6 has VIPT cache. > >> And the problem with VIPT caches occurs when direct DMA is involved, > >> otherwise there is no problem if PIO or NFS is used. Sprinkling some > >> flush_cache_all() in a few places makes things work, but this is not a > >> satisfactory solution. > > > > This sounds like the problem we had with the DMA API. Since that's now > > fixed, there shouldn't be a problem with the latest (-rc) kernels, or > > a kernel with my old streaming DMA patches applied. > The failure happens also on 2.6.34.rc1, as Nico said, it looks like > that buffers that are subject to DMA remain dirty, as I understand it, > for vipt nonaliasing cpu's, the kernel doesn't clean user space cache > lines. if I force kmap_atomic/kunmap_atomic to highmem pages that are > not mapped by the kernel (kmap_high_get returns null), then the issue > disappears. In no case does the kernel ever clean user space cache lines for DMA; that's not the responsibility of the DMA API. -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html