[PATCH 7/9] nvme-pci: convert the data mapping blk_rq_dma_map
Leon Romanovsky
leon at kernel.org
Tue Jun 10 06:19:29 PDT 2025
On Tue, Jun 10, 2025 at 07:06:45AM +0200, Christoph Hellwig wrote:
> Use the blk_rq_dma_map API to DMA map requests instead of scatterlists.
> This removes the need to allocate a scatterlist covering every segment,
> and thus the overall transfer length limit based on the scatterlist
> allocation.
>
> Instead the DMA mapping is done by iterating the bio_vec chain in the
> request directly. The unmap is handled differently depending on how
> we mapped:
>
> - when using an IOMMU only a single IOVA is used, and it is stored in
> iova_state
> - for direct mappings that don't use swiotlb and are cache coherent no
> unmap is needed at al
s/unmap is needed/unmap is not needed
> - for direct mappings that are not cache coherent or use swiotlb, the
> physical addresses are rebuild from the PRPs or SGL segments
>
> The latter unfortunately adds a fair amount of code to the driver, but
> it is code not used in the fast path.
>
> The conversion only covers the data mapping path, and still uses a
> scatterlist for the multi-segment metadata case. I plan to convert that
> as soon as we have good test coverage for the multi-segment metadata
> path.
>
> Thanks to Chaitanya Kulkarni for an initial attempt at a new DMA API
> conversion for nvme-pci, Kanchan Joshi for bringing back the single
> segment optimization, Leon Romanovsky for shepherding this through a
> gazillion rebases and Nitesh Shetty for various improvements.
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
> drivers/nvme/host/pci.c | 388 +++++++++++++++++++++++++---------------
> 1 file changed, 242 insertions(+), 146 deletions(-)
Thanks,
Reviewed-by: Leon Romanovsky <leonro at nvidia.com>
More information about the Linux-nvme
mailing list