From: Christoph Hellwig <hch@lst.de>
To: iommu@lists.linux-foundation.org
Cc: "Konrad Rzeszutek Wilk" <konrad@darnok.org>,
"Michal Simek" <monstr@monstr.eu>,
"Guan Xuetao" <gxt@mprc.pku.edu.cn>,
"Christian König" <ckoenig.leichtzumerken@gmail.com>,
linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org,
linux-mips@linux-mips.org, linuxppc-dev@lists.ozlabs.org,
x86@kernel.org, linux-arch@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH 09/22] swiotlb: refactor coherent buffer freeing
Date: Wed, 10 Jan 2018 09:09:19 +0100 [thread overview]
Message-ID: <20180110080932.14157-10-hch@lst.de> (raw)
In-Reply-To: <20180110080932.14157-1-hch@lst.de>
Factor out a new swiotlb_free_buffer helper that checks if an address
is allocated from the swiotlb bounce buffer, and if yes frees it.
This allows to simplify the swiotlb_free implemenation that uses
dma_direct_free to free the non-bounce buffer allocations.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
lib/swiotlb.c | 35 +++++++++++++++++++++--------------
1 file changed, 21 insertions(+), 14 deletions(-)
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
index 539fd1099ba9..1a147f1354a1 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
@@ -780,22 +780,31 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,
}
EXPORT_SYMBOL(swiotlb_alloc_coherent);
+static bool swiotlb_free_buffer(struct device *dev, size_t size,
+ dma_addr_t dma_addr)
+{
+ phys_addr_t phys_addr = dma_to_phys(dev, dma_addr);
+
+ WARN_ON_ONCE(irqs_disabled());
+
+ if (!is_swiotlb_buffer(phys_addr))
+ return false;
+
+ /*
+ * DMA_TO_DEVICE to avoid memcpy in swiotlb_tbl_unmap_single.
+ * DMA_ATTR_SKIP_CPU_SYNC is optional.
+ */
+ swiotlb_tbl_unmap_single(dev, phys_addr, size, DMA_TO_DEVICE,
+ DMA_ATTR_SKIP_CPU_SYNC);
+ return true;
+}
+
void
swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,
dma_addr_t dev_addr)
{
- phys_addr_t paddr = dma_to_phys(hwdev, dev_addr);
-
- WARN_ON(irqs_disabled());
- if (!is_swiotlb_buffer(paddr))
+ if (!swiotlb_free_buffer(hwdev, size, dev_addr))
free_pages((unsigned long)vaddr, get_order(size));
- else
- /*
- * DMA_TO_DEVICE to avoid memcpy in swiotlb_tbl_unmap_single.
- * DMA_ATTR_SKIP_CPU_SYNC is optional.
- */
- swiotlb_tbl_unmap_single(hwdev, paddr, size, DMA_TO_DEVICE,
- DMA_ATTR_SKIP_CPU_SYNC);
}
EXPORT_SYMBOL(swiotlb_free_coherent);
@@ -1110,9 +1119,7 @@ void *swiotlb_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle,
void swiotlb_free(struct device *dev, size_t size, void *vaddr,
dma_addr_t dma_addr, unsigned long attrs)
{
- if (is_swiotlb_buffer(dma_to_phys(dev, dma_addr)))
- swiotlb_free_coherent(dev, size, vaddr, dma_addr);
- else
+ if (!swiotlb_free_buffer(dev, size, dma_addr))
dma_direct_free(dev, size, vaddr, dma_addr, attrs);
}
--
2.14.2
next prev parent reply other threads:[~2018-01-10 8:10 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-10 8:09 consolidate swiotlb dma_map implementations Christoph Hellwig
2018-01-10 8:09 ` [PATCH 01/22] swiotlb: suppress warning when __GFP_NOWARN is set Christoph Hellwig
2018-01-10 8:09 ` [PATCH 02/22] arm64: rename swiotlb_dma_ops Christoph Hellwig
2018-01-10 12:13 ` Robin Murphy
2018-01-10 8:09 ` [PATCH 03/22] ia64: " Christoph Hellwig
2018-01-12 13:24 ` Konrad Rzeszutek Wilk
2018-01-10 8:09 ` [PATCH 04/22] powerpc: " Christoph Hellwig
2018-01-12 13:25 ` Konrad Rzeszutek Wilk
2018-01-10 8:09 ` [PATCH 05/22] x86: " Christoph Hellwig
2018-01-12 13:25 ` Konrad Rzeszutek Wilk
2018-01-10 8:09 ` [PATCH 06/22] swiotlb: rename swiotlb_free to swiotlb_exit Christoph Hellwig
2018-01-12 13:39 ` Konrad Rzeszutek Wilk
2018-01-10 8:09 ` [PATCH 07/22] swiotlb: add common swiotlb_map_ops Christoph Hellwig
2018-01-10 8:09 ` [PATCH 08/22] swiotlb: wire up ->dma_supported in swiotlb_dma_ops Christoph Hellwig
2018-01-10 12:16 ` Robin Murphy
2018-01-10 15:35 ` Christoph Hellwig
2018-01-10 17:23 ` Robin Murphy
2018-01-10 8:09 ` Christoph Hellwig [this message]
2018-01-10 8:09 ` [PATCH 10/22] swiotlb: refactor coherent buffer allocation Christoph Hellwig
2018-01-10 12:22 ` Robin Murphy
2018-01-10 15:46 ` Christoph Hellwig
2018-01-10 17:02 ` Robin Murphy
2018-01-15 9:10 ` Christoph Hellwig
2018-01-10 8:09 ` [PATCH 11/22] swiotlb: remove various exports Christoph Hellwig
2018-01-10 8:09 ` [PATCH 12/22] ia64: replace ZONE_DMA with ZONE_DMA32 Christoph Hellwig
2018-01-10 8:09 ` [PATCH 13/22] ia64: use generic swiotlb_ops Christoph Hellwig
2018-01-10 8:09 ` [PATCH 14/22] ia64: clean up swiotlb support Christoph Hellwig
2018-01-10 8:09 ` [PATCH 15/22] ia64: remove an ifdef around the content of pci-dma.c Christoph Hellwig
2018-01-10 8:09 ` [PATCH 16/22] unicore32: use generic swiotlb_ops Christoph Hellwig
2018-01-10 8:09 ` [PATCH 17/22] tile: replace ZONE_DMA with ZONE_DMA32 Christoph Hellwig
2018-01-10 8:09 ` [PATCH 18/22] tile: use generic swiotlb_ops Christoph Hellwig
2018-01-10 8:09 ` [PATCH 19/22] mips/netlogic: remove swiotlb support Christoph Hellwig
2018-01-10 8:09 ` [PATCH 20/22] mips: use swiotlb_{alloc,free} Christoph Hellwig
2018-01-10 8:09 ` [PATCH 21/22] arm64: replace ZONE_DMA with ZONE_DMA32 Christoph Hellwig
2018-01-10 12:58 ` Robin Murphy
2018-01-10 15:55 ` Christoph Hellwig
2018-01-10 15:55 ` Christoph Hellwig
2018-01-10 17:10 ` Robin Murphy
2018-01-10 8:09 ` [PATCH 22/22] arm64: use swiotlb_alloc and swiotlb_free Christoph Hellwig
2018-01-10 13:16 ` Robin Murphy
2018-01-10 8:23 ` consolidate swiotlb dma_map implementations Christian König
2018-01-16 7:53 ` Christoph Hellwig
2018-01-16 8:22 ` Christian König
2018-01-16 8:28 ` Christoph Hellwig
2018-01-16 8:52 ` Christian König
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=20180110080932.14157-10-hch@lst.de \
--to=hch@lst.de \
--cc=ckoenig.leichtzumerken@gmail.com \
--cc=gxt@mprc.pku.edu.cn \
--cc=iommu@lists.linux-foundation.org \
--cc=konrad@darnok.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=monstr@monstr.eu \
--cc=x86@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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).