Commit ad8f36e4 authored by Logan Gunthorpe's avatar Logan Gunthorpe Committed by Christoph Hellwig

iommu: return full error code from iommu_map_sg[_atomic]()

Convert to ssize_t return code so the return code from __iommu_map()
can be returned all the way down through dma_iommu_map_sg().
Signed-off-by: default avatarLogan Gunthorpe <logang@deltatee.com>
Cc: Joerg Roedel <joro@8bytes.org>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent c81be74e
...@@ -2567,9 +2567,9 @@ size_t iommu_unmap_fast(struct iommu_domain *domain, ...@@ -2567,9 +2567,9 @@ size_t iommu_unmap_fast(struct iommu_domain *domain,
} }
EXPORT_SYMBOL_GPL(iommu_unmap_fast); EXPORT_SYMBOL_GPL(iommu_unmap_fast);
static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova, static ssize_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
struct scatterlist *sg, unsigned int nents, int prot, struct scatterlist *sg, unsigned int nents, int prot,
gfp_t gfp) gfp_t gfp)
{ {
const struct iommu_ops *ops = domain->ops; const struct iommu_ops *ops = domain->ops;
size_t len = 0, mapped = 0; size_t len = 0, mapped = 0;
...@@ -2610,19 +2610,18 @@ static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova, ...@@ -2610,19 +2610,18 @@ static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
/* undo mappings already done */ /* undo mappings already done */
iommu_unmap(domain, iova, mapped); iommu_unmap(domain, iova, mapped);
return 0; return ret;
} }
size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova, ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
struct scatterlist *sg, unsigned int nents, int prot) struct scatterlist *sg, unsigned int nents, int prot)
{ {
might_sleep(); might_sleep();
return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_KERNEL); return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_KERNEL);
} }
EXPORT_SYMBOL_GPL(iommu_map_sg); EXPORT_SYMBOL_GPL(iommu_map_sg);
size_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova, ssize_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
struct scatterlist *sg, unsigned int nents, int prot) struct scatterlist *sg, unsigned int nents, int prot)
{ {
return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC); return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC);
......
...@@ -414,11 +414,11 @@ extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova, ...@@ -414,11 +414,11 @@ extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,
extern size_t iommu_unmap_fast(struct iommu_domain *domain, extern size_t iommu_unmap_fast(struct iommu_domain *domain,
unsigned long iova, size_t size, unsigned long iova, size_t size,
struct iommu_iotlb_gather *iotlb_gather); struct iommu_iotlb_gather *iotlb_gather);
extern size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova, extern ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
struct scatterlist *sg,unsigned int nents, int prot); struct scatterlist *sg, unsigned int nents, int prot);
extern size_t iommu_map_sg_atomic(struct iommu_domain *domain, extern ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
unsigned long iova, struct scatterlist *sg, unsigned long iova, struct scatterlist *sg,
unsigned int nents, int prot); unsigned int nents, int prot);
extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova); extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova);
extern void iommu_set_fault_handler(struct iommu_domain *domain, extern void iommu_set_fault_handler(struct iommu_domain *domain,
iommu_fault_handler_t handler, void *token); iommu_fault_handler_t handler, void *token);
...@@ -679,18 +679,18 @@ static inline size_t iommu_unmap_fast(struct iommu_domain *domain, ...@@ -679,18 +679,18 @@ static inline size_t iommu_unmap_fast(struct iommu_domain *domain,
return 0; return 0;
} }
static inline size_t iommu_map_sg(struct iommu_domain *domain, static inline ssize_t iommu_map_sg(struct iommu_domain *domain,
unsigned long iova, struct scatterlist *sg, unsigned long iova, struct scatterlist *sg,
unsigned int nents, int prot) unsigned int nents, int prot)
{ {
return 0; return -ENODEV;
} }
static inline size_t iommu_map_sg_atomic(struct iommu_domain *domain, static inline ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
unsigned long iova, struct scatterlist *sg, unsigned long iova, struct scatterlist *sg,
unsigned int nents, int prot) unsigned int nents, int prot)
{ {
return 0; return -ENODEV;
} }
static inline void iommu_flush_iotlb_all(struct iommu_domain *domain) static inline void iommu_flush_iotlb_all(struct iommu_domain *domain)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment