From: Yee Lee <yee.lee@xxxxxxxxxxxx> Use MEMBLOCK_ALLOC_NOLEAKTRACE to skip kmemleak registration when the kfence pool is allocated from memblock. And the kmemleak_free later can be removed too. Signed-off-by: Yee Lee <yee.lee@xxxxxxxxxxxx> --- mm/kfence/core.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/mm/kfence/core.c b/mm/kfence/core.c index 4e7cd4c8e687..0d33d83f5244 100644 --- a/mm/kfence/core.c +++ b/mm/kfence/core.c @@ -600,14 +600,6 @@ static unsigned long kfence_init_pool(void) addr += 2 * PAGE_SIZE; } - /* - * The pool is live and will never be deallocated from this point on. - * Remove the pool object from the kmemleak object tree, as it would - * otherwise overlap with allocations returned by kfence_alloc(), which - * are registered with kmemleak through the slab post-alloc hook. - */ - kmemleak_free(__kfence_pool); - return 0; } @@ -831,8 +823,14 @@ void __init kfence_alloc_pool(void) { if (!kfence_sample_interval) return; - - __kfence_pool = memblock_alloc(KFENCE_POOL_SIZE, PAGE_SIZE); + /* + * The pool is live and will never be deallocated from this point on. + * Skip the pool object from the kmemleak object allocation, as it would + * otherwise overlap with allocations returned by kfence_alloc(), which + * are registered with kmemleak through the slab post-alloc hook. + */ + __kfence_pool = memblock_alloc_try_nid(KFENCE_POOL_SIZE, PAGE_SIZE, + MEMBLOCK_LOW_LIMIT, MEMBLOCK_ALLOC_NOLEAKTRACE, NUMA_NO_NODE); if (!__kfence_pool) pr_err("failed to allocate pool\n"); -- 2.18.0