]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bootmem: remove the vmemmap pages from kmemleak in free_bootmem_page
authorLiu Shixin <liushixin2@huawei.com>
Thu, 18 Aug 2022 13:21:04 +0000 (21:21 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 22 Aug 2022 22:57:13 +0000 (15:57 -0700)
The vmemmap pages is marked by kmemleak when allocated from memblock.
Remove it from kmemleak when free the page.  Otherwise, when we reuse the
page, kmemleak may report such an error and then stop working.

 kmemleak: Cannot insert 0xffff98fb6eab3d40 into the object search tree (overlaps existing)
 kmemleak: Kernel memory leak detector disabled
 kmemleak: Object 0xffff98fb6be00000 (size 335544320):
 kmemleak:   comm "swapper", pid 0, jiffies 4294892296
 kmemleak:   min_count = 0
 kmemleak:   count = 0
 kmemleak:   flags = 0x1
 kmemleak:   checksum = 0
 kmemleak:   backtrace:

Link: https://lkml.kernel.org/r/20220818132104.2144770-1-liushixin2@huawei.com
Fixes: f41f2ed43ca5 ("mm: hugetlb: free the vmemmap pages associated with each HugeTLB page")
Signed-off-by: Liu Shixin <liushixin2@huawei.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Mike Kravetz <mike.kravetz@oracle.com>
Cc: Muchun Song <songmuchun@bytedance.com>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/bootmem_info.h

index cc35d010fa949cace2d060b9c9e43d8bc794f2b4..899bc56948f7adc466f460d67928e4fbe20c9d91 100644 (file)
@@ -3,6 +3,7 @@
 #define __LINUX_BOOTMEM_INFO_H
 
 #include <linux/mm.h>
+#include <linux/kmemleak.h>
 
 /*
  * Types for free bootmem stored in page->lru.next. These have to be in
@@ -38,9 +39,10 @@ static inline void free_bootmem_page(struct page *page)
         */
        VM_BUG_ON_PAGE(page_ref_count(page) != 2, page);
 
-       if (magic == SECTION_INFO || magic == MIX_SECTION_INFO)
+       if (magic == SECTION_INFO || magic == MIX_SECTION_INFO) {
+               kmemleak_free_part(page_to_virt(page), PAGE_SIZE);
                put_page_bootmem(page);
-       else
+       else
                VM_BUG_ON_PAGE(1, page);
 }
 #else