summaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorZhang Yanfei <zhangyanfei@cn.fujitsu.com>2013-11-05 16:55:40 +1100
committerStephen Rothwell <sfr@canb.auug.org.au>2013-11-05 16:55:40 +1100
commit13d2f7910ca46234c7973065ad9a12cbcf027120 (patch)
tree230b266c4aa5b3583fbfbb7a9ff89b0b5d237343 /mm
parentc855fe44b6b783d8d3619146fbd6045306cb40d7 (diff)
mm-sparsemem-fix-a-bug-in-free_map_bootmem-when-config_sparsemem_vmemmap-v2
v2: Fix a bug introduced in v1 patch. Thanks wanpeng! Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> Cc: Wen Congyang <wency@cn.fujitsu.com> Cc: Tang Chen <tangchen@cn.fujitsu.com> Cc: Toshi Kani <toshi.kani@hp.com> Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com> Cc: Yinghai Lu <yinghai@kernel.org> Cc: Yasunori Goto <y-goto@jp.fujitsu.com> Cc: Andy Whitcroft <apw@shadowen.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/sparse.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/mm/sparse.c b/mm/sparse.c
index 908c13435627..8cc7be0e9590 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -651,10 +651,11 @@ static void __kfree_section_memmap(struct page *memmap)
static void free_map_bootmem(struct page *memmap)
{
unsigned long maps_section_nr, removing_section_nr, i;
- unsigned long magic;
+ unsigned long magic, nr_pages;
struct page *page = virt_to_page(memmap);
- unsigned long nr_pages = get_order(sizeof(struct page) *
- PAGES_PER_SECTION);
+
+ nr_pages = PAGE_ALIGN(PAGES_PER_SECTION * sizeof(struct page))
+ >> PAGE_SHIFT;
for (i = 0; i < nr_pages; i++, page++) {
magic = (unsigned long) page->lru.next;