--- sparse-dave/arch/i386/mm/discontig.c | 22 ++++++++++------------ 1 files changed, 10 insertions(+), 12 deletions(-) diff -puN arch/i386/mm/discontig.c~collapse-if arch/i386/mm/discontig.c --- sparse/arch/i386/mm/discontig.c~collapse-if 2005-02-21 15:53:54.000000000 -0800 +++ sparse-dave/arch/i386/mm/discontig.c 2005-02-21 15:54:03.000000000 -0800 @@ -401,24 +401,22 @@ void __init zone_sizes_init(void) max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT; - if (node_has_online_mem(nid)){ - if (start > low) { + if ((start > low) || !node_has_online_mem(nid)) { #ifdef CONFIG_HIGHMEM BUG_ON(start > high); zones_size[ZONE_HIGHMEM] = high - start; #endif - } else { - if (low < max_dma) - zones_size[ZONE_DMA] = low; - else { - BUG_ON(max_dma > low); - BUG_ON(low > high); - zones_size[ZONE_DMA] = max_dma; - zones_size[ZONE_NORMAL] = low - max_dma; + } else { + if (low < max_dma) + zones_size[ZONE_DMA] = low; + else { + BUG_ON(max_dma > low); + BUG_ON(low > high); + zones_size[ZONE_DMA] = max_dma; + zones_size[ZONE_NORMAL] = low - max_dma; #ifdef CONFIG_HIGHMEM - zones_size[ZONE_HIGHMEM] = high - low; + zones_size[ZONE_HIGHMEM] = high - low; #endif - } } } _