提交 09ae1f58 编写于 作者: C Christoph Lameter 提交者: Linus Torvalds

[PATCH] optional ZONE_DMA: optional ZONE_DMA for ia64

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: NChristoph Lameter <clameter@sgi.com>
Cc: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 4b51d669
...@@ -25,8 +25,8 @@ config 64BIT ...@@ -25,8 +25,8 @@ config 64BIT
default y default y
config ZONE_DMA config ZONE_DMA
bool def_bool y
default y depends on !IA64_SGI_SN2
config MMU config MMU
bool bool
......
...@@ -259,9 +259,11 @@ paging_init (void) ...@@ -259,9 +259,11 @@ paging_init (void)
num_physpages = 0; num_physpages = 0;
efi_memmap_walk(count_pages, &num_physpages); 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)); 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; max_zone_pfns[ZONE_DMA] = max_dma;
#endif
max_zone_pfns[ZONE_NORMAL] = max_low_pfn; max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
#ifdef CONFIG_VIRTUAL_MEM_MAP #ifdef CONFIG_VIRTUAL_MEM_MAP
......
...@@ -37,7 +37,9 @@ struct early_node_data { ...@@ -37,7 +37,9 @@ struct early_node_data {
unsigned long pernode_size; unsigned long pernode_size;
struct bootmem_data bootmem_data; struct bootmem_data bootmem_data;
unsigned long num_physpages; unsigned long num_physpages;
#ifdef CONFIG_ZONE_DMA
unsigned long num_dma_physpages; unsigned long num_dma_physpages;
#endif
unsigned long min_pfn; unsigned long min_pfn;
unsigned long max_pfn; unsigned long max_pfn;
}; };
...@@ -633,9 +635,11 @@ static __init int count_node_pages(unsigned long start, unsigned long len, int n ...@@ -633,9 +635,11 @@ static __init int count_node_pages(unsigned long start, unsigned long len, int n
unsigned long end = start + len; unsigned long end = start + len;
mem_data[node].num_physpages += len >> PAGE_SHIFT; mem_data[node].num_physpages += len >> PAGE_SHIFT;
#ifdef CONFIG_ZONE_DMA
if (start <= __pa(MAX_DMA_ADDRESS)) if (start <= __pa(MAX_DMA_ADDRESS))
mem_data[node].num_dma_physpages += mem_data[node].num_dma_physpages +=
(min(end, __pa(MAX_DMA_ADDRESS)) - start) >>PAGE_SHIFT; (min(end, __pa(MAX_DMA_ADDRESS)) - start) >>PAGE_SHIFT;
#endif
start = GRANULEROUNDDOWN(start); start = GRANULEROUNDDOWN(start);
start = ORDERROUNDDOWN(start); start = ORDERROUNDDOWN(start);
end = GRANULEROUNDUP(end); end = GRANULEROUNDUP(end);
...@@ -688,7 +692,9 @@ void __init paging_init(void) ...@@ -688,7 +692,9 @@ void __init paging_init(void)
} }
memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
#ifdef CONFIG_ZONE_DMA
max_zone_pfns[ZONE_DMA] = max_dma; max_zone_pfns[ZONE_DMA] = max_dma;
#endif
max_zone_pfns[ZONE_NORMAL] = max_pfn; max_zone_pfns[ZONE_NORMAL] = max_pfn;
free_area_init_nodes(max_zone_pfns); free_area_init_nodes(max_zone_pfns);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册