linux/arch/loongarch/kernel
Liam Ni 6fdc770506 NUMA: optimize detection of memory with no node id assigned by firmware
[ Upstream commit ff6c3d81f2 ]

Sanity check that makes sure the nodes cover all memory loops over
numa_meminfo to count the pages that have node id assigned by the
firmware, then loops again over memblock.memory to find the total amount
of memory and in the end checks that the difference between the total
memory and memory that covered by nodes is less than some threshold.
Worse, the loop over numa_meminfo calls __absent_pages_in_range() that
also partially traverses memblock.memory.

It's much simpler and more efficient to have a single traversal of
memblock.memory that verifies that amount of memory not covered by nodes
is less than a threshold.

Introduce memblock_validate_numa_coverage() that does exactly that and use
it instead of numa_meminfo_cover_memory().

Link: https://lkml.kernel.org/r/20231026020329.327329-1-zhiguangni01@gmail.com
Signed-off-by: Liam Ni <zhiguangni01@gmail.com>
Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Bibo Mao <maobibo@loongson.cn>
Cc: Binbin Zhou <zhoubinbin@loongson.cn>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Feiyang Chen <chenfeiyang@loongson.cn>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Huacai Chen <chenhuacai@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: WANG Xuerui <kernel@xen0n.name>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Stable-dep-of: 9cdc6423ac ("memblock: allow zero threshold in validate_numa_converage()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-01-09 13:31:40 +01:00
..
.gitignore LoongArch: Add build infrastructure 2022-06-03 20:09:27 +08:00
access-helper.h LoongArch: Add exception/interrupt handling 2022-06-03 20:09:28 +08:00
acpi.c LoongArch: Change acpi_core_pic[NR_CPUS] to acpi_core_pic[MAX_CORE_PIC] 2024-03-01 13:34:55 +01:00
alternative.c LoongArch: Use common function sign_extend64() 2023-01-17 11:42:16 +08:00
asm-offsets.c LoongArch: Add Loongson Binary Translation (LBT) extension support 2023-09-06 22:53:55 +08:00
cacheinfo.c LoongArch: Refactor cache probe and flush methods 2022-10-12 16:36:14 +08:00
cpu-probe.c LoongArch: Add Loongson Binary Translation (LBT) extension support 2023-09-06 22:53:55 +08:00
crash_dump.c LoongArch: Add kdump support 2022-10-12 16:36:19 +08:00
dma.c LoongArch: Use acpi_arch_dma_setup() and remove ARCH_HAS_PHYS_TO_DMA 2022-09-24 18:39:21 +02:00
efi-header.S LoongArch: Calculate various sizes in the linker script 2023-06-29 20:58:42 +08:00
efi.c LoongArch: Fix reserving screen info memory for above-4G firmware 2025-01-02 10:32:05 +01:00
elf.c LoongArch: Fix and simplify fcsr initialization on execve() 2024-01-25 15:35:44 -08:00
entry.S LoongArch: Use SYM_CODE_* to annotate exception handlers 2023-10-18 08:42:52 +08:00
env.c LoongArch: Add FDT booting support from efi system table 2022-12-14 08:41:53 +08:00
fpu.S LoongArch: Add Loongson Binary Translation (LBT) extension support 2023-09-06 22:53:55 +08:00
ftrace.c LoongArch/ftrace: Add basic support 2022-12-14 08:41:53 +08:00
ftrace_dyn.c kprobe/ftrace: bail out if ftrace was killed 2024-06-27 13:49:03 +02:00
genex.S LoongArch: Use SYM_CODE_* to annotate exception handlers 2023-10-18 08:42:52 +08:00
head.S LoongArch: Fix entry point in kernel image header 2024-06-27 13:49:15 +02:00
hw_breakpoint.c LoongArch: Check TIF_LOAD_WATCH to enable user space watchpoint 2024-08-03 08:54:11 +02:00
idle.c arch/idle: Change arch_cpu_idle() behavior: always exit with IRQs disabled 2023-01-13 11:48:15 +01:00
image-vars.h efi/loongarch: Directly position the loaded image file 2024-06-27 13:49:15 +02:00
inst.c LoongArch: BPF: Adjust the parameter of emit_jirl() 2025-01-02 10:32:05 +01:00
io.c LoongArch: Add misc common routines 2022-06-03 20:09:28 +08:00
irq.c LoongArch: Define ARCH_IRQ_INIT_FLAGS as IRQ_NOPROBE 2024-09-30 16:25:09 +02:00
jump_label.c LoongArch: Add jump-label implementation 2023-06-29 20:58:44 +08:00
kfpu.c LoongArch: Allow usage of LSX/LASX in the kernel 2023-09-06 22:53:55 +08:00
kgdb.c LoongArch: Add basic KGDB & KDB support 2023-09-06 22:53:55 +08:00
kprobes.c LoongArch: Use larch_insn_gen_break() for kprobes 2023-06-29 20:58:44 +08:00
lbt.S LoongArch: Add Loongson Binary Translation (LBT) extension support 2023-09-06 22:53:55 +08:00
machine_kexec.c LoongArch: Add kdump support 2022-10-12 16:36:19 +08:00
Makefile LoongArch: Fix some build warnings with W=1 2023-09-20 14:26:28 +08:00
mcount.S LoongArch: Replace #include <asm/export.h> with #include <linux/export.h> 2023-08-25 23:40:26 +08:00
mcount_dyn.S LoongArch: Remove unneeded #include <asm/export.h> 2023-08-25 23:40:26 +08:00
mem.c LoongArch: Set all reserved memblocks on Node#0 at initialization 2023-09-20 14:26:29 +08:00
module-sections.c LoongArch: Fix some build warnings with W=1 2023-09-20 14:26:28 +08:00
module.c LoongArch: Add support for 64_PCREL relocation type 2023-09-27 16:19:13 +08:00
numa.c NUMA: optimize detection of memory with no node id assigned by firmware 2025-01-09 13:31:40 +01:00
perf_event.c LoongArch: Lately init pmu after smp is online 2024-06-12 11:11:24 +02:00
perf_regs.c LoongArch: Add perf events support 2022-10-12 16:36:14 +08:00
proc.c LoongArch: Introduce hardware page table walker 2023-06-29 20:58:44 +08:00
process.c LoongArch: Don't crash in stack_top() for tasks without vDSO 2024-11-01 01:58:28 +01:00
ptrace.c LoongArch: Check TIF_LOAD_WATCH to enable user space watchpoint 2024-08-03 08:54:11 +02:00
relocate.c LoongArch: Use correct API to map cmdline in relocate_kernel() 2024-09-12 11:11:38 +02:00
relocate_kernel.S LoongArch: Remove dead code in relocate_new_kernel 2023-09-20 14:26:29 +08:00
reset.c LoongArch: Add hibernation (ACPI S4) support 2022-12-14 08:41:53 +08:00
rethook.c LoongArch: Replace kretprobe with rethook 2023-06-29 20:58:44 +08:00
rethook.h LoongArch: Replace kretprobe with rethook 2023-06-29 20:58:44 +08:00
rethook_trampoline.S LoongArch: Replace kretprobe with rethook 2023-06-29 20:58:44 +08:00
setup.c of/fdt: add dt_phys arg to early_init_dt_scan and early_init_dt_verify 2024-12-09 10:31:56 +01:00
signal.c LoongArch: Fix some build warnings with W=1 2023-09-20 14:26:28 +08:00
smp.c LoongArch: Fix early_numa_add_cpu() usage for FDT systems 2024-11-22 15:38:34 +01:00
stacktrace.c LoongArch: Set unwind stack type to unknown rather than set error flag 2024-01-20 11:51:42 +01:00
switch.S LoongArch: Add basic STACKPROTECTOR support 2022-12-14 08:41:53 +08:00
syscall.c LoongArch: Fix some build warnings with W=1 2023-09-20 14:26:28 +08:00
sysrq.c tty: sysrq: switch sysrq handlers from int to u8 2023-07-25 19:21:03 +02:00
time.c LoongArch: Implement constant timer shutdown interface 2023-12-20 17:01:58 +01:00
topology.c LoongArch: Fix some build warnings with W=1 2023-09-20 14:26:28 +08:00
traps.c LoongArch: Enable IRQ if do_ale() triggered in irq-enabled context 2024-11-01 01:58:33 +01:00
unaligned.c LoongArch: Delete unnecessary debugfs checking 2023-06-29 20:58:42 +08:00
unwind.c LoongArch: Set unwind stack type to unknown rather than set error flag 2024-01-20 11:51:42 +01:00
unwind_guess.c LoongArch: Strip guess unwinder out from prologue unwinder 2023-01-17 11:42:16 +08:00
unwind_prologue.c LoongArch: Set unwind stack type to unknown rather than set error flag 2024-01-20 11:51:42 +01:00
uprobes.c LoongArch: Add uprobes support 2023-06-29 20:58:44 +08:00
vdso.c LoongArch: Add support to clone a time namespace 2023-06-29 20:58:43 +08:00
vmlinux.lds.S LoongArch: Fix entry point in kernel image header 2024-06-27 13:49:15 +02:00