IA64: fix swiotlb alloc_coherent for non DMA_64BIT_MASK devices
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Wed, 28 Jan 2009 12:53:16 +0000 (21:53 +0900)
committerIngo Molnar <mingo@elte.hu>
Thu, 29 Jan 2009 13:39:28 +0000 (14:39 +0100)
commit97d9800de9df9c6e71b00c0a26239c7d7f6a46c4
treebc90316e890bdc84989f1706abccdac43c3feab5
parentfb4467274de0c93e15c4a4fd3249d62454ba57dc
IA64: fix swiotlb alloc_coherent for non DMA_64BIT_MASK devices

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=122638215612705&w=2

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/ia64/kernel/pci-swiotlb.c