x86: fix nommu_alloc_coherent allocation with NULL device argument
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Mon, 8 Sep 2008 09:10:12 +0000 (18:10 +0900)
committerIngo Molnar <mingo@elte.hu>
Mon, 8 Sep 2008 13:50:06 +0000 (15:50 +0200)
We need to use __GFP_DMA for NULL device argument (fallback_dev) with
pci-nommu. It's a hack for ISA (and some old code) so we need to use
GFP_DMA.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Acked-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/pci-nommu.c
include/asm-x86/dma-mapping.h

index 0f51883..ada1c87 100644 (file)
@@ -80,7 +80,6 @@ nommu_alloc_coherent(struct device *hwdev, size_t size,
        int node;
        struct page *page;
 
-       gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
        gfp |= __GFP_ZERO;
 
        dma_mask = hwdev->coherent_dma_mask;
@@ -93,7 +92,7 @@ nommu_alloc_coherent(struct device *hwdev, size_t size,
        node = dev_to_node(hwdev);
 
 #ifdef CONFIG_X86_64
-       if (dma_mask <= DMA_32BIT_MASK)
+       if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA))
                gfp |= GFP_DMA32;
 #endif
 
index 088c568..ad8b490 100644 (file)
@@ -246,6 +246,8 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
        struct dma_mapping_ops *ops = get_dma_ops(dev);
        void *memory;
 
+       gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
+
        if (dma_alloc_from_coherent(dev, size, dma_handle, &memory))
                return memory;