• Andrew Lewis's avatar
    powerpc: Prevent memory corruption due to cache invalidation of unaligned DMA buffer · 03d70617
    Andrew Lewis authored
    On PowerPC processors with non-coherent cache architectures the DMA
    subsystem calls invalidate_dcache_range() before performing a DMA read
    operation.  If the address and length of the DMA buffer are not aligned
    to a cache-line boundary this can result in memory outside of the DMA
    buffer being invalidated in the cache.  If this memory has an
    uncommitted store then the data will be lost and a subsequent read of
    that address will result in an old value being returned from main memory.
    
    Only when the DMA buffer starts on a cache-line boundary and is an exact
    mutiple of the cache-line size can invalidate_dcache_range() be called,
    otherwise flush_dcache_range() must be called.  flush_dcache_range()
    will first flush uncommitted writes, and then invalidate the cache.
    
    Signed-off-by: Andrew Lewis <andrew-lewis at netspace.net.au>
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    03d70617
dma-noncoherent.c 10.3 KB