Index: linux-2.6.17-mm3/include/linux/mmzone.h =================================================================== --- linux-2.6.17-mm3.orig/include/linux/mmzone.h 2006-06-27 09:40:23.410775246 -0700 +++ linux-2.6.17-mm3/include/linux/mmzone.h 2006-06-28 12:08:42.156631090 -0700 @@ -90,9 +90,14 @@ struct per_cpu_pageset { #define ZONE_DMA 0 #define ZONE_DMA32 1 #define ZONE_NORMAL 2 +#ifdef CONFIG_HIGHMEM #define ZONE_HIGHMEM 3 #define MAX_NR_ZONES 4 /* Sync this with ZONES_SHIFT */ +#else +#define MAX_NR_ZONES 3 +#endif + #define ZONES_SHIFT 2 /* ceil(log2(MAX_NR_ZONES)) */ @@ -376,9 +381,14 @@ static inline int populated_zone(struct static inline int is_highmem_idx(int idx) { +#ifdef CONFIG_HIGHMEM return (idx == ZONE_HIGHMEM); +#else + return 0; +#endif } + static inline int is_normal_idx(int idx) { return (idx == ZONE_NORMAL); @@ -392,7 +402,11 @@ static inline int is_normal_idx(int idx) */ static inline int is_highmem(struct zone *zone) { +#ifdef CONFIG_HIGHMEM return zone == zone->zone_pgdat->node_zones + ZONE_HIGHMEM; +#else + return 0; +#endif } static inline int is_normal(struct zone *zone) @@ -415,7 +429,7 @@ struct ctl_table; struct file; int min_free_kbytes_sysctl_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); -extern int sysctl_lowmem_reserve_ratio[MAX_NR_ZONES-1]; +extern int sysctl_lowmem_reserve_ratio[ZONE_NORMAL + 1]; int lowmem_reserve_ratio_sysctl_handler(struct ctl_table *, int, struct file *, void __user *, size_t *, loff_t *); int percpu_pagelist_fraction_sysctl_handler(struct ctl_table *, int, struct file *, Index: linux-2.6.17-mm3/mm/page_alloc.c =================================================================== --- linux-2.6.17-mm3.orig/mm/page_alloc.c 2006-06-27 09:40:25.604975349 -0700 +++ linux-2.6.17-mm3/mm/page_alloc.c 2006-06-28 12:27:57.525451515 -0700 @@ -52,7 +52,9 @@ EXPORT_SYMBOL(node_online_map); nodemask_t node_possible_map __read_mostly = NODE_MASK_ALL; EXPORT_SYMBOL(node_possible_map); unsigned long totalram_pages __read_mostly; +#ifdef CONFIG_HIGHMEM unsigned long totalhigh_pages __read_mostly; +#endif unsigned long totalreserve_pages __read_mostly; long nr_swap_pages; int percpu_pagelist_fraction; @@ -70,7 +72,7 @@ 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[MAX_NR_ZONES-1] = { 256, 256, 32 }; +int sysctl_lowmem_reserve_ratio[ZONE_NORMAL + 1] = { 256, 256, 32 }; EXPORT_SYMBOL(totalram_pages); @@ -81,7 +83,14 @@ EXPORT_SYMBOL(totalram_pages); struct zone *zone_table[1 << ZONETABLE_SHIFT] __read_mostly; EXPORT_SYMBOL(zone_table); -static char *zone_names[MAX_NR_ZONES] = { "DMA", "DMA32", "Normal", "HighMem" }; +static char *zone_names[MAX_NR_ZONES] = { + "DMA", + "DMA32", + "Normal", +#ifdef CONFIG_HIGHMEM + "HighMem" +#endif +}; int min_free_kbytes = 1024; unsigned long __meminitdata nr_kernel_pages; @@ -1250,8 +1259,13 @@ void si_meminfo_node(struct sysinfo *val val->totalram = pgdat->node_present_pages; val->freeram = nr_free_pages_pgdat(pgdat); +#ifdef CONFIG_HIGHMEM val->totalhigh = pgdat->node_zones[ZONE_HIGHMEM].present_pages; val->freehigh = pgdat->node_zones[ZONE_HIGHMEM].free_pages; +#else + val->totalhigh = 0; + val->freehigh = 0; +#endif val->mem_unit = PAGE_SIZE; } #endif @@ -1379,8 +1393,7 @@ static int __meminit build_zonelists_nod struct zonelist *zonelist, int nr_zones, int zone_type) { struct zone *zone; - - BUG_ON(zone_type > ZONE_HIGHMEM); + BUG_ON(zone_type >= MAX_NR_ZONES); do { zone = pgdat->node_zones + zone_type; @@ -1400,8 +1413,10 @@ static int __meminit build_zonelists_nod static inline int highest_zone(int zone_bits) { int res = ZONE_NORMAL; +#ifdef CONFIG_HIGHMEM if (zone_bits & (__force int)__GFP_HIGHMEM) res = ZONE_HIGHMEM; +#endif if (zone_bits & (__force int)__GFP_DMA32) res = ZONE_DMA32; if (zone_bits & (__force int)__GFP_DMA) @@ -2015,7 +2030,7 @@ static void __meminit free_area_init_cor if (zholes_size) realsize -= zholes_size[j]; - if (j < ZONE_HIGHMEM) + if (!is_highmem_idx(j)) nr_kernel_pages += realsize; nr_all_pages += realsize; Index: linux-2.6.17-mm3/mm/swap_prefetch.c =================================================================== --- linux-2.6.17-mm3.orig/mm/swap_prefetch.c 2006-06-27 09:40:25.624505390 -0700 +++ linux-2.6.17-mm3/mm/swap_prefetch.c 2006-06-28 12:08:42.158584094 -0700 @@ -277,8 +277,11 @@ static void examine_free_limits(void) ns = &sp_stat.node[z->zone_pgdat->node_id]; idx = zone_idx(z); - ns->lowfree[idx] = z->pages_high * 3 + - z->lowmem_reserve[ZONE_HIGHMEM]; + ns->lowfree[idx] = z->pages_high * 3 +#ifdef CONFIG_HIGHMEM + + z->lowmem_reserve[ZONE_HIGHMEM] +#endif +; ns->highfree[idx] = ns->lowfree[idx] + z->pages_high; if (z->free_pages > ns->highfree[idx]) { Index: linux-2.6.17-mm3/include/linux/vmstat.h =================================================================== --- linux-2.6.17-mm3.orig/include/linux/vmstat.h 2006-06-27 12:07:19.842119270 -0700 +++ linux-2.6.17-mm3/include/linux/vmstat.h 2006-06-28 12:09:53.487182115 -0700 @@ -18,7 +18,11 @@ * generated will simply be the increment of a global address. */ +#ifdef CONFIG_HIGHMEM #define FOR_ALL_ZONES(x) x##_DMA, x##_DMA32, x##_NORMAL, x##_HIGH +#else +#define FOR_ALL_ZONES(x) x##_DMA, x##_DMA32, x##_NORMAL +#endif enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, FOR_ALL_ZONES(PGALLOC), Index: linux-2.6.17-mm3/mm/vmstat.c =================================================================== --- linux-2.6.17-mm3.orig/mm/vmstat.c 2006-06-28 10:32:14.441818620 -0700 +++ linux-2.6.17-mm3/mm/vmstat.c 2006-06-28 12:14:30.049144379 -0700 @@ -394,6 +394,12 @@ struct seq_operations fragmentation_op = .show = frag_show, }; +#ifdef CONFIG_HIGHMEM +#define MAKE_ZONE_TEXTS(x) x "_dma", x "_dma32", x "_normal", x "_high" +#else +#define MAKE_ZONE_TEXTS(x) x "_dma", x "_dma32", x "_normal" +#endif + static char *vmstat_text[] = { /* Zoned VM counters */ "nr_anon_pages", @@ -421,10 +427,7 @@ static char *vmstat_text[] = { "pswpin", "pswpout", - "pgalloc_dma", - "pgalloc_dma32", - "pgalloc_normal", - "pgalloc_high", + MAKE_ZONE_TEXTS("pgalloc"), "pgfree", "pgactivate", @@ -433,25 +436,10 @@ static char *vmstat_text[] = { "pgfault", "pgmajfault", - "pgrefill_dma", - "pgrefill_dma32", - "pgrefill_normal", - "pgrefill_high", - - "pgsteal_dma", - "pgsteal_dma32", - "pgsteal_normal", - "pgsteal_high", - - "pgscan_kswapd_dma", - "pgscan_kswapd_dma32", - "pgscan_kswapd_normal", - "pgscan_kswapd_high", - - "pgscan_direct_dma", - "pgscan_direct_dma32", - "pgscan_direct_normal", - "pgscan_direct_high", + MAKE_ZONE_TEXTS("pgrefill"), + MAKE_ZONE_TEXTS("pgsteal"), + MAKE_ZONE_TEXTS("pgscan_kswapd"), + MAKE_ZONE_TEXTS("pgscan_direct"), "pginodesteal", "slabs_scanned", Index: linux-2.6.17-mm3/include/linux/swap.h =================================================================== --- linux-2.6.17-mm3.orig/include/linux/swap.h 2006-06-27 09:40:23.782822527 -0700 +++ linux-2.6.17-mm3/include/linux/swap.h 2006-06-28 12:26:59.177505355 -0700 @@ -162,7 +162,11 @@ extern void swapin_readahead(swp_entry_t /* linux/mm/page_alloc.c */ extern unsigned long totalram_pages; +#ifdef CONFIG_HIGHMEM extern unsigned long totalhigh_pages; +#else +#define totalhigh_pages 0 +#endif extern unsigned long totalreserve_pages; extern long nr_swap_pages; extern unsigned int nr_free_pages(void);