Memoryless nodes: Fix GFP_THISNODE behavior
[linux-2.6-microblaze.git] / include / linux / gfp.h
index bc68dd9..12a90a1 100644 (file)
@@ -98,22 +98,29 @@ struct vm_area_struct;
 
 static inline enum zone_type gfp_zone(gfp_t flags)
 {
+       int base = 0;
+
+#ifdef CONFIG_NUMA
+       if (flags & __GFP_THISNODE)
+               base = MAX_NR_ZONES;
+#endif
+
 #ifdef CONFIG_ZONE_DMA
        if (flags & __GFP_DMA)
-               return ZONE_DMA;
+               return base + ZONE_DMA;
 #endif
 #ifdef CONFIG_ZONE_DMA32
        if (flags & __GFP_DMA32)
-               return ZONE_DMA32;
+               return base + ZONE_DMA32;
 #endif
        if ((flags & (__GFP_HIGHMEM | __GFP_MOVABLE)) ==
                        (__GFP_HIGHMEM | __GFP_MOVABLE))
-               return ZONE_MOVABLE;
+               return base + ZONE_MOVABLE;
 #ifdef CONFIG_HIGHMEM
        if (flags & __GFP_HIGHMEM)
-               return ZONE_HIGHMEM;
+               return base + ZONE_HIGHMEM;
 #endif
-       return ZONE_NORMAL;
+       return base + ZONE_NORMAL;
 }
 
 /*