diff options
| author | Shaohua Li <[email protected]> | 2009-09-22 00:01:19 +0000 |
|---|---|---|
| committer | Linus Torvalds <[email protected]> | 2009-09-22 14:17:26 +0000 |
| commit | f52407ce2deac76c87abc8211a63ea152ba72d54 (patch) | |
| tree | 6e3976fae721bd178d68d11750f7ad7f86d8feca /mm/sparse-vmemmap.c | |
| parent | memory hotplug: make pages from movable zone always isolatable (diff) | |
| download | kernel-f52407ce2deac76c87abc8211a63ea152ba72d54.tar.gz kernel-f52407ce2deac76c87abc8211a63ea152ba72d54.zip | |
memory hotplug: alloc page from other node in memory online
To initialize hotadded node, some pages are allocated. At that time, the
node hasn't memory, this makes the allocation always fail. In such case,
let's allocate pages from other nodes.
Signed-off-by: Shaohua Li <[email protected]>
Signed-off-by: Yakui Zhao <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: Christoph Lameter <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'mm/sparse-vmemmap.c')
| -rw-r--r-- | mm/sparse-vmemmap.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index a13ea6401ae7..d9714bdcb4a3 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -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; |
