[PATCH] powerpc: msi: mark bitmap with kmemleak_not_leak()

Catalin Marinas catalin.marinas at arm.com
Mon Sep 14 19:15:30 AEST 2015


On Mon, Sep 14, 2015 at 04:04:37PM +1000, Michael Ellerman wrote:
> On Sun, 2015-09-13 at 21:36 +0300, Denis Kirjanov wrote:
> > During the MSI bitmap test on boot kmemleak spews the following trace:
> > 
> > unreferenced object 0xc00000016e86c900 (size 64):
> >     comm "swapper/0", pid 1, jiffies 4294893173 (age 518.024s)
> >     hex dump (first 32 bytes):
> > 	00 00 01 ff 7f ff 7f 37 00 00 00 00 00 00 00 00
> > 	.......7........
> > 	ff ff ff ff ff ff ff ff 01 ff ff ff ff ff ff ff
> > 	................
> > 	backtrace:
> > 	[<c00000000003eebc>] .zalloc_maybe_bootmem+0x3c/0x380
> > 	[<c000000000042d6c>] .msi_bitmap_alloc+0x3c/0xb0
> > 	[<c000000000a9aff8>]
> > 	.msi_bitmap_selftest+0x30/0x2b4
> > 	[<c0000000000090f4>]
> > 	.do_one_initcall+0xd4/0x270
> > 	[<c000000000a8e250>]
> > 	.kernel_init_freeable+0x1a0/0x280
> > 	[<c000000000009b5c>]
> > 	.kernel_init+0x1c/0x120
> > 	[<c000000000007fbc>]
> > 	.ret_from_kernel_thread+0x58/0x9c
> > 
> > The comment in msi_bitmap_free() states that we can't free
> > the bitmap so mark it with the kmemleak_not_leak().
> 
> Yeah, and I've always hated that comment :)
> 
> I assume it's still true now that we don't use bootmem?

If it's not bootmem, it's probably memblock. Looking at the code, it
seems that msi_bitmap_free() cannot make the distinction between a slab
allocation and a bootmem/memblock one (allocated via
zalloc_maybe_bootmem).

You could add some flag to struct msi_bitmap based on mem_init_done to
be able to reclaim some slab memory later. If the bitmap is small and
such allocation doesn't happen outside boot, it may not be worth the
effort.

-- 
Catalin



More information about the Linuxppc-dev mailing list