Re: [PATCH v3 0/3] arm64: support page mapping percpu first chunk allocator

From: Kefeng Wang
Date: Sun Aug 22 2021 - 22:29:39 EST



On 2021/8/12 14:07, Kefeng Wang wrote:
Hi Catalin and Will,

The drivers/base/arch_numa.c is only shared by riscv and arm64,

and the change from patch2 won't broke riscv.

Could all patches be merged by arm64 tree? or any new comments?

Kindly ping...


Many thanks.

On 2021/8/9 17:37, Kefeng Wang wrote:
Percpu embedded first chunk allocator is the firstly option, but it
could fails on ARM64, eg,
   "percpu: max_distance=0x5fcfdc640000 too large for vmalloc space 0x781fefff0000"
   "percpu: max_distance=0x600000540000 too large for vmalloc space 0x7dffb7ff0000"
   "percpu: max_distance=0x5fff9adb0000 too large for vmalloc space 0x5dffb7ff0000"

then we could meet "WARNING: CPU: 15 PID: 461 at vmalloc.c:3087 pcpu_get_vm_areas+0x488/0x838",
even the system could not boot successfully.

Let's implement page mapping percpu first chunk allocator as a fallback
to the embedding allocator to increase the robustness of the system.

Also fix a crash when both NEED_PER_CPU_PAGE_FIRST_CHUNK and KASAN_VMALLOC enabled.

Tested on ARM64 qemu with cmdline "percpu_alloc=page" based on v5.14-rc5.

v3:
- search for a range that fits instead of always picking the end from
   vmalloc area suggested by Catalin.
- use NUMA_NO_NODE to avoid "virt_to_phys used for non-linear address:"
   issue in arm64 kasan_populate_early_vm_area_shadow().
- add Acked-by: Marco Elver <elver@xxxxxxxxxx> to patch v3

V2:
- fix build error when CONFIG_KASAN disabled, found by lkp@xxxxxxxxx
- drop wrong __weak comment from kasan_populate_early_vm_area_shadow(),
   found by Marco Elver <elver@xxxxxxxxxx>

Kefeng Wang (3):
   vmalloc: Choose a better start address in vm_area_register_early()
   arm64: Support page mapping percpu first chunk allocator
   kasan: arm64: Fix pcpu_page_first_chunk crash with KASAN_VMALLOC

  arch/arm64/Kconfig         |  4 ++
  arch/arm64/mm/kasan_init.c | 16 ++++++++
  drivers/base/arch_numa.c   | 82 +++++++++++++++++++++++++++++++++-----
  include/linux/kasan.h      |  6 +++
  mm/kasan/init.c            |  5 +++
  mm/vmalloc.c               | 17 +++++---
  6 files changed, 115 insertions(+), 15 deletions(-)