Patch series "mm: percpu: Cleanup percpu first chunk function".
When supporting page mapping percpu first chunk allocator on arm64, we
found there are lots of duplicated codes in percpu embed/page first chunk
allocator.  This patchset is aimed to cleanup them and should no function
change.
The currently supported status about 'embed' and 'page' in Archs shows
below,
	embed: NEED_PER_CPU_PAGE_FIRST_CHUNK
	page:  NEED_PER_CPU_EMBED_FIRST_CHUNK
		embed	page
	------------------------
	arm64	  Y	 Y
	mips	  Y	 N
	powerpc	  Y	 Y
	riscv	  Y	 N
	sparc	  Y	 Y
	x86	  Y	 Y
	------------------------
There are two interfaces about percpu first chunk allocator,
 extern int __init pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size,
                                size_t atom_size,
                                pcpu_fc_cpu_distance_fn_t cpu_distance_fn,
-                               pcpu_fc_alloc_fn_t alloc_fn,
-                               pcpu_fc_free_fn_t free_fn);
+                               pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn);
 extern int __init pcpu_page_first_chunk(size_t reserved_size,
-                               pcpu_fc_alloc_fn_t alloc_fn,
-                               pcpu_fc_free_fn_t free_fn,
-                               pcpu_fc_populate_pte_fn_t populate_pte_fn);
+                               pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn);
The pcpu_fc_alloc_fn_t/pcpu_fc_free_fn_t is killed, we provide generic
pcpu_fc_alloc() and pcpu_fc_free() function, which are called in the
pcpu_embed/page_first_chunk().
1) For pcpu_embed_first_chunk(), pcpu_fc_cpu_to_node_fn_t is needed to be
   provided when archs supported NUMA.
2) For pcpu_page_first_chunk(), the pcpu_fc_populate_pte_fn_t is killed too,
   a generic pcpu_populate_pte() which marked '__weak' is provided, if you
   need a different function to populate pte on the arch(like x86), please
   provide its own implementation.
[1] https://github.com/kevin78/linux.git percpu-cleanup
This patch (of 4):
The HAVE_SETUP_PER_CPU_AREA/NEED_PER_CPU_EMBED_FIRST_CHUNK/
NEED_PER_CPU_PAGE_FIRST_CHUNK/USE_PERCPU_NUMA_NODE_ID configs, which have
duplicate definitions on platforms that subscribe it.
Move them into mm, drop these redundant definitions and instead just
select it on applicable platforms.
Link: https://lkml.kernel.org/r/20211216112359.103822-1-wangkefeng.wang@huawei.com
Link: https://lkml.kernel.org/r/20211216112359.103822-2-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>	[arm64]
Cc: Will Deacon <will@kernel.org>
Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Dennis Zhou <dennis@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
        select GENERIC_ARCH_NUMA
        select ACPI_NUMA if ACPI
        select OF_NUMA
+       select HAVE_SETUP_PER_CPU_AREA
+       select NEED_PER_CPU_EMBED_FIRST_CHUNK
+       select NEED_PER_CPU_PAGE_FIRST_CHUNK
+       select USE_PERCPU_NUMA_NODE_ID
        help
          Enable NUMA (Non-Uniform Memory Access) support.
 
          Specify the maximum number of NUMA Nodes available on the target
          system.  Increases memory reserved to accommodate various tables.
 
-config USE_PERCPU_NUMA_NODE_ID
-       def_bool y
-       depends on NUMA
-
-config HAVE_SETUP_PER_CPU_AREA
-       def_bool y
-       depends on NUMA
-
-config NEED_PER_CPU_EMBED_FIRST_CHUNK
-       def_bool y
-       depends on NUMA
-
-config NEED_PER_CPU_PAGE_FIRST_CHUNK
-       def_bool y
-       depends on NUMA
-
 source "kernel/Kconfig.hz"
 
 config ARCH_SPARSEMEM_ENABLE
 
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_DYNAMIC_FTRACE if (!ITANIUM)
        select HAVE_FUNCTION_TRACER
