public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non DMA_64BIT_MASK devices
@ 2009-01-28 12:53 FUJITA Tomonori
  2009-01-28 12:53 ` [PATCH -tip 2/3] IA64: fix VT-d dma_mapping_error FUJITA Tomonori
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: FUJITA Tomonori @ 2009-01-28 12:53 UTC (permalink / raw)
  To: mingo, tony.luck; +Cc: linux-kernel, linux-ia64, FUJITA Tomonori, Yasunori Goto

Before the dma ops unification, IA64 always uses GFP_DMA for
dma_alloc_coherent like:

#define dma_alloc_coherent(dev, size, handle, gfp)	\
	platform_dma_alloc_coherent(dev, size, handle, (gfp) | GFP_DMA)

This GFP_DMA enforcement doesn't make sense for IOMMUs since they can
do address translation to give addresses that devices can access
to. The IOMMU drivers ignore the zone flag. However, this is still
necessary for swiotlb since it can't do address translation.

We don't always need to use GFP_DMA for swiotlb. We need GFP_DMA for
devices incapable of 64bit DMA.

This patch is sorta updated version of:

http://marc.info/?l=linux-kernel&m\x122638215612705&w=2

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: Yasunori Goto <y-goto@jp.fujitsu.com>
---
 arch/ia64/kernel/pci-swiotlb.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/arch/ia64/kernel/pci-swiotlb.c b/arch/ia64/kernel/pci-swiotlb.c
index 717ad4f..573f02c 100644
--- a/arch/ia64/kernel/pci-swiotlb.c
+++ b/arch/ia64/kernel/pci-swiotlb.c
@@ -13,8 +13,16 @@
 int swiotlb __read_mostly;
 EXPORT_SYMBOL(swiotlb);
 
+static void *ia64_swiotlb_alloc_coherent(struct device *dev, size_t size,
+					 dma_addr_t *dma_handle, gfp_t gfp)
+{
+	if (dev->coherent_dma_mask != DMA_64BIT_MASK)
+		gfp |= GFP_DMA;
+	return swiotlb_alloc_coherent(dev, size, dma_handle, gfp);
+}
+
 struct dma_map_ops swiotlb_dma_ops = {
-	.alloc_coherent = swiotlb_alloc_coherent,
+	.alloc_coherent = ia64_swiotlb_alloc_coherent,
 	.free_coherent = swiotlb_free_coherent,
 	.map_page = swiotlb_map_page,
 	.unmap_page = swiotlb_unmap_page,
-- 
1.6.0.6


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2009-02-03  1:52 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-28 12:53 [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non DMA_64BIT_MASK devices FUJITA Tomonori
2009-01-28 12:53 ` [PATCH -tip 2/3] IA64: fix VT-d dma_mapping_error FUJITA Tomonori
2009-01-28 12:53   ` [PATCH -tip 3/3] intel-iommu: make dma mapping functions static FUJITA Tomonori
2009-01-29 11:41 ` [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non DMA_64BIT_MASK devices Yasunori Goto
2009-01-29 11:54   ` [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non FUJITA Tomonori
2009-01-29 22:54     ` [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non DMA_64BIT_MASK devices Yasunori Goto
2009-01-29 23:36       ` [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non FUJITA Tomonori
2009-01-30 11:24         ` [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non DMA_64BIT_MASK devices Yasunori Goto
2009-02-02 23:28           ` [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non FUJITA Tomonori
2009-02-03  1:52             ` [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non DMA_64BIT_MASK devices Yasunori Goto
2009-01-29 13:40 ` [PATCH -tip 1/3] IA64: fix swiotlb alloc_coherent for non Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox