From: Christoph Lameter ZONE_DMA less operation for IA64 SGI platform Disable ZONE_DMA for SGI SN2. All memory is addressable by all devices and we do not need any special memory pool. Signed-off-by: Christoph Lameter Cc: "Luck, Tony" Signed-off-by: Andrew Morton --- arch/ia64/Kconfig | 4 ++-- arch/ia64/mm/contig.c | 4 +++- arch/ia64/mm/discontig.c | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff -puN arch/ia64/Kconfig~optional-zone_dma-for-ia64 arch/ia64/Kconfig --- a/arch/ia64/Kconfig~optional-zone_dma-for-ia64 +++ a/arch/ia64/Kconfig @@ -23,8 +23,8 @@ config 64BIT default y config ZONE_DMA - bool - default y + def_bool y + depends on !IA64_SGI_SN2 config MMU bool diff -puN arch/ia64/mm/contig.c~optional-zone_dma-for-ia64 arch/ia64/mm/contig.c --- a/arch/ia64/mm/contig.c~optional-zone_dma-for-ia64 +++ a/arch/ia64/mm/contig.c @@ -232,9 +232,11 @@ paging_init (void) num_physpages = 0; efi_memmap_walk(count_pages, &num_physpages); - max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT; memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); +#ifdef CONFIG_ZONE_DMA + max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT; max_zone_pfns[ZONE_DMA] = max_dma; +#endif max_zone_pfns[ZONE_NORMAL] = max_low_pfn; #ifdef CONFIG_VIRTUAL_MEM_MAP diff -puN arch/ia64/mm/discontig.c~optional-zone_dma-for-ia64 arch/ia64/mm/discontig.c --- a/arch/ia64/mm/discontig.c~optional-zone_dma-for-ia64 +++ a/arch/ia64/mm/discontig.c @@ -37,7 +37,9 @@ struct early_node_data { unsigned long pernode_size; struct bootmem_data bootmem_data; unsigned long num_physpages; +#ifdef CONFIG_ZONE_DMA unsigned long num_dma_physpages; +#endif unsigned long min_pfn; unsigned long max_pfn; }; @@ -656,9 +658,11 @@ static __init int count_node_pages(unsig add_active_range(node, start >> PAGE_SHIFT, end >> PAGE_SHIFT); mem_data[node].num_physpages += len >> PAGE_SHIFT; +#ifdef CONFIG_ZONE_DMA if (start <= __pa(MAX_DMA_ADDRESS)) mem_data[node].num_dma_physpages += (min(end, __pa(MAX_DMA_ADDRESS)) - start) >>PAGE_SHIFT; +#endif start = GRANULEROUNDDOWN(start); start = ORDERROUNDDOWN(start); end = GRANULEROUNDUP(end); @@ -710,7 +714,9 @@ void __init paging_init(void) } memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); +#ifdef CONFIG_ZONE_DMA max_zone_pfns[ZONE_DMA] = max_dma; +#endif max_zone_pfns[ZONE_NORMAL] = max_pfn; free_area_init_nodes(max_zone_pfns); _