From: Ben Hutchings <[email protected]>

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 <[email protected]>
Reference: http://bugs.debian.org/699913
Signed-off-by: Ben Hutchings <[email protected]>
Signed-off-by: Johannes Weiner <[email protected]>
---
 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);
-- 
1.7.11.7

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to