Re: How to efficiently handle DMA and cache on ARMv7 ? (was "Isget_user_pages() enough to prevent pages from being swapped out ?")

From: Russell King - ARM Linux
Date: Fri Aug 07 2009 - 15:03:55 EST


On Fri, Aug 07, 2009 at 11:23:39AM +0100, Jamie Lokier wrote:
> David Xiao wrote:
> > > However, that won't work with ARMv7's speculative prefetching. I'm
> > > afraid with such things, DMA direct into userspace mappings becomes a
> > > _lot_ harder, and lets face it, lots of Linux drivers just aren't going
> > > to bother supporting this - we can't currently get agreement to have an
> > > API to map DMA coherent pages into userspace!
> >
> > The V7 speculative prefetching will then probably apply to DMA coherency
> > issue in general, both kernel and user space DMAs. Could this be
> > addressed by inside the dma_unmap_sg/single() calling dma_cache_maint()
> > when the direction is DMA_FROM_DEVICE/DMA_BIDIRECTIONAL, to basically
> > invalidate the related cache lines in case any filled by prefetching?
> > Assuming dma_unmap_sg/single() is called after each DMA operation is
> > completed.
>
> If it's possible, surely its essential because of O_DIRECT file and
> block I/O?

The problem is that you require a _VIRTUAL_ address. The unmap functions
do not have that information passed to them, so we need some way of
maintaining that or calculating it. I've covered that issue in my
postings this morning (please follow up there instead.)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/