[PATCH 2/9] block: add scatterlist-less DMA mapping helpers
Leon Romanovsky
leon at kernel.org
Tue Jun 10 05:51:34 PDT 2025
On Tue, Jun 10, 2025 at 07:06:40AM +0200, Christoph Hellwig wrote:
> Add a new blk_rq_dma_map / blk_rq_dma_unmap pair that does away with
> the wasteful scatterlist structure. Instead it uses the mapping iterator
> to either add segments to the IOVA for IOMMU operations, or just maps
> them one by one for the direct mapping. For the IOMMU case instead of
> a scatterlist with an entry for each segment, only a single [dma_addr,len]
> pair needs to be stored for processing a request, and for the direct
> mapping the per-segment allocation shrinks from
> [page,offset,len,dma_addr,dma_len] to just [dma_addr,len].
>
> One big difference to the scatterlist API, which could be considered
> downside, is that the IOVA collapsing only works when the driver sets
> a virt_boundary that matches the IOMMU granule. For NVMe this is done
> already so it works perfectly.
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
> block/blk-mq-dma.c | 162 +++++++++++++++++++++++++++++++++++++
> include/linux/blk-mq-dma.h | 63 +++++++++++++++
> 2 files changed, 225 insertions(+)
> create mode 100644 include/linux/blk-mq-dma.h
>
Thanks,
Reviewed-by: Leon Romanovsky <leonro at nvidia.com>
More information about the Linux-nvme
mailing list