+       select HAVE_SETUP_PER_CPU_AREA
        select TTY
        select HAVE_ARCH_TRACEHOOK
        select HAVE_VIRT_CPU_ACCOUNTING
        bool
        default y
 
-config HAVE_SETUP_PER_CPU_AREA
-       def_bool y
-
 config DMI
        bool
        default y
        bool "NUMA support"
        depends on !FLATMEM
        select SMP
+       select USE_PERCPU_NUMA_NODE_ID
        help
          Say Y to compile the kernel to support NUMA (Non-Uniform Memory
          Access).  This option is for configuring high-end multiprocessor
        def_bool y
        depends on NUMA
 
-config USE_PERCPU_NUMA_NODE_ID
-       def_bool y
-       depends on NUMA
-
 config HAVE_MEMORYLESS_NODES
        def_bool NUMA
 
 
        bool "NUMA Support"
        depends on SYS_SUPPORTS_NUMA
        select SMP
+       select HAVE_SETUP_PER_CPU_AREA
+       select NEED_PER_CPU_EMBED_FIRST_CHUNK
        help
          Say Y to compile the kernel to support NUMA (Non-Uniform Memory
          Access).  This option improves performance on systems with more
 config SYS_SUPPORTS_NUMA
        bool
 
-config HAVE_SETUP_PER_CPU_AREA
-       def_bool y
-       depends on NUMA
-
-config NEED_PER_CPU_EMBED_FIRST_CHUNK
-       def_bool y
-       depends on NUMA
-
 config RELOCATABLE
        bool "Relocatable kernel"
        depends on SYS_SUPPORTS_RELOCATABLE
 
        default 9 if PPC_16K_PAGES      #  9 = 23 (8MB) - 14 (16K)
        default 11                      # 11 = 23 (8MB) - 12 (4K)
 
-config HAVE_SETUP_PER_CPU_AREA
-       def_bool PPC64
-
-config NEED_PER_CPU_EMBED_FIRST_CHUNK
-       def_bool y if PPC64
-
-config NEED_PER_CPU_PAGE_FIRST_CHUNK
-       def_bool y if PPC64
-
 config NR_IRQS
        int "Number of virtual interrupt numbers"
        range 32 1048576
        select HAVE_REGS_AND_STACK_ACCESS_API
        select HAVE_RELIABLE_STACKTRACE
        select HAVE_RSEQ
+       select HAVE_SETUP_PER_CPU_AREA          if PPC64
        select HAVE_SOFTIRQ_ON_OWN_STACK
        select HAVE_STACKPROTECTOR              if PPC32 && $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=r2)
        select HAVE_STACKPROTECTOR              if PPC64 && $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=r13)
        select MMU_GATHER_RCU_TABLE_FREE
        select MODULES_USE_ELF_RELA
        select NEED_DMA_MAP_STATE               if PPC64 || NOT_COHERENT_CACHE
+       select NEED_PER_CPU_EMBED_FIRST_CHUNK   if PPC64
+       select NEED_PER_CPU_PAGE_FIRST_CHUNK    if PPC64
        select NEED_SG_DMA_LENGTH
        select OF
        select OF_DMA_DEFAULT_COHERENT          if !NOT_COHERENT_CACHE
        bool "NUMA Memory Allocation and Scheduler Support"
        depends on PPC64 && SMP
        default y if PPC_PSERIES || PPC_POWERNV
+       select USE_PERCPU_NUMA_NODE_ID
        help
          Enable NUMA (Non-Uniform Memory Access) support.
 
        default "4"
        depends on NUMA
 
-config USE_PERCPU_NUMA_NODE_ID
-       def_bool y
-       depends on NUMA
-
 config HAVE_MEMORYLESS_NODES
        def_bool y
        depends on NUMA
 
        select GENERIC_ARCH_NUMA
        select OF_NUMA
        select ARCH_SUPPORTS_NUMA_BALANCING
+       select USE_PERCPU_NUMA_NODE_ID
+       select NEED_PER_CPU_EMBED_FIRST_CHUNK
        help
          Enable NUMA (Non-Uniform Memory Access) support.
 
          Specify the maximum number of NUMA Nodes available on the target
          system.  Increases memory reserved to accommodate various tables.
 
-config USE_PERCPU_NUMA_NODE_ID
-       def_bool y
-       depends on NUMA
-
-config NEED_PER_CPU_EMBED_FIRST_CHUNK
-       def_bool y
-       depends on NUMA
-
 config RISCV_ISA_C
        bool "Emit compressed instructions when building Linux"
        default y
 
        select PCI_DOMAINS if PCI
        select ARCH_HAS_GIGANTIC_PAGE
        select HAVE_SOFTIRQ_ON_OWN_STACK
+       select HAVE_SETUP_PER_CPU_AREA
+       select NEED_PER_CPU_EMBED_FIRST_CHUNK
+       select NEED_PER_CPU_PAGE_FIRST_CHUNK
 
 config ARCH_PROC_KCORE_TEXT
        def_bool y
        bool
        default y
 
-config HAVE_SETUP_PER_CPU_AREA
-       def_bool y if SPARC64
-
-config NEED_PER_CPU_EMBED_FIRST_CHUNK
-       def_bool y if SPARC64
-
-config NEED_PER_CPU_PAGE_FIRST_CHUNK
-       def_bool y if SPARC64
-
 config MMU
        bool
        default y
 
        select HAVE_REGS_AND_STACK_ACCESS_API
        select HAVE_RELIABLE_STACKTRACE         if X86_64 && (UNWINDER_FRAME_POINTER || UNWINDER_ORC) && STACK_VALIDATION
        select HAVE_FUNCTION_ARG_ACCESS_API
+       select HAVE_SETUP_PER_CPU_AREA
        select HAVE_SOFTIRQ_ON_OWN_STACK
        select HAVE_STACKPROTECTOR              if CC_HAS_SANE_STACKPROTECTOR
        select HAVE_STACK_VALIDATION            if X86_64
        select HAVE_GENERIC_VDSO
        select HOTPLUG_SMT                      if SMP
        select IRQ_FORCED_THREADING
+       select NEED_PER_CPU_EMBED_FIRST_CHUNK
+       select NEED_PER_CPU_PAGE_FIRST_CHUNK
        select NEED_SG_DMA_LENGTH
        select PCI_DOMAINS                      if PCI
        select PCI_LOCKLESS_CONFIG              if PCI
 config ARCH_HAS_FILTER_PGPROT
        def_bool y
 
-config HAVE_SETUP_PER_CPU_AREA
-       def_bool y
-
-config NEED_PER_CPU_EMBED_FIRST_CHUNK
-       def_bool y
-
-config NEED_PER_CPU_PAGE_FIRST_CHUNK
-       def_bool y
-
 config ARCH_HIBERNATION_POSSIBLE
        def_bool y
 
        depends on SMP
        depends on X86_64 || (X86_32 && HIGHMEM64G && X86_BIGSMP)
        default y if X86_BIGSMP
+       select USE_PERCPU_NUMA_NODE_ID
        help
          Enable NUMA (Non-Uniform Memory Access) support.
 
 config ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE
        def_bool y
 
-config USE_PERCPU_NUMA_NODE_ID
-       def_bool y
-       depends on NUMA
-
 menu "Power management and ACPI options"
 
 config ARCH_HIBERNATION_HEADER
 
        bool
        default y
 
+config NEED_PER_CPU_EMBED_FIRST_CHUNK
+       bool
+
+config NEED_PER_CPU_PAGE_FIRST_CHUNK
+       bool
+
+config USE_PERCPU_NUMA_NODE_ID
+       bool
+
+config HAVE_SETUP_PER_CPU_AREA
+       bool
+
 config CLEANCACHE
        bool "Enable cleancache driver to cache clean pages if tmem is present"
        help