lkml.org 
[lkml]   [2009]   [Aug]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: How to efficiently handle DMA and cache on ARMv7 ? (was "Is get_user_pages() enough to prevent pages from being swapped out ?")
    From
    Date
    On Tue, 2009-08-11 at 02:31 -0700, Catalin Marinas wrote:
    > On Thu, 2009-08-06 at 22:59 -0700, David Xiao wrote:
    > > 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.
    >
    > Theoretically, with speculative prefetching on ARMv7 and the FROM_DEVICE
    > case we need to invalidate the corresponding D-cache lines both before
    > and after the DMA transfer, i.e. in both dma_map_sg and dma_unmap_sg,
    > otherwise there is a risk of stale data in the cache.
    >
    The dma_map_sg() code is already calling dma_cache_maint() to invalidate
    the cache lines in the DMA_FROM_DEVICE/DMA_BIDIRECTIONAL direction
    cases. And the suggestion was to do something similar in dma_unmap_sg()
    case to deal with the speculative prefetching on ARMv7, and Russel has
    other postings talking about the details of this in terms of
    feasibility/etc.

    Furthermore, duplicate MMU mappings in the kernel bring more twists to
    this problem as explained in this email chain as well, especially in the
    case of DMA-coherent memory (dma_alloc_coherent()).

    David




    \
     
     \ /
      Last update: 2009-08-11 20:25    [W:4.378 / U:0.532 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site