From: Pingfan Liu <piliu@xxxxxxxxxx> This patch aims to mark all the arrays which size is decided by nr_cpu_ids or num_possible_cpus(). Later if a hole is allowed in cpu_possible_mask, the corresponding array should extend to hold the last bit number in cpu_possible_mask. Signed-off-by: Pingfan Liu <piliu@xxxxxxxxxx> Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> Cc: Nicholas Piggin <npiggin@xxxxxxxxx> Cc: Christophe Leroy <christophe.leroy@xxxxxxxxxx> Cc: Mahesh Salgaonkar <mahesh@xxxxxxxxxxxxx> Cc: Wen Xiong <wenxiong@xxxxxxxxxx> Cc: Baoquan He <bhe@xxxxxxxxxx> Cc: Ming Lei <ming.lei@xxxxxxxxxx> Cc: Sourabh Jain <sourabhjain@xxxxxxxxxxxxx> Cc: Hari Bathini <hbathini@xxxxxxxxxxxxx> Cc: kexec@xxxxxxxxxxxxxxxxxxx To: linuxppc-dev@xxxxxxxxxxxxxxxx --- arch/powerpc/include/asm/paca.h | 2 ++ arch/powerpc/kernel/paca.c | 8 ++++---- arch/powerpc/kernel/setup-common.c | 2 +- arch/powerpc/kernel/smp.c | 3 ++- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h index e667d455ecb4..a577d98dd0d8 100644 --- a/arch/powerpc/include/asm/paca.h +++ b/arch/powerpc/include/asm/paca.h @@ -299,5 +299,7 @@ static inline void free_unused_pacas(void) { } #endif /* CONFIG_PPC64 */ +extern int paca_last_cpu_num; + #endif /* __KERNEL__ */ #endif /* _ASM_POWERPC_PACA_H */ diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c index 760f371cf096..840c74dd17d6 100644 --- a/arch/powerpc/kernel/paca.c +++ b/arch/powerpc/kernel/paca.c @@ -236,15 +236,15 @@ void setup_paca(struct paca_struct *new_paca) } -static int __initdata paca_nr_cpu_ids; +int __initdata paca_last_cpu_num; static int __initdata paca_ptrs_size; static int __initdata paca_struct_size; void __init allocate_paca_ptrs(void) { - paca_nr_cpu_ids = nr_cpu_ids; + paca_last_cpu_num = nr_cpu_ids; - paca_ptrs_size = sizeof(struct paca_struct *) * nr_cpu_ids; + paca_ptrs_size = sizeof(struct paca_struct *) * paca_last_cpu_num; paca_ptrs = memblock_alloc_raw(paca_ptrs_size, SMP_CACHE_BYTES); if (!paca_ptrs) panic("Failed to allocate %d bytes for paca pointers\n", @@ -258,7 +258,7 @@ void __init allocate_paca(int cpu) u64 limit; struct paca_struct *paca; - BUG_ON(cpu >= paca_nr_cpu_ids); + BUG_ON(cpu >= paca_last_cpu_num); #ifdef CONFIG_PPC_BOOK3S_64 /* diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index 2f1026fba00d..f9f5f313abf0 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c @@ -453,7 +453,7 @@ void __init smp_setup_cpu_maps(void) DBG("smp_setup_cpu_maps()\n"); - cpu_to_phys_id = memblock_alloc(nr_cpu_ids * sizeof(u32), + cpu_to_phys_id = memblock_alloc(paca_last_cpu_num * sizeof(u32), __alignof__(u32)); if (!cpu_to_phys_id) panic("%s: Failed to allocate %zu bytes align=0x%zx\n", diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 5826f5108a12..6fefe22fd118 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -1140,7 +1140,8 @@ void __init smp_prepare_cpus(unsigned int max_cpus) } if (cpu_to_chip_id(boot_cpuid) != -1) { - int idx = DIV_ROUND_UP(num_possible_cpus(), threads_per_core); + int idx = DIV_ROUND_UP(cpumask_last(cpu_possible_mask), + threads_per_core); /* * All threads of a core will all belong to the same core, -- 2.31.1 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec