X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=mm%2Fsparse-vmemmap.c;h=d9714bdcb4a387199a5875d9745999942a3aa4f8;hb=c84d6efd363a3948eb32ec40d46bab6338580454;hp=99c4f36eb8a33def3c713937cecb9cc51256359a;hpb=9dce07f1a441b77a15631cf0ed0238e0baa7ed64;p=safe%2Fjmp%2Flinux-2.6 diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 99c4f36..d9714bd 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -1,7 +1,7 @@ /* * Virtual Memory Map support * - * (C) 2007 sgi. Christoph Lameter . + * (C) 2007 sgi. Christoph Lameter. * * Virtual memory maps allow VM primitives pfn_to_page, page_to_pfn, * virt_to_page, page_address() to be implemented as a base offset @@ -48,8 +48,14 @@ void * __meminit vmemmap_alloc_block(unsigned long size, int node) { /* If the main allocator is up use that, fallback to bootmem. */ if (slab_is_available()) { - struct page *page = alloc_pages_node(node, + struct page *page; + + if (node_state(node, N_HIGH_MEMORY)) + page = alloc_pages_node(node, GFP_KERNEL | __GFP_ZERO, get_order(size)); + else + page = alloc_pages(GFP_KERNEL | __GFP_ZERO, + get_order(size)); if (page) return page_address(page); return NULL; @@ -64,7 +70,7 @@ void __meminit vmemmap_verify(pte_t *pte, int node, unsigned long pfn = pte_pfn(*pte); int actual_node = early_pfn_to_nid(pfn); - if (actual_node != node) + if (node_distance(actual_node, node) > LOCAL_DISTANCE) printk(KERN_WARNING "[%lx-%lx] potential offnode " "page_structs\n", start, end - 1); }