summaryrefslogtreecommitdiff
path: root/Documentation/core-api/dma-api.rst
diff options
context:
space:
mode:
authorJohn Garry <john.garry@huawei.com>2022-07-14 14:15:24 +0300
committerChristoph Hellwig <hch@lst.de>2022-07-19 07:05:41 +0300
commita229cc14f3395311b899e5e582b71efa8dd01df0 (patch)
treec582777858d9da5c8d70cad910a04859b213fd8f /Documentation/core-api/dma-api.rst
parent942a8186eb4451700dadd1d60a2e43ce67605991 (diff)
downloadlinux-a229cc14f3395311b899e5e582b71efa8dd01df0.tar.xz
dma-mapping: add dma_opt_mapping_size()
Streaming DMA mapping involving an IOMMU may be much slower for larger total mapping size. This is because every IOMMU DMA mapping requires an IOVA to be allocated and freed. IOVA sizes above a certain limit are not cached, which can have a big impact on DMA mapping performance. Provide an API for device drivers to know this "optimal" limit, such that they may try to produce mapping which don't exceed it. Signed-off-by: John Garry <john.garry@huawei.com> Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> Acked-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'Documentation/core-api/dma-api.rst')
-rw-r--r--Documentation/core-api/dma-api.rst14
1 files changed, 14 insertions, 0 deletions
diff --git a/Documentation/core-api/dma-api.rst b/Documentation/core-api/dma-api.rst
index 6d6d0edd2d27..829f20a193ca 100644
--- a/Documentation/core-api/dma-api.rst
+++ b/Documentation/core-api/dma-api.rst
@@ -206,6 +206,20 @@ others should not be larger than the returned value.
::
+ size_t
+ dma_opt_mapping_size(struct device *dev);
+
+Returns the maximum optimal size of a mapping for the device.
+
+Mapping larger buffers may take much longer in certain scenarios. In
+addition, for high-rate short-lived streaming mappings, the upfront time
+spent on the mapping may account for an appreciable part of the total
+request lifetime. As such, if splitting larger requests incurs no
+significant performance penalty, then device drivers are advised to
+limit total DMA streaming mappings length to the returned value.
+
+::
+
bool
dma_need_sync(struct device *dev, dma_addr_t dma_addr);