mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: the arch/x86 maintainers <x86@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Xen-devel <xen-devel@lists.xensource.com>,
	Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Subject: [PATCH 08/11] xen/swiotlb: use dma_alloc_from_coherent to get device coherent memory
Date: Thu,  7 May 2009 14:45:34 -0700	[thread overview]
Message-ID: <1241732737-7669-9-git-send-email-jeremy@goop.org> (raw)
In-Reply-To: <1241732737-7669-1-git-send-email-jeremy@goop.org>

From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

Impact: cleanup

This avoids the previous hack of replicating struct dma_coherent_mem.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
---
 drivers/pci/xen-iommu.c |   39 ++++++++-------------------------------
 1 files changed, 8 insertions(+), 31 deletions(-)

diff --git a/drivers/pci/xen-iommu.c b/drivers/pci/xen-iommu.c
index e7a22f1..32a8b49 100644
--- a/drivers/pci/xen-iommu.c
+++ b/drivers/pci/xen-iommu.c
@@ -34,14 +34,6 @@ do {							\
 	(unsigned long long)addr + size);		\
 } while (0)
 
-struct dma_coherent_mem {
-	void		*virt_base;
-	u32		device_base;
-	int		size;
-	int		flags;
-	unsigned long	*bitmap;
-};
-
 static inline int address_needs_mapping(struct device *hwdev,
 						dma_addr_t addr)
 {
@@ -151,7 +143,6 @@ static void *xen_alloc_coherent(struct device *dev, size_t size,
 				dma_addr_t *dma_handle, gfp_t gfp)
 {
 	void *ret;
-	struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
 	unsigned int order = get_order(size);
 	unsigned long vstart;
 	u64 mask;
@@ -159,18 +150,8 @@ static void *xen_alloc_coherent(struct device *dev, size_t size,
 	/* ignore region specifiers */
 	gfp &= ~(__GFP_DMA | __GFP_HIGHMEM);
 
-	if (mem) {
-		int page = bitmap_find_free_region(mem->bitmap, mem->size,
-						     order);
-		if (page >= 0) {
-			*dma_handle = mem->device_base + (page << PAGE_SHIFT);
-			ret = mem->virt_base + (page << PAGE_SHIFT);
-			memset(ret, 0, size);
-			return ret;
-		}
-		if (mem->flags & DMA_MEMORY_EXCLUSIVE)
-			return NULL;
-	}
+	if (dma_alloc_from_coherent(dev, size, dma_handle, &ret))
+		return ret;
 
 	if (dev == NULL || (dev->coherent_dma_mask < 0xffffffff))
 		gfp |= GFP_DMA;
@@ -196,19 +177,15 @@ static void *xen_alloc_coherent(struct device *dev, size_t size,
 }
 
 static void xen_free_coherent(struct device *dev, size_t size,
-			 void *vaddr, dma_addr_t dma_addr)
+			      void *vaddr, dma_addr_t dma_addr)
 {
-	struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
 	int order = get_order(size);
 
-	if (mem && vaddr >= mem->virt_base &&
-	    vaddr < (mem->virt_base + (mem->size << PAGE_SHIFT))) {
-		int page = (vaddr - mem->virt_base) >> PAGE_SHIFT;
-		bitmap_release_region(mem->bitmap, page, order);
-	} else {
-		xen_destroy_contiguous_region((unsigned long)vaddr, order);
-		free_pages((unsigned long)vaddr, order);
-	}
+	if (dma_release_from_coherent(dev, order, vaddr))
+		return;
+
+	xen_destroy_contiguous_region((unsigned long)vaddr, order);
+	free_pages((unsigned long)vaddr, order);
 }
 
 static dma_addr_t xen_swiotlb_map_single(struct device *dev, phys_addr_t paddr,
-- 
1.6.0.6


  parent reply	other threads:[~2009-05-08  0:33 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-07 21:45 [GIT PULL] xen: dom0 support for PCI access Jeremy Fitzhardinge
2009-05-07 21:45 ` [PATCH 01/11] xen: Don't disable the I/O space Jeremy Fitzhardinge
2009-05-07 21:45 ` [PATCH 02/11] xen: Allow unprivileged Xen domains to create iomap pages Jeremy Fitzhardinge
2009-05-07 21:45 ` [PATCH 03/11] Xen: Rename the balloon lock Jeremy Fitzhardinge
2009-05-08  2:01   ` [Xen-devel] " Isaku Yamahata
2009-05-11 19:00     ` Jeremy Fitzhardinge
2009-05-12  2:47       ` Isaku Yamahata
2009-05-07 21:45 ` [PATCH 04/11] xen: Add xen_create_contiguous_region Jeremy Fitzhardinge
2009-05-07 21:45 ` [PATCH 05/11] x86/PCI: Clean up pci_cache_line_size Jeremy Fitzhardinge
2009-05-07 21:45 ` [PATCH 06/11] x86/PCI: Enable scanning of all pci functions Jeremy Fitzhardinge
2009-05-07 21:45 ` [PATCH 07/11] Xen/x86/PCI: Add support for the Xen PCI subsytem Jeremy Fitzhardinge
2009-05-11  9:40   ` Joerg Roedel
2009-05-11 20:32     ` Jeremy Fitzhardinge
2009-05-07 21:45 ` Jeremy Fitzhardinge [this message]
2009-05-07 21:45 ` [PATCH 09/11] x86/pci: make sure _PAGE_IOMAP it set on pci mappings Jeremy Fitzhardinge
2009-05-07 21:45 ` [PATCH 10/11] xen/pci: clean up Kconfig a bit Jeremy Fitzhardinge
2009-05-07 21:45 ` [PATCH 11/11] xen: checkpatch cleanups Jeremy Fitzhardinge
2009-05-08 11:10 ` [GIT PULL] xen: dom0 support for PCI access Ingo Molnar
2009-05-08 12:44   ` Matthew Wilcox
2009-05-08 19:46     ` Yinghai Lu
2009-05-08 21:05       ` Jeremy Fitzhardinge
2009-05-09 13:32       ` Matthew Wilcox
2009-05-09 15:43     ` Jeremy Fitzhardinge
2009-05-09 20:08       ` Matthew Wilcox
2009-05-11 12:49         ` Ingo Molnar

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=1241732737-7669-9-git-send-email-jeremy@goop.org \
    --to=jeremy@goop.org \
    --cc=jeremy.fitzhardinge@citrix.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xensource.com \
    /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

all inboxes | Powered by JetHome®