37 lines
1.3 KiB
Diff
37 lines
1.3 KiB
Diff
From: Ben Hutchings <ben@decadent.org.uk>
|
|
Date: Mon, 11 Feb 2013 00:56:24 +0000
|
|
Subject: mm: Try harder to allocate vmemmap blocks
|
|
Bug-Debian: http://bugs.debian.org/699913
|
|
|
|
Hot-adding memory on x86_64 normally requires huge page allocation.
|
|
When this is done to a VM guest, it's usually because the system is
|
|
already tight on memory, so the request tends to fail. Try to avoid
|
|
this by adding __GFP_REPEAT to the allocation flags.
|
|
|
|
Reported-and-tested-by: Bernhard Schmidt <Bernhard.Schmidt@lrz.de>
|
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
---
|
|
mm/sparse-vmemmap.c | 8 +++++---
|
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
|
|
index 1b7e22a..22b7e18 100644
|
|
--- a/mm/sparse-vmemmap.c
|
|
+++ b/mm/sparse-vmemmap.c
|
|
@@ -53,10 +53,12 @@ void * __meminit vmemmap_alloc_block(unsigned long size, int node)
|
|
struct page *page;
|
|
|
|
if (node_state(node, N_HIGH_MEMORY))
|
|
- page = alloc_pages_node(node,
|
|
- GFP_KERNEL | __GFP_ZERO, get_order(size));
|
|
+ page = alloc_pages_node(
|
|
+ node, GFP_KERNEL | __GFP_ZERO | __GFP_REPEAT,
|
|
+ get_order(size));
|
|
else
|
|
- page = alloc_pages(GFP_KERNEL | __GFP_ZERO,
|
|
+ page = alloc_pages(
|
|
+ GFP_KERNEL | __GFP_ZERO | __GFP_REPEAT,
|
|
get_order(size));
|
|
if (page)
|
|
return page_address(page);
|