From: David Stevens <stevensd@chromium.org> To: Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org> Cc: Christoph Hellwig <hch@lst.de>, Sergey Senozhatsky <senozhatsky@chromium.org>, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, David Stevens <stevensd@chromium.org> Subject: [PATCH 3/4] dma-iommu: expose a few helper functions to module Date: Wed, 7 Jul 2021 16:55:04 +0900 [thread overview] Message-ID: <20210707075505.2896824-4-stevensd@google.com> (raw) In-Reply-To: <20210707075505.2896824-1-stevensd@google.com> From: David Stevens <stevensd@chromium.org> Expose a few helper functions from dma-iommu to the rest of the module. Signed-off-by: David Stevens <stevensd@chromium.org> --- drivers/iommu/dma-iommu.c | 27 ++++++++++++++------------- include/linux/dma-iommu.h | 12 ++++++++++++ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 98a5c566a303..48267d9f5152 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -413,7 +413,7 @@ static int dma_info_to_prot(enum dma_data_direction dir, bool coherent, } } -static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, +dma_addr_t __iommu_dma_alloc_iova(struct iommu_domain *domain, size_t size, u64 dma_limit, struct device *dev) { struct iommu_dma_cookie *cookie = domain->iova_cookie; @@ -453,7 +453,7 @@ static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, return (dma_addr_t)iova << shift; } -static void iommu_dma_free_iova(struct iommu_dma_cookie *cookie, +void __iommu_dma_free_iova(struct iommu_dma_cookie *cookie, dma_addr_t iova, size_t size, struct page *freelist) { struct iova_domain *iovad = &cookie->iovad; @@ -489,7 +489,7 @@ static void __iommu_dma_unmap(struct device *dev, dma_addr_t dma_addr, if (!cookie->fq_domain) iommu_iotlb_sync(domain, &iotlb_gather); - iommu_dma_free_iova(cookie, dma_addr, size, iotlb_gather.freelist); + __iommu_dma_free_iova(cookie, dma_addr, size, iotlb_gather.freelist); } static void __iommu_dma_unmap_swiotlb(struct device *dev, dma_addr_t dma_addr, @@ -525,12 +525,12 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys, size = iova_align(iovad, size + iova_off); - iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev); + iova = __iommu_dma_alloc_iova(domain, size, dma_mask, dev); if (!iova) return DMA_MAPPING_ERROR; if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) { - iommu_dma_free_iova(cookie, iova, size, NULL); + __iommu_dma_free_iova(cookie, iova, size, NULL); return DMA_MAPPING_ERROR; } return iova + iova_off; @@ -585,14 +585,14 @@ static dma_addr_t __iommu_dma_map_swiotlb(struct device *dev, phys_addr_t phys, return iova; } -static void __iommu_dma_free_pages(struct page **pages, int count) +void __iommu_dma_free_pages(struct page **pages, int count) { while (count--) __free_page(pages[count]); kvfree(pages); } -static struct page **__iommu_dma_alloc_pages( +struct page **__iommu_dma_alloc_pages( unsigned int count, unsigned long order_mask, unsigned int nid, gfp_t page_gfp, gfp_t kalloc_gfp) { @@ -686,7 +686,8 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, return NULL; size = iova_align(iovad, size); - iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev); + iova = __iommu_dma_alloc_iova(domain, size, + dev->coherent_dma_mask, dev); if (!iova) goto out_free_pages; @@ -712,7 +713,7 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, out_free_sg: sg_free_table(sgt); out_free_iova: - iommu_dma_free_iova(cookie, iova, size, NULL); + __iommu_dma_free_iova(cookie, iova, size, NULL); out_free_pages: __iommu_dma_free_pages(pages, count); return NULL; @@ -1063,7 +1064,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, prev = s; } - iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev); + iova = __iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev); if (!iova) goto out_restore_sg; @@ -1077,7 +1078,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, return __finalise_sg(dev, sg, nents, iova); out_free_iova: - iommu_dma_free_iova(cookie, iova, iova_len, NULL); + __iommu_dma_free_iova(cookie, iova, iova_len, NULL); out_restore_sg: __invalidate_sg(sg, nents); return 0; @@ -1370,7 +1371,7 @@ static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev, if (!msi_page) return NULL; - iova = iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev); + iova = __iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev); if (!iova) goto out_free_page; @@ -1384,7 +1385,7 @@ static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev, return msi_page; out_free_iova: - iommu_dma_free_iova(cookie, iova, size, NULL); + __iommu_dma_free_iova(cookie, iova, size, NULL); out_free_page: kfree(msi_page); return NULL; diff --git a/include/linux/dma-iommu.h b/include/linux/dma-iommu.h index 6e75a2d689b4..fc9acc581db0 100644 --- a/include/linux/dma-iommu.h +++ b/include/linux/dma-iommu.h @@ -42,6 +42,18 @@ void iommu_dma_free_cpu_cached_iovas(unsigned int cpu, extern bool iommu_dma_forcedac; +struct iommu_dma_cookie; + +struct page **__iommu_dma_alloc_pages( + unsigned int count, unsigned long order_mask, + unsigned int nid, gfp_t page_gfp, gfp_t kalloc_gfp); +void __iommu_dma_free_pages(struct page **pages, int count); +dma_addr_t __iommu_dma_alloc_iova(struct iommu_domain *domain, + size_t size, dma_addr_t dma_limit, + struct device *dev); +void __iommu_dma_free_iova(struct iommu_dma_cookie *cookie, + dma_addr_t iova, size_t size, struct page *freelist); + #else /* CONFIG_IOMMU_DMA */ struct iommu_domain; -- 2.32.0.93.g670b81a890-goog
WARNING: multiple messages have this Message-ID (diff)
From: David Stevens <stevensd@chromium.org> To: Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org> Cc: Sergey Senozhatsky <senozhatsky@chromium.org>, iommu@lists.linux-foundation.org, David Stevens <stevensd@chromium.org>, Christoph Hellwig <hch@lst.de>, linux-kernel@vger.kernel.org Subject: [PATCH 3/4] dma-iommu: expose a few helper functions to module Date: Wed, 7 Jul 2021 16:55:04 +0900 [thread overview] Message-ID: <20210707075505.2896824-4-stevensd@google.com> (raw) In-Reply-To: <20210707075505.2896824-1-stevensd@google.com> From: David Stevens <stevensd@chromium.org> Expose a few helper functions from dma-iommu to the rest of the module. Signed-off-by: David Stevens <stevensd@chromium.org> --- drivers/iommu/dma-iommu.c | 27 ++++++++++++++------------- include/linux/dma-iommu.h | 12 ++++++++++++ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 98a5c566a303..48267d9f5152 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -413,7 +413,7 @@ static int dma_info_to_prot(enum dma_data_direction dir, bool coherent, } } -static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, +dma_addr_t __iommu_dma_alloc_iova(struct iommu_domain *domain, size_t size, u64 dma_limit, struct device *dev) { struct iommu_dma_cookie *cookie = domain->iova_cookie; @@ -453,7 +453,7 @@ static dma_addr_t iommu_dma_alloc_iova(struct iommu_domain *domain, return (dma_addr_t)iova << shift; } -static void iommu_dma_free_iova(struct iommu_dma_cookie *cookie, +void __iommu_dma_free_iova(struct iommu_dma_cookie *cookie, dma_addr_t iova, size_t size, struct page *freelist) { struct iova_domain *iovad = &cookie->iovad; @@ -489,7 +489,7 @@ static void __iommu_dma_unmap(struct device *dev, dma_addr_t dma_addr, if (!cookie->fq_domain) iommu_iotlb_sync(domain, &iotlb_gather); - iommu_dma_free_iova(cookie, dma_addr, size, iotlb_gather.freelist); + __iommu_dma_free_iova(cookie, dma_addr, size, iotlb_gather.freelist); } static void __iommu_dma_unmap_swiotlb(struct device *dev, dma_addr_t dma_addr, @@ -525,12 +525,12 @@ static dma_addr_t __iommu_dma_map(struct device *dev, phys_addr_t phys, size = iova_align(iovad, size + iova_off); - iova = iommu_dma_alloc_iova(domain, size, dma_mask, dev); + iova = __iommu_dma_alloc_iova(domain, size, dma_mask, dev); if (!iova) return DMA_MAPPING_ERROR; if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) { - iommu_dma_free_iova(cookie, iova, size, NULL); + __iommu_dma_free_iova(cookie, iova, size, NULL); return DMA_MAPPING_ERROR; } return iova + iova_off; @@ -585,14 +585,14 @@ static dma_addr_t __iommu_dma_map_swiotlb(struct device *dev, phys_addr_t phys, return iova; } -static void __iommu_dma_free_pages(struct page **pages, int count) +void __iommu_dma_free_pages(struct page **pages, int count) { while (count--) __free_page(pages[count]); kvfree(pages); } -static struct page **__iommu_dma_alloc_pages( +struct page **__iommu_dma_alloc_pages( unsigned int count, unsigned long order_mask, unsigned int nid, gfp_t page_gfp, gfp_t kalloc_gfp) { @@ -686,7 +686,8 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, return NULL; size = iova_align(iovad, size); - iova = iommu_dma_alloc_iova(domain, size, dev->coherent_dma_mask, dev); + iova = __iommu_dma_alloc_iova(domain, size, + dev->coherent_dma_mask, dev); if (!iova) goto out_free_pages; @@ -712,7 +713,7 @@ static struct page **__iommu_dma_alloc_noncontiguous(struct device *dev, out_free_sg: sg_free_table(sgt); out_free_iova: - iommu_dma_free_iova(cookie, iova, size, NULL); + __iommu_dma_free_iova(cookie, iova, size, NULL); out_free_pages: __iommu_dma_free_pages(pages, count); return NULL; @@ -1063,7 +1064,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, prev = s; } - iova = iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev); + iova = __iommu_dma_alloc_iova(domain, iova_len, dma_get_mask(dev), dev); if (!iova) goto out_restore_sg; @@ -1077,7 +1078,7 @@ static int iommu_dma_map_sg(struct device *dev, struct scatterlist *sg, return __finalise_sg(dev, sg, nents, iova); out_free_iova: - iommu_dma_free_iova(cookie, iova, iova_len, NULL); + __iommu_dma_free_iova(cookie, iova, iova_len, NULL); out_restore_sg: __invalidate_sg(sg, nents); return 0; @@ -1370,7 +1371,7 @@ static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev, if (!msi_page) return NULL; - iova = iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev); + iova = __iommu_dma_alloc_iova(domain, size, dma_get_mask(dev), dev); if (!iova) goto out_free_page; @@ -1384,7 +1385,7 @@ static struct iommu_dma_msi_page *iommu_dma_get_msi_page(struct device *dev, return msi_page; out_free_iova: - iommu_dma_free_iova(cookie, iova, size, NULL); + __iommu_dma_free_iova(cookie, iova, size, NULL); out_free_page: kfree(msi_page); return NULL; diff --git a/include/linux/dma-iommu.h b/include/linux/dma-iommu.h index 6e75a2d689b4..fc9acc581db0 100644 --- a/include/linux/dma-iommu.h +++ b/include/linux/dma-iommu.h @@ -42,6 +42,18 @@ void iommu_dma_free_cpu_cached_iovas(unsigned int cpu, extern bool iommu_dma_forcedac; +struct iommu_dma_cookie; + +struct page **__iommu_dma_alloc_pages( + unsigned int count, unsigned long order_mask, + unsigned int nid, gfp_t page_gfp, gfp_t kalloc_gfp); +void __iommu_dma_free_pages(struct page **pages, int count); +dma_addr_t __iommu_dma_alloc_iova(struct iommu_domain *domain, + size_t size, dma_addr_t dma_limit, + struct device *dev); +void __iommu_dma_free_iova(struct iommu_dma_cookie *cookie, + dma_addr_t iova, size_t size, struct page *freelist); + #else /* CONFIG_IOMMU_DMA */ struct iommu_domain; -- 2.32.0.93.g670b81a890-goog _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu
next prev parent reply other threads:[~2021-07-07 7:55 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-07 7:55 [PATCH 0/4] Add dynamic iommu backed bounce buffers David Stevens 2021-07-07 7:55 ` David Stevens 2021-07-07 7:55 ` [PATCH 1/4] dma-iommu: add kalloc gfp flag to alloc helper David Stevens 2021-07-07 7:55 ` David Stevens 2021-07-08 17:22 ` Robin Murphy 2021-07-08 17:22 ` Robin Murphy 2021-07-07 7:55 ` [PATCH 2/4] dma-iommu: replace device arguments David Stevens 2021-07-07 7:55 ` David Stevens 2021-07-07 7:55 ` David Stevens [this message] 2021-07-07 7:55 ` [PATCH 3/4] dma-iommu: expose a few helper functions to module David Stevens 2021-07-07 7:55 ` [PATCH 4/4] dma-iommu: Add iommu bounce buffers to dma-iommu api David Stevens 2021-07-07 7:55 ` David Stevens 2021-07-08 9:29 ` [PATCH 0/4] Add dynamic iommu backed bounce buffers Joerg Roedel 2021-07-08 9:29 ` Joerg Roedel 2021-07-08 17:14 ` Robin Murphy 2021-07-08 17:14 ` Robin Murphy 2021-07-09 7:25 ` David Stevens 2021-07-09 7:25 ` David Stevens 2021-07-08 13:38 ` Lu Baolu 2021-07-08 13:38 ` Lu Baolu 2021-07-09 6:04 ` David Stevens 2021-07-09 6:04 ` David Stevens
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210707075505.2896824-4-stevensd@google.com \ --to=stevensd@chromium.org \ --cc=hch@lst.de \ --cc=iommu@lists.linux-foundation.org \ --cc=joro@8bytes.org \ --cc=linux-kernel@vger.kernel.org \ --cc=senozhatsky@chromium.org \ --cc=will@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.