]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
dma-mapping: Separate DMA sync issuing and completion waiting
authorBarry Song <baohua@kernel.org>
Sat, 28 Feb 2026 22:13:16 +0000 (06:13 +0800)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Fri, 13 Mar 2026 22:47:31 +0000 (23:47 +0100)
commitd7eafe655b741dfc241d5b920f6d2cea45b568d9
tree8185e14e3eb80484ccd4700c2756c33f62dedb1d
parentcf875c4b6863fd64054e1c3550c349eac09c4f35
dma-mapping: Separate DMA sync issuing and completion waiting

Currently, arch_sync_dma_for_cpu and arch_sync_dma_for_device
always wait for the completion of each DMA buffer. That is,
issuing the DMA sync and waiting for completion is done in a
single API call.

For scatter-gather lists with multiple entries, this means
issuing and waiting is repeated for each entry, which can hurt
performance. Architectures like ARM64 may be able to issue all
DMA sync operations for all entries first and then wait for
completion together.

To address this, arch_sync_dma_for_* now batches DMA operations
and performs a flush afterward. On ARM64, the flush is implemented
with a dsb instruction in arch_sync_dma_flush(). On other
architectures, arch_sync_dma_flush() is currently a nop.

Cc: Leon Romanovsky <leon@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Robin Murphy <robin.murphy@arm.com>
Cc: Ada Couprie Diaz <ada.coupriediaz@arm.com>
Cc: Ard Biesheuvel <ardb@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Cc: Tangquan Zheng <zhengtangquan@oppo.com>
Reviewed-by: Juergen Gross <jgross@suse.com> # drivers/xen/swiotlb-xen.c
Tested-by: Xueyuan Chen <xueyuan.chen21@gmail.com>
Signed-off-by: Barry Song <baohua@kernel.org>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Link: https://lore.kernel.org/r/20260228221316.59934-1-21cnbao@gmail.com
arch/arm64/Kconfig
arch/arm64/include/asm/cache.h
arch/arm64/mm/dma-mapping.c
drivers/iommu/dma-iommu.c
drivers/xen/swiotlb-xen.c
include/linux/dma-map-ops.h
kernel/dma/Kconfig
kernel/dma/direct.c
kernel/dma/direct.h
kernel/dma/swiotlb.c