lkml.org 
[lkml]   [2021]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH v1 03/16] 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: Logan Gunthorpe <logang@deltatee.com>
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: Will Deacon <will@kernel.org>
    ---
    drivers/iommu/iommu.c | 15 +++++++--------
    include/linux/iommu.h | 22 +++++++++++-----------
    2 files changed, 18 insertions(+), 19 deletions(-)

    diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
    index 5419c4b9f27a..bf971b4e34aa 100644
    --- a/drivers/iommu/iommu.c
    +++ b/drivers/iommu/iommu.c
    @@ -2567,9 +2567,9 @@ size_t iommu_unmap_fast(struct iommu_domain *domain,
    }
    EXPORT_SYMBOL_GPL(iommu_unmap_fast);

    -static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
    - struct scatterlist *sg, unsigned int nents, int prot,
    - gfp_t gfp)
    +static ssize_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
    + struct scatterlist *sg, unsigned int nents, int prot,
    + gfp_t gfp)
    {
    const struct iommu_ops *ops = domain->ops;
    size_t len = 0, mapped = 0;
    @@ -2610,19 +2610,18 @@ static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
    /* undo mappings already done */
    iommu_unmap(domain, iova, mapped);

    - return 0;
    -
    + return ret;
    }

    -size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
    - struct scatterlist *sg, unsigned int nents, int prot)
    +ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
    + struct scatterlist *sg, unsigned int nents, int prot)
    {
    might_sleep();
    return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_KERNEL);
    }
    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)
    {
    return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC);
    diff --git a/include/linux/iommu.h b/include/linux/iommu.h
    index 32d448050bf7..9369458ba1bd 100644
    --- a/include/linux/iommu.h
    +++ b/include/linux/iommu.h
    @@ -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,
    unsigned long iova, size_t size,
    struct iommu_iotlb_gather *iotlb_gather);
    -extern size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
    - struct scatterlist *sg,unsigned int nents, int prot);
    -extern size_t iommu_map_sg_atomic(struct iommu_domain *domain,
    - unsigned long iova, struct scatterlist *sg,
    - unsigned int nents, int prot);
    +extern ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
    + struct scatterlist *sg, unsigned int nents, int prot);
    +extern ssize_t iommu_map_sg_atomic(struct iommu_domain *domain,
    + unsigned long iova, struct scatterlist *sg,
    + unsigned int nents, int prot);
    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,
    iommu_fault_handler_t handler, void *token);
    @@ -679,18 +679,18 @@ static inline size_t iommu_unmap_fast(struct iommu_domain *domain,
    return 0;
    }

    -static inline size_t iommu_map_sg(struct iommu_domain *domain,
    - unsigned long iova, struct scatterlist *sg,
    - unsigned int nents, int prot)
    +static inline ssize_t iommu_map_sg(struct iommu_domain *domain,
    + unsigned long iova, struct scatterlist *sg,
    + 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 int nents, int prot)
    {
    - return 0;
    + return -ENODEV;
    }

    static inline void iommu_flush_iotlb_all(struct iommu_domain *domain)
    --
    2.20.1
    \
     
     \ /
      Last update: 2021-07-15 18:47    [W:4.448 / U:0.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site