Index: linux-2.6.17-mm3/include/linux/mmzone.h =================================================================== --- linux-2.6.17-mm3.orig/include/linux/mmzone.h 2006-06-28 12:59:04.162961405 -0700 +++ linux-2.6.17-mm3/include/linux/mmzone.h 2006-06-28 13:27:55.549962564 -0700 @@ -88,14 +88,19 @@ struct per_cpu_pageset { #endif #define ZONE_DMA 0 +#ifndef CONFIG_DMA_IS_DM32 #define ZONE_DMA32 1 #define ZONE_NORMAL 2 +#else +#define ZONE_NORMAL 1 +#endif + #ifdef CONFIG_HIGHMEM -#define ZONE_HIGHMEM 3 +#define ZONE_HIGHMEM (ZONE_NORMAL + 1) -#define MAX_NR_ZONES 4 /* Sync this with ZONES_SHIFT */ +#define MAX_NR_ZONES (ZONE_NORMAL + 2) /* Sync this with ZONES_SHIFT */ #else -#define MAX_NR_ZONES 3 +#define MAX_NR_ZONES (ZONE_NORMAL + 1) #endif #define ZONES_SHIFT 2 /* ceil(log2(MAX_NR_ZONES)) */ @@ -416,7 +421,11 @@ static inline int is_normal(struct zone static inline int is_dma32(struct zone *zone) { +#ifndef CONFIG_DMA_IS_DMA32 return zone == zone->zone_pgdat->node_zones + ZONE_DMA32; +#else + return 0; +#endif } static inline int is_dma(struct zone *zone) Index: linux-2.6.17-mm3/mm/vmstat.c =================================================================== --- linux-2.6.17-mm3.orig/mm/vmstat.c 2006-06-28 13:01:49.228931745 -0700 +++ linux-2.6.17-mm3/mm/vmstat.c 2006-06-28 13:25:50.326249068 -0700 @@ -394,11 +394,16 @@ struct seq_operations fragmentation_op = .show = frag_show, }; +#ifdef CONFIG_DMA_IS_DMA32 +#define MAKE_PER_LOW_ZONE_TEXTS(x) x "_dma", x "_normal" +#else +#define MAKE_PER_LOW_ZONE_TEXTS(x) x "_dma", x "_dma32", x "_normal" +#endif #ifdef CONFIG_HIGHMEM -#define MAKE_PER_ZONE_TEXTS(x) x "_dma", x "_dma32", x "_normal", x "_high" +#define MAKE_PER_ZONE_TEXTS(x) MAKE_PER_LOW_ZONE_TEXTS(x), x "_high" #else -#define MAKE_PER_ZONE_TEXTS(x) x "_dma", x "_dma32", x "_normal" +#define MAKE_PER_ZONE_TEXTS(x) MAKE_PER_LOW_ZONE_TEXTS(x) #endif static char *vmstat_text[] = { Index: linux-2.6.17-mm3/mm/page_alloc.c =================================================================== --- linux-2.6.17-mm3.orig/mm/page_alloc.c 2006-06-28 13:07:37.098976698 -0700 +++ linux-2.6.17-mm3/mm/page_alloc.c 2006-06-28 13:28:35.597294440 -0700 @@ -72,7 +72,13 @@ static void __free_pages_ok(struct page * TBD: should special case ZONE_DMA32 machines here - in those we normally * don't need any ZONE_NORMAL reservation */ -int sysctl_lowmem_reserve_ratio[ZONE_NORMAL + 1] = { 256, 256, 32 }; +int sysctl_lowmem_reserve_ratio[ZONE_NORMAL + 1] = { + 256, +#ifndef CONFIG_DMA_IS_DMA32 + 256, +#endif + 32 +}; EXPORT_SYMBOL(totalram_pages); @@ -85,7 +91,9 @@ EXPORT_SYMBOL(zone_table); static char *zone_names[MAX_NR_ZONES] = { "DMA", +#ifndef CONFIG_DMA_IS_DMA32 "DMA32", +#endif "Normal", #ifdef CONFIG_HIGHMEM "HighMem" @@ -1418,8 +1426,10 @@ static inline int highest_zone(int zone_ if (zone_bits & (__force int)__GFP_HIGHMEM) res = ZONE_HIGHMEM; #endif +#ifndef CONFIG_DMA_IS_DMA32 if (zone_bits & (__force int)__GFP_DMA32) res = ZONE_DMA32; +#endif if (zone_bits & (__force int)__GFP_DMA) res = ZONE_DMA; return res; Index: linux-2.6.17-mm3/include/linux/vmstat.h =================================================================== --- linux-2.6.17-mm3.orig/include/linux/vmstat.h 2006-06-28 12:59:04.179561941 -0700 +++ linux-2.6.17-mm3/include/linux/vmstat.h 2006-06-28 13:23:52.897952130 -0700 @@ -18,10 +18,16 @@ * generated will simply be the increment of a global address. */ +#ifdef CONFIG_DMA_IS_DMA32 +#define FOR_ALL_LOW_ZONES(x) x##_DMA, x##_NORMAL +#else +#define FOR_ALL_LOW_ZONES(x) x##_DMA, x##_DMA32, x##_NORMAL +#endif + #ifdef CONFIG_HIGHMEM -#define FOR_ALL_ZONES(x) x##_DMA, x##_DMA32, x##_NORMAL, x##_HIGH +#define FOR_ALL_ZONES(x) FOR_ALL_LOW_ZONES(x), x##_NORMAL #else -#define FOR_ALL_ZONES(x) x##_DMA, x##_DMA32, x##_NORMAL +#define FOR_ALL_ZONES(x) FOR_ALL_LOW_ZONES(x) #endif enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,