ARM: Use GFP_DMA only for masks _less_ than 32-bit
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 25 Oct 2009 22:36:10 +0000 (22:36 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 25 Oct 2009 22:44:30 +0000 (22:44 +0000)
We were using GFP_DMA for masks other than 0xffffffff, which is
wrong when some masks are initialized to 0xffffffffffffffff.
This caused such masks to obtain memory from the precious DMA
pool.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/dma-mapping.c

index b30925fcbcdcb05b705afa79da75f8ecbd2eceaf..b9590a7085ca27aef49fcfb1b057205615c3fb54 100644 (file)
@@ -205,7 +205,7 @@ __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp,
 
        order = get_order(size);
 
-       if (mask != 0xffffffff)
+       if (mask < 0xffffffffULL)
                gfp |= GFP_DMA;
 
        page = alloc_pages(gfp, order);
@@ -289,7 +289,7 @@ __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp,
        if (!mask)
                goto error;
 
-       if (mask != 0xffffffff)
+       if (mask < 0xffffffffULL)
                gfp |= GFP_DMA;
        virt = kmalloc(size, gfp);
        if (!virt)