dma-mapping: add a dma_alloc_noncontiguous API
authorChristoph Hellwig <hch@lst.de>
Thu, 28 Jan 2021 13:54:18 +0000 (14:54 +0100)
committerChristoph Hellwig <hch@lst.de>
Mon, 15 Mar 2021 09:02:31 +0000 (10:02 +0100)
commit7d5b5738d1514e9dd8ed452660e2a4d25beb9483
tree9171f83e841b5029329a8bd9664205494e6b0fa3
parent198c50e2ccff5c78ddbe0cb01593ac32458deb69
dma-mapping: add a dma_alloc_noncontiguous API

Add a new API that returns a potentiall virtually non-contigous sg_table
and a DMA address.  This API is only properly implemented for dma-iommu
and will simply return a contigious chunk as a fallback.

The intent is that drivers can use this API if either:

 - no kernel mapping or only temporary kernel mappings are required.
   That is as a better replacement for DMA_ATTR_NO_KERNEL_MAPPING
 - a kernel mapping is required for cached and DMA mapped pages, but
   the driver also needs the pages to e.g. map them to userspace.
   In that sense it is a replacement for some aspects of the recently
   removed and never fully implemented DMA_ATTR_NON_CONSISTENT

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Tomasz Figa <tfiga@chromium.org>
Tested-by: Ricardo Ribalda <ribalda@chromium.org>
Documentation/core-api/dma-api.rst
include/linux/dma-map-ops.h
include/linux/dma-mapping.h
kernel/dma/mapping.c