OSDN Git Service

arm64: Track no early_pgtable_alloc() for kmemleak
authorQian Cai <quic_qiancai@quicinc.com>
Fri, 5 Nov 2021 15:05:09 +0000 (11:05 -0400)
committerWill Deacon <will@kernel.org>
Mon, 8 Nov 2021 10:05:22 +0000 (10:05 +0000)
commitc6975d7cab5b903aadbc0f78f9af4fae1bd23a50
treedec15dc0f2491af529fa773022802cf2db727b43
parentaedad3e1c6ddec234b63cfb57ac231da0f680e50
arm64: Track no early_pgtable_alloc() for kmemleak

After switched page size from 64KB to 4KB on several arm64 servers here,
kmemleak starts to run out of early memory pool due to a huge number of
those early_pgtable_alloc() calls:

  kmemleak_alloc_phys()
  memblock_alloc_range_nid()
  memblock_phys_alloc_range()
  early_pgtable_alloc()
  init_pmd()
  alloc_init_pud()
  __create_pgd_mapping()
  __map_memblock()
  paging_init()
  setup_arch()
  start_kernel()

Increased the default value of DEBUG_KMEMLEAK_MEM_POOL_SIZE by 4 times
won't be enough for a server with 200GB+ memory. There isn't much
interesting to check memory leaks for those early page tables and those
early memory mappings should not reference to other memory. Hence, no
kmemleak false positives, and we can safely skip tracking those early
allocations from kmemleak like we did in the commit fed84c785270
("mm/memblock.c: skip kmemleak for kasan_init()") without needing to
introduce complications to automatically scale the value depends on the
runtime memory size etc. After the patch, the default value of
DEBUG_KMEMLEAK_MEM_POOL_SIZE becomes sufficient again.

Signed-off-by: Qian Cai <quic_qiancai@quicinc.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
Link: https://lore.kernel.org/r/20211105150509.7826-1-quic_qiancai@quicinc.com
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm/mm/kasan_init.c
arch/arm64/mm/kasan_init.c
arch/arm64/mm/mmu.c
include/linux/memblock.h
mm/memblock.c