aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/dma-map-ops.h
diff options
context:
space:
mode:
authorLogan Gunthorpe <logang@deltatee.com>2021-07-29 14:15:19 -0600
committerChristoph Hellwig <hch@lst.de>2021-08-09 17:13:02 +0200
commitfffe3cc8c2194f60c4af4fac7f27d25e8828f001 (patch)
tree355e3659644e50766165690c2d549fd154d684ed /include/linux/dma-map-ops.h
parentdma-debug: fix debugfs initialization order (diff)
downloadlinux-dev-fffe3cc8c2194f60c4af4fac7f27d25e8828f001.tar.xz
linux-dev-fffe3cc8c2194f60c4af4fac7f27d25e8828f001.zip
dma-mapping: allow map_sg() ops to return negative error codes
Allow dma_map_sgtable() to pass errors from the map_sg() ops. This will be required for returning appropriate error codes when mapping P2PDMA memory. Introduce __dma_map_sg_attrs() which will return the raw error code from the map_sg operation (whether it be negative or zero). Then add a dma_map_sg_attrs() wrapper to convert any negative errors to zero to satisfy the existing calling convention. dma_map_sgtable() defines three error codes that .map_sg implementations are allowed to return: -EINVAL, -ENOMEM and -EIO. The latter of which is a generic return for cases that are passing DMA_MAPPING_ERROR through. dma_map_sgtable() will convert a zero error return for old map_sg() ops into a -EIO return and return any negative errors as reported. This allows map_sg implementations to start returning multiple negative error codes. Legacy map_sg implementations can continue to return zero until they are all converted. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'include/linux/dma-map-ops.h')
-rw-r--r--include/linux/dma-map-ops.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
index 0d53a96a3d64..2f842498c448 100644
--- a/include/linux/dma-map-ops.h
+++ b/include/linux/dma-map-ops.h
@@ -41,8 +41,9 @@ struct dma_map_ops {
size_t size, enum dma_data_direction dir,
unsigned long attrs);
/*
- * map_sg returns 0 on error and a value > 0 on success.
- * It should never return a value < 0.
+ * map_sg should return a negative error code on error. See
+ * dma_map_sgtable() for a list of appropriate error codes
+ * and their meanings.
*/
int (*map_sg)(struct device *dev, struct scatterlist *sg, int nents,
enum dma_data_direction dir, unsigned long attrs);