diff --git a/init/main.c b/init/main.c index 9cf6b307bfd7..2714e0e7cfec 100644 --- a/init/main.c +++ b/init/main.c @@ -325,7 +325,7 @@ static inline void smp_prepare_cpus(unsigned int maxcpus) { } #else #ifdef __GENERIC_PER_CPU -unsigned long __per_cpu_offset[NR_CPUS]; +unsigned long __per_cpu_offset[NR_CPUS] __read_mostly; EXPORT_SYMBOL(__per_cpu_offset); @@ -343,11 +343,7 @@ static void __init setup_per_cpu_areas(void) #endif ptr = alloc_bootmem(size * nr_possible_cpus); - for (i = 0; i < NR_CPUS; i++) { - if (!cpu_possible(i)) { - __per_cpu_offset[i] = (char*)0 - __per_cpu_start; - continue; - } + for_each_cpu(i) { __per_cpu_offset[i] = ptr - __per_cpu_start; memcpy(ptr, __per_cpu_start, __per_cpu_end - __per_cpu_start); ptr += size;