diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2010-07-19 11:54:15 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-08-02 10:29:50 -0700 |
commit | 105adbca9af012dc51b41a1fbea71e1b6d7ebc17 (patch) | |
tree | 3048556f95b54c42939ae337a93c07036a074ee3 | |
parent | a0067e0cd98be2022d3ff5c41d4f5a24ff48918f (diff) | |
download | lwn-105adbca9af012dc51b41a1fbea71e1b6d7ebc17.tar.gz lwn-105adbca9af012dc51b41a1fbea71e1b6d7ebc17.zip |
kmemleak: Add support for NO_BOOTMEM configurations
commit 9078370c0d2cfe4a905aa34f398bbb0d65921a2b upstream.
With commits 08677214 and 59be5a8e, alloc_bootmem()/free_bootmem() and
friends use the early_res functions for memory management when
NO_BOOTMEM is enabled. This patch adds the kmemleak calls in the
corresponding code paths for bootmem allocations.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>
Acked-by: Yinghai Lu <yinghai@kernel.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | kernel/early_res.c | 6 | ||||
-rw-r--r-- | mm/page_alloc.c | 5 |
2 files changed, 11 insertions, 0 deletions
diff --git a/kernel/early_res.c b/kernel/early_res.c index 31aa9332ef3f..7bfae887f211 100644 --- a/kernel/early_res.c +++ b/kernel/early_res.c @@ -7,6 +7,8 @@ #include <linux/bootmem.h> #include <linux/mm.h> #include <linux/early_res.h> +#include <linux/slab.h> +#include <linux/kmemleak.h> /* * Early reserved memory areas. @@ -319,6 +321,8 @@ void __init free_early(u64 start, u64 end) struct early_res *r; int i; + kmemleak_free_part(__va(start), end - start); + i = find_overlapped_early(start, end); r = &early_res[i]; if (i >= max_early_res || r->end != end || r->start != start) @@ -333,6 +337,8 @@ void __init free_early_partial(u64 start, u64 end) struct early_res *r; int i; + kmemleak_free_part(__va(start), end - start); + if (start == end) return; diff --git a/mm/page_alloc.c b/mm/page_alloc.c index d03c946d5566..4364d59a48d6 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3440,6 +3440,11 @@ void * __init __alloc_memory_core_early(int nid, u64 size, u64 align, ptr = phys_to_virt(addr); memset(ptr, 0, size); reserve_early_without_check(addr, addr + size, "BOOTMEM"); + /* + * The min_count is set to 0 so that bootmem allocated blocks + * are never reported as leaks. + */ + kmemleak_alloc(ptr, size, 0, 0); return ptr; } |