If size is 0, then kmemleak object found for ignore object is not
properly working and ignore should work for create kmemleak object.
Fix the wrong kmemleak ignore usages in of_reserved_mem.
This removes below kmemleak warnings:
kmemleak: Not scanning unknown object at 0xffffffc0f4807000
kmemleak: Not scanning unknown object at 0xffffffc0f4800000
kmemleak: Not scanning unknown object at 0xffffffc007400000
...
[<
ffffff900af159b0>] kmemleak_no_scan+0xd8/0xe8
[<
ffffff900ba72d1c>] kmemleak_init+0x260/0x504
..
kmemleak: Early log backtrace:
log_early+0x1d8/0x268
kmemleak_no_scan+0xbc/0xe8
fdt_init_reserved_mem+0x8b4/0x928
early_init_fdt_scan_reserved_mem+0x100/0x13c
arm64_memblock_init+0x310/0x388
...
Change-Id: Idac1f672b06373f6eb7485d63b60747f2cf9f5b5
Fixes: commit
47a87b6930cd ("kmemleak: shouldn't scan reserved memory")
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
if (prop)
rmem->phandle = of_read_number(prop, len/4);
- if (rmem->size == 0)
+ if (rmem->size == 0) {
err = __reserved_mem_alloc_size(node, rmem->name,
&rmem->base, &rmem->size);
#ifdef CONFIG_AMLOGIC_MODIFY
- kmemleak_no_scan(phys_to_virt(rmem->base));
+ if (!err && rmem->size)
+ kmemleak_no_scan(phys_to_virt(rmem->base));
#endif
+ }
if (err == 0)
__reserved_mem_init_node(rmem);