[AVR32] Drop GFP_COMP for DMA memory allocations
authorHaavard Skinnemoen <hskinnemoen@atmel.com>
Thu, 5 Jul 2007 15:08:09 +0000 (17:08 +0200)
committerHaavard Skinnemoen <hskinnemoen@atmel.com>
Fri, 25 Jan 2008 07:31:39 +0000 (08:31 +0100)
dma_alloc_coherent wants to split pages after allocation in order to
reduce the memory footprint. This does not work well with GFP_COMP
pages, so drop this flag before allocation.

This patch was forward-ported from BSP 2.0

Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
arch/avr32/mm/dma-coherent.c

index 177fea8f7b711e90d87e208db5f9d36adaef3be6..6d8c794c3b81bbd528f170c9dba7fa46e50c525c 100644 (file)
@@ -41,6 +41,13 @@ static struct page *__dma_alloc(struct device *dev, size_t size,
        struct page *page, *free, *end;
        int order;
 
+       /* Following is a work-around (a.k.a. hack) to prevent pages
+        * with __GFP_COMP being passed to split_page() which cannot
+        * handle them.  The real problem is that this flag probably
+        * should be 0 on AVR32 as it is not supported on this
+        * platform--see CONFIG_HUGETLB_PAGE. */
+       gfp &= ~(__GFP_COMP);
+
        size = PAGE_ALIGN(size);
        order = get_order(size);