]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
mm-sparsemem-fix-a-bug-in-free_map_bootmem-when-config_sparsemem_vmemmap-v2
authorZhang Yanfei <zhangyanfei@cn.fujitsu.com>
Tue, 5 Nov 2013 05:55:40 +0000 (16:55 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 5 Nov 2013 05:55:40 +0000 (16:55 +1100)
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>
mm/sparse.c

index 908c13435627d7af22e951ccf21ec3f8e0f1df28..8cc7be0e95906c18068e926490a8509651e3904c 100644 (file)
@@ -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;