Re: [PATCH stable-5.15] arm64: mm: Don't invalidate FROM_DEVICE buffers at start of DMA transfer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 23, 2022 at 04:44:12PM +0100, Catalin Marinas wrote:
> From: Will Deacon <will@xxxxxxxxxx>
> 
> commit c50f11c6196f45c92ca48b16a5071615d4ae0572 upstream.
> 
> Invalidating the buffer memory in arch_sync_dma_for_device() for
> FROM_DEVICE transfers
> 
> When using the streaming DMA API to map a buffer prior to inbound
> non-coherent DMA (i.e. DMA_FROM_DEVICE), we invalidate any dirty CPU
> cachelines so that they will not be written back during the transfer and
> corrupt the buffer contents written by the DMA. This, however, poses two
> potential problems:
> 
>   (1) If the DMA transfer does not write to every byte in the buffer,
>       then the unwritten bytes will contain stale data once the transfer
>       has completed.
> 
>   (2) If the buffer has a virtual alias in userspace, then stale data
>       may be visible via this alias during the period between performing
>       the cache invalidation and the DMA writes landing in memory.
> 
> Address both of these issues by cleaning (aka writing-back) the dirty
> lines in arch_sync_dma_for_device(DMA_FROM_DEVICE) instead of discarding
> them using invalidation.
> 
> Cc: Ard Biesheuvel <ardb@xxxxxxxxxx>
> Cc: Christoph Hellwig <hch@xxxxxx>
> Cc: Robin Murphy <robin.murphy@xxxxxxx>
> Cc: Russell King <linux@xxxxxxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20220606152150.GA31568@willie-the-truck
> Signed-off-by: Will Deacon <will@xxxxxxxxxx>
> Reviewed-by: Ard Biesheuvel <ardb@xxxxxxxxxx>
> Link: https://lore.kernel.org/r/20220610151228.4562-2-will@xxxxxxxxxx
> Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxx>
> ---
>  arch/arm64/mm/cache.S | 2 --
>  1 file changed, 2 deletions(-)

All now queued up, thanks.

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux