Re: [PATCH 1/2] powerpc: export the CPU node count
From: Laurent Dufour <hidden>
Date: 2022-11-07 16:07:21
Also in:
lkml
On 07/11/2022 13:11:17, Nicholas Piggin wrote:
On Sat Oct 29, 2022 at 2:00 AM AEST, Laurent Dufour wrote:quoted
At boot time, the FDT is parsed to compute the number of CPUs. In addition count the number of CPU nodes and export it. This is useful when building the FDT for a kexeced kernel since we need to take in account the CPU node added since the boot time during CPU hotplug operations.It would be nice if it just realloced memory in this case, but that looks like a bigger change.
I agree, and I think the best option in long term would be the series Sourabh Jain sent in June, updating the crash kernel FDT without reloading it (https://lore.kernel.org/linuxppc-dev/20220620070106.93141-1-sourabhjain@linux.ibm.com/ (local)) In the meantime, this solves the issue.
But these patches look okay to me, if you can solve the compile bug.
Indeed, the compile bugs are raised because I added the definition of the new variable 'boot_cpu_node_count' in kexec_ranges.h, and add the inclusion of that file in prom.c. I was not confident putting this new variable definition in that header file, but I didn't find a better option. Do you have a better idea of header file to use? Could I just declare this variable "extern" in arch/powerpc/kexec/file_load_64.c? This looks ugly to me. Thanks, Laurent.
Thanks, Nickquoted
Signed-off-by: Laurent Dufour <redacted> --- arch/powerpc/include/asm/kexec_ranges.h | 2 ++ arch/powerpc/kernel/prom.c | 4 ++++ 2 files changed, 6 insertions(+)diff --git a/arch/powerpc/include/asm/kexec_ranges.h b/arch/powerpc/include/asm/kexec_ranges.h index f83866a19e87..bf35d00ddd09 100644 --- a/arch/powerpc/include/asm/kexec_ranges.h +++ b/arch/powerpc/include/asm/kexec_ranges.h@@ -22,4 +22,6 @@ int add_rtas_mem_range(struct crash_mem **mem_ranges); int add_opal_mem_range(struct crash_mem **mem_ranges); int add_reserved_mem_ranges(struct crash_mem **mem_ranges); +extern unsigned int boot_cpu_node_count; + #endif /* _ASM_POWERPC_KEXEC_RANGES_H */diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 1eed87d954ba..d326148fd5a4 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c@@ -56,6 +56,7 @@ #include <asm/drmem.h> #include <asm/ultravisor.h> #include <asm/prom.h> +#include <asm/kexec_ranges.h> #include <mm/mmu_decl.h>@@ -72,6 +73,7 @@ int __initdata iommu_is_off; int __initdata iommu_force_on; unsigned long tce_alloc_start, tce_alloc_end; u64 ppc64_rma_size; +unsigned int boot_cpu_node_count __ro_after_init; #endif static phys_addr_t first_memblock_size; static int __initdata boot_cpu_count;@@ -335,6 +337,8 @@ static int __init early_init_dt_scan_cpus(unsigned long node, if (type == NULL || strcmp(type, "cpu") != 0) return 0; + boot_cpu_node_count++; + /* Get physical cpuid */ intserv = of_get_flat_dt_prop(node, "ibm,ppc-interrupt-server#s", &len); if (!intserv)-- 2.38.1