diff options
author | Zhang Yanfei <zhangyanfei@cn.fujitsu.com> | 2013-11-05 16:55:40 +1100 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2013-11-05 16:55:40 +1100 |
commit | 13d2f7910ca46234c7973065ad9a12cbcf027120 (patch) | |
tree | 230b266c4aa5b3583fbfbb7a9ff89b0b5d237343 /mm | |
parent | c855fe44b6b783d8d3619146fbd6045306cb40d7 (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.c | 7 |
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; |