• Will Deacon's avatar
    arm64: dma: Drop cache invalidation from arch_dma_prep_coherent() · c44094ee
    Will Deacon authored
    arch_dma_prep_coherent() is called when preparing a non-cacheable region
    for a consistent DMA buffer allocation. Since the buffer pages may
    previously have been written via a cacheable mapping and consequently
    allocated as dirty cachelines, the purpose of this function is to remove
    these dirty lines from the cache, writing them back so that the
    non-coherent device is able to see them.
    
    On arm64, this operation can be achieved with a clean to the point of
    coherency; a subsequent invalidation is not required and serves little
    purpose in the presence of a cacheable alias (e.g. the linear map),
    since clean lines can be speculatively fetched back into the cache after
    the invalidation operation has completed.
    
    Relax the cache maintenance in arch_dma_prep_coherent() so that only a
    clean, and not a clean-and-invalidate operation is performed.
    
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Robin Murphy <robin.murphy@arm.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Link: https://lore.kernel.org/r/20220823122111.17439-1-will@kernel.orgSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    c44094ee
dma-mapping.c 1.5 KB