From 52272fc3aaa2d60f0722a0915728bef7bfa408a5 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Thu, 14 Feb 2013 04:41:09 +0000 Subject: [PATCH] mm: Try harder to allocate vmemmap blocks (Closes: #699913) svn path=/dists/sid/linux/; revision=19803 --- debian/changelog | 1 + ...ry-harder-to-allocate-vmemmap-blocks.patch | 36 +++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 38 insertions(+) create mode 100644 debian/patches/bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch diff --git a/debian/changelog b/debian/changelog index 73a45d064..663955ff5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -131,6 +131,7 @@ linux (3.2.38-1) UNRELEASED; urgency=low * [x86] sound: Enable LINE6_USB as module (Closes: #700211) - Apply upstream changes up to Linux 3.8-rc1 * [armhf/mx5] Update description to mention i.MX53 + * mm: Try harder to allocate vmemmap blocks (Closes: #699913) [ Aurelien Jarno ] * [armhf/vexpress] Add kernel udebs. diff --git a/debian/patches/bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch b/debian/patches/bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch new file mode 100644 index 000000000..3bb44f14e --- /dev/null +++ b/debian/patches/bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch @@ -0,0 +1,36 @@ +From: Ben Hutchings +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 +Signed-off-by: Ben Hutchings +--- + 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); diff --git a/debian/patches/series b/debian/patches/series index 15d23ceb2..81a35f113 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -625,3 +625,4 @@ features/all/line6/0103-staging-line6-drop-variax-model_data-field.patch features/all/line6/0104-staging-line6-drop-dump-requests-from-variax-startup.patch features/all/line6/0105-staging-line6-drop-dump-requests-from-pod-startup.patch features/all/line6/0106-staging-line6-drop-unused-dumprequest-code.patch +bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch