Use the DMA32 zone for dma_alloc_coherent()/pci_alloc_consistent Signed-off-by: Andi Kleen Index: linux/arch/x86_64/kernel/pci-gart.c =================================================================== --- linux.orig/arch/x86_64/kernel/pci-gart.c +++ linux/arch/x86_64/kernel/pci-gart.c @@ -219,6 +219,8 @@ dma_alloc_coherent(struct device *dev, s /* Kludge to make it bug-to-bug compatible with i386. i386 uses the normal dma_mask for alloc_coherent. */ dma_mask &= *dev->dma_mask; + if (dma_mask <= 0xffffffff) + gfp |= GFP_DMA32; again: memory = dma_alloc_pages(dev, gfp, get_order(size)); @@ -245,7 +247,7 @@ dma_alloc_coherent(struct device *dev, s } if (!(gfp & GFP_DMA)) { - gfp |= GFP_DMA; + gfp = (gfp & ~GFP_DMA32) | GFP_DMA; goto again; } return NULL;