diff options
35 files changed, 42 insertions, 132 deletions
| diff --git a/arch/alpha/include/asm/smp.h b/arch/alpha/include/asm/smp.h index 544c69af8168..547e90951cec 100644 --- a/arch/alpha/include/asm/smp.h +++ b/arch/alpha/include/asm/smp.h @@ -45,7 +45,6 @@ extern struct cpuinfo_alpha cpu_data[NR_CPUS];  #define raw_smp_processor_id()	(current_thread_info()->cpu)  extern int smp_num_cpus; -#define cpu_possible_map	cpu_present_map  extern void arch_send_call_function_single_ipi(int cpu);  extern void arch_send_call_function_ipi(cpumask_t mask); diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c index 351407e07e71..f238370c907d 100644 --- a/arch/alpha/kernel/process.c +++ b/arch/alpha/kernel/process.c @@ -94,6 +94,7 @@ common_shutdown_1(void *generic_ptr)  		flags |= 0x00040000UL; /* "remain halted" */  		*pflags = flags;  		cpu_clear(cpuid, cpu_present_map); +		cpu_clear(cpuid, cpu_possible_map);  		halt();  	}  #endif @@ -120,6 +121,7 @@ common_shutdown_1(void *generic_ptr)  #ifdef CONFIG_SMP  	/* Wait for the secondaries to halt. */  	cpu_clear(boot_cpuid, cpu_present_map); +	cpu_clear(boot_cpuid, cpu_possible_map);  	while (cpus_weight(cpu_present_map))  		barrier();  #endif diff --git a/arch/alpha/kernel/smp.c b/arch/alpha/kernel/smp.c index cf7da10097bb..d953e510f68d 100644 --- a/arch/alpha/kernel/smp.c +++ b/arch/alpha/kernel/smp.c @@ -70,11 +70,6 @@ enum ipi_message_type {  /* Set to a secondary's cpuid when it comes online.  */  static int smp_secondary_alive __devinitdata = 0; -/* Which cpus ids came online.  */ -cpumask_t cpu_online_map; - -EXPORT_SYMBOL(cpu_online_map); -  int smp_num_probed;		/* Internal processor count */  int smp_num_cpus = 1;		/* Number that came online.  */  EXPORT_SYMBOL(smp_num_cpus); @@ -440,6 +435,7 @@ setup_smp(void)  				((char *)cpubase + i*hwrpb->processor_size);  			if ((cpu->flags & 0x1cc) == 0x1cc) {  				smp_num_probed++; +				cpu_set(i, cpu_possible_map);  				cpu_set(i, cpu_present_map);  				cpu->pal_revision = boot_cpu_palrev;  			} @@ -473,6 +469,7 @@ smp_prepare_cpus(unsigned int max_cpus)  	/* Nothing to do on a UP box, or when told not to.  */  	if (smp_num_probed == 1 || max_cpus == 0) { +		cpu_possible_map = cpumask_of_cpu(boot_cpuid);  		cpu_present_map = cpumask_of_cpu(boot_cpuid);  		printk(KERN_INFO "SMP mode deactivated.\n");  		return; diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index e42a749a56dd..bd905c0a7365 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -34,16 +34,6 @@  #include <asm/ptrace.h>  /* - * bitmask of present and online CPUs. - * The present bitmask indicates that the CPU is physically present. - * The online bitmask indicates that the CPU is up and running. - */ -cpumask_t cpu_possible_map; -EXPORT_SYMBOL(cpu_possible_map); -cpumask_t cpu_online_map; -EXPORT_SYMBOL(cpu_online_map); - -/*   * as from 2.5, kernels no longer have an init_tasks structure   * so we need some other way of telling a new secondary core   * where to place its SVC stack diff --git a/arch/cris/arch-v32/kernel/smp.c b/arch/cris/arch-v32/kernel/smp.c index 52e16c6436f9..9dac17334640 100644 --- a/arch/cris/arch-v32/kernel/smp.c +++ b/arch/cris/arch-v32/kernel/smp.c @@ -29,11 +29,7 @@  spinlock_t cris_atomic_locks[] = { [0 ... LOCK_COUNT - 1] = SPIN_LOCK_UNLOCKED};  /* CPU masks */ -cpumask_t cpu_online_map = CPU_MASK_NONE; -EXPORT_SYMBOL(cpu_online_map);  cpumask_t phys_cpu_present_map = CPU_MASK_NONE; -cpumask_t cpu_possible_map; -EXPORT_SYMBOL(cpu_possible_map);  EXPORT_SYMBOL(phys_cpu_present_map);  /* Variables used during SMP boot */ diff --git a/arch/cris/include/asm/smp.h b/arch/cris/include/asm/smp.h index dba33aba3e95..c615a06dd757 100644 --- a/arch/cris/include/asm/smp.h +++ b/arch/cris/include/asm/smp.h @@ -4,7 +4,6 @@  #include <linux/cpumask.h>  extern cpumask_t phys_cpu_present_map; -extern cpumask_t cpu_possible_map;  #define raw_smp_processor_id() (current_thread_info()->cpu) diff --git a/arch/ia64/include/asm/smp.h b/arch/ia64/include/asm/smp.h index 12d96e0cd513..21c402365d0e 100644 --- a/arch/ia64/include/asm/smp.h +++ b/arch/ia64/include/asm/smp.h @@ -57,7 +57,6 @@ extern struct smp_boot_data {  extern char no_int_routing __devinitdata; -extern cpumask_t cpu_online_map;  extern cpumask_t cpu_core_map[NR_CPUS];  DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);  extern int smp_num_siblings; diff --git a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c index 1dcbb85fc4ee..4ede6e571c38 100644 --- a/arch/ia64/kernel/smpboot.c +++ b/arch/ia64/kernel/smpboot.c @@ -131,12 +131,6 @@ struct task_struct *task_for_booting_cpu;   */  DEFINE_PER_CPU(int, cpu_state); -/* Bitmasks of currently online, and possible CPUs */ -cpumask_t cpu_online_map; -EXPORT_SYMBOL(cpu_online_map); -cpumask_t cpu_possible_map = CPU_MASK_NONE; -EXPORT_SYMBOL(cpu_possible_map); -  cpumask_t cpu_core_map[NR_CPUS] __cacheline_aligned;  EXPORT_SYMBOL(cpu_core_map);  DEFINE_PER_CPU_SHARED_ALIGNED(cpumask_t, cpu_sibling_map); diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index dbaed4a63815..17a6dab09319 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig @@ -10,6 +10,7 @@ config M32R  	default y  	select HAVE_IDE  	select HAVE_OPROFILE +	select INIT_ALL_POSSIBLE  config SBUS  	bool diff --git a/arch/m32r/kernel/smpboot.c b/arch/m32r/kernel/smpboot.c index 39cb6da72dcb..0f06b3722e96 100644 --- a/arch/m32r/kernel/smpboot.c +++ b/arch/m32r/kernel/smpboot.c @@ -73,17 +73,11 @@ static unsigned int bsp_phys_id = -1;  /* Bitmask of physically existing CPUs */  physid_mask_t phys_cpu_present_map; -/* Bitmask of currently online CPUs */ -cpumask_t cpu_online_map; -EXPORT_SYMBOL(cpu_online_map); -  cpumask_t cpu_bootout_map;  cpumask_t cpu_bootin_map;  static cpumask_t cpu_callin_map;  cpumask_t cpu_callout_map;  EXPORT_SYMBOL(cpu_callout_map); -cpumask_t cpu_possible_map = CPU_MASK_ALL; -EXPORT_SYMBOL(cpu_possible_map);  /* Per CPU bogomips and other parameters */  struct cpuinfo_m32r cpu_data[NR_CPUS] __cacheline_aligned; diff --git a/arch/mips/include/asm/smp.h b/arch/mips/include/asm/smp.h index 0ff5b523ea77..86557b5d1b3f 100644 --- a/arch/mips/include/asm/smp.h +++ b/arch/mips/include/asm/smp.h @@ -38,9 +38,6 @@ extern int __cpu_logical_map[NR_CPUS];  #define SMP_RESCHEDULE_YOURSELF	0x1	/* XXX braindead */  #define SMP_CALL_FUNCTION	0x2 -extern cpumask_t phys_cpu_present_map; -#define cpu_possible_map	phys_cpu_present_map -  extern void asmlinkage smp_bootstrap(void);  /* diff --git a/arch/mips/kernel/smp-cmp.c b/arch/mips/kernel/smp-cmp.c index ca476c4f62a5..6789c1a12120 100644 --- a/arch/mips/kernel/smp-cmp.c +++ b/arch/mips/kernel/smp-cmp.c @@ -226,7 +226,7 @@ void __init cmp_smp_setup(void)  	for (i = 1; i < NR_CPUS; i++) {  		if (amon_cpu_avail(i)) { -			cpu_set(i, phys_cpu_present_map); +			cpu_set(i, cpu_possible_map);  			__cpu_number_map[i]	= ++ncpu;  			__cpu_logical_map[ncpu]	= i;  		} diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c index 87a1816c1f45..6f7ee5ac46ee 100644 --- a/arch/mips/kernel/smp-mt.c +++ b/arch/mips/kernel/smp-mt.c @@ -70,7 +70,7 @@ static unsigned int __init smvp_vpe_init(unsigned int tc, unsigned int mvpconf0,  		write_vpe_c0_vpeconf0(tmp);  		/* Record this as available CPU */ -		cpu_set(tc, phys_cpu_present_map); +		cpu_set(tc, cpu_possible_map);  		__cpu_number_map[tc]	= ++ncpu;  		__cpu_logical_map[ncpu]	= tc;  	} diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 8bf88faf5afd..3da94704f816 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c @@ -44,15 +44,10 @@  #include <asm/mipsmtregs.h>  #endif /* CONFIG_MIPS_MT_SMTC */ -cpumask_t phys_cpu_present_map;		/* Bitmask of available CPUs */  volatile cpumask_t cpu_callin_map;	/* Bitmask of started secondaries */ -cpumask_t cpu_online_map;		/* Bitmask of currently online CPUs */  int __cpu_number_map[NR_CPUS];		/* Map physical to logical */  int __cpu_logical_map[NR_CPUS];		/* Map logical to physical */ -EXPORT_SYMBOL(phys_cpu_present_map); -EXPORT_SYMBOL(cpu_online_map); -  extern void cpu_idle(void);  /* Number of TCs (or siblings in Intel speak) per CPU core */ @@ -195,7 +190,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)  /* preload SMP state for boot cpu */  void __devinit smp_prepare_boot_cpu(void)  { -	cpu_set(0, phys_cpu_present_map); +	cpu_set(0, cpu_possible_map);  	cpu_set(0, cpu_online_map);  	cpu_set(0, cpu_callin_map);  } diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c index 897fb2b4751c..b6cca01ff82b 100644 --- a/arch/mips/kernel/smtc.c +++ b/arch/mips/kernel/smtc.c @@ -290,7 +290,7 @@ static void smtc_configure_tlb(void)   * possibly leave some TCs/VPEs as "slave" processors.   *   * Use c0_MVPConf0 to find out how many TCs are available, setting up - * phys_cpu_present_map and the logical/physical mappings. + * cpu_possible_map and the logical/physical mappings.   */  int __init smtc_build_cpu_map(int start_cpu_slot) @@ -304,7 +304,7 @@ int __init smtc_build_cpu_map(int start_cpu_slot)  	 */  	ntcs = ((read_c0_mvpconf0() & MVPCONF0_PTC) >> MVPCONF0_PTC_SHIFT) + 1;  	for (i=start_cpu_slot; i<NR_CPUS && i<ntcs; i++) { -		cpu_set(i, phys_cpu_present_map); +		cpu_set(i, cpu_possible_map);  		__cpu_number_map[i] = i;  		__cpu_logical_map[i] = i;  	} @@ -521,7 +521,7 @@ void smtc_prepare_cpus(int cpus)  	 * Pull any physically present but unused TCs out of circulation.  	 */  	while (tc < (((val & MVPCONF0_PTC) >> MVPCONF0_PTC_SHIFT) + 1)) { -		cpu_clear(tc, phys_cpu_present_map); +		cpu_clear(tc, cpu_possible_map);  		cpu_clear(tc, cpu_present_map);  		tc++;  	} diff --git a/arch/mips/pmc-sierra/yosemite/smp.c b/arch/mips/pmc-sierra/yosemite/smp.c index 3a7df647ca77..f78c29b68d77 100644 --- a/arch/mips/pmc-sierra/yosemite/smp.c +++ b/arch/mips/pmc-sierra/yosemite/smp.c @@ -141,7 +141,7 @@ static void __cpuinit yos_boot_secondary(int cpu, struct task_struct *idle)  }  /* - * Detect available CPUs, populate phys_cpu_present_map before smp_init + * Detect available CPUs, populate cpu_possible_map before smp_init   *   * We don't want to start the secondary CPU yet nor do we have a nice probing   * feature in PMON so we just assume presence of the secondary core. @@ -150,10 +150,10 @@ static void __init yos_smp_setup(void)  {  	int i; -	cpus_clear(phys_cpu_present_map); +	cpus_clear(cpu_possible_map);  	for (i = 0; i < 2; i++) { -		cpu_set(i, phys_cpu_present_map); +		cpu_set(i, cpu_possible_map);  		__cpu_number_map[i]	= i;  		__cpu_logical_map[i]	= i;  	} diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c index ba5cdebeaf0d..5b47d6b65275 100644 --- a/arch/mips/sgi-ip27/ip27-smp.c +++ b/arch/mips/sgi-ip27/ip27-smp.c @@ -76,7 +76,7 @@ static int do_cpumask(cnodeid_t cnode, nasid_t nasid, int highest)  			/* Only let it join in if it's marked enabled */  			if ((acpu->cpu_info.flags & KLINFO_ENABLE) &&  			    (tot_cpus_found != NR_CPUS)) { -				cpu_set(cpuid, phys_cpu_present_map); +				cpu_set(cpuid, cpu_possible_map);  				alloc_cpupda(cpuid, tot_cpus_found);  				cpus_found++;  				tot_cpus_found++; diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.c index bd9eeb43ed0e..dddfda8e8294 100644 --- a/arch/mips/sibyte/bcm1480/smp.c +++ b/arch/mips/sibyte/bcm1480/smp.c @@ -136,7 +136,7 @@ static void __cpuinit bcm1480_boot_secondary(int cpu, struct task_struct *idle)  /*   * Use CFE to find out how many CPUs are available, setting up - * phys_cpu_present_map and the logical/physical mappings. + * cpu_possible_map and the logical/physical mappings.   * XXXKW will the boot CPU ever not be physical 0?   *   * Common setup before any secondaries are started @@ -145,14 +145,14 @@ static void __init bcm1480_smp_setup(void)  {  	int i, num; -	cpus_clear(phys_cpu_present_map); -	cpu_set(0, phys_cpu_present_map); +	cpus_clear(cpu_possible_map); +	cpu_set(0, cpu_possible_map);  	__cpu_number_map[0] = 0;  	__cpu_logical_map[0] = 0;  	for (i = 1, num = 0; i < NR_CPUS; i++) {  		if (cfe_cpu_stop(i) == 0) { -			cpu_set(i, phys_cpu_present_map); +			cpu_set(i, cpu_possible_map);  			__cpu_number_map[i] = ++num;  			__cpu_logical_map[num] = i;  		} diff --git a/arch/mips/sibyte/sb1250/smp.c b/arch/mips/sibyte/sb1250/smp.c index 0734b933e969..5950a288a7da 100644 --- a/arch/mips/sibyte/sb1250/smp.c +++ b/arch/mips/sibyte/sb1250/smp.c @@ -124,7 +124,7 @@ static void __cpuinit sb1250_boot_secondary(int cpu, struct task_struct *idle)  /*   * Use CFE to find out how many CPUs are available, setting up - * phys_cpu_present_map and the logical/physical mappings. + * cpu_possible_map and the logical/physical mappings.   * XXXKW will the boot CPU ever not be physical 0?   *   * Common setup before any secondaries are started @@ -133,14 +133,14 @@ static void __init sb1250_smp_setup(void)  {  	int i, num; -	cpus_clear(phys_cpu_present_map); -	cpu_set(0, phys_cpu_present_map); +	cpus_clear(cpu_possible_map); +	cpu_set(0, cpu_possible_map);  	__cpu_number_map[0] = 0;  	__cpu_logical_map[0] = 0;  	for (i = 1, num = 0; i < NR_CPUS; i++) {  		if (cfe_cpu_stop(i) == 0) { -			cpu_set(i, phys_cpu_present_map); +			cpu_set(i, cpu_possible_map);  			__cpu_number_map[i] = ++num;  			__cpu_logical_map[num] = i;  		} diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 644a70b1b04e..aacf11d33723 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -11,6 +11,7 @@ config PARISC  	select HAVE_OPROFILE  	select RTC_CLASS  	select RTC_DRV_PARISC +	select INIT_ALL_POSSIBLE  	help  	  The PA-RISC microprocessor is designed by Hewlett-Packard and used  	  in many of their workstations & servers (HP9000 700 and 800 series, diff --git a/arch/parisc/kernel/smp.c b/arch/parisc/kernel/smp.c index d47f3975c9c6..80bc000523fa 100644 --- a/arch/parisc/kernel/smp.c +++ b/arch/parisc/kernel/smp.c @@ -67,21 +67,6 @@ static volatile int cpu_now_booting __read_mostly = 0;	/* track which CPU is boo  static int parisc_max_cpus __read_mostly = 1; -/* online cpus are ones that we've managed to bring up completely - * possible cpus are all valid cpu  - * present cpus are all detected cpu - * - * On startup we bring up the "possible" cpus. Since we discover - * CPUs later, we add them as hotplug, so the possible cpu mask is - * empty in the beginning. - */ - -cpumask_t cpu_online_map   __read_mostly = CPU_MASK_NONE;	/* Bitmap of online CPUs */ -cpumask_t cpu_possible_map __read_mostly = CPU_MASK_ALL;	/* Bitmap of Present CPUs */ - -EXPORT_SYMBOL(cpu_online_map); -EXPORT_SYMBOL(cpu_possible_map); -  DEFINE_PER_CPU(spinlock_t, ipi_lock) = SPIN_LOCK_UNLOCKED;  enum ipi_message_type { diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index ff9f7010097d..d1165566f064 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c @@ -60,13 +60,9 @@  int smp_hw_index[NR_CPUS];  struct thread_info *secondary_ti; -cpumask_t cpu_possible_map = CPU_MASK_NONE; -cpumask_t cpu_online_map = CPU_MASK_NONE;  DEFINE_PER_CPU(cpumask_t, cpu_sibling_map) = CPU_MASK_NONE;  DEFINE_PER_CPU(cpumask_t, cpu_core_map) = CPU_MASK_NONE; -EXPORT_SYMBOL(cpu_online_map); -EXPORT_SYMBOL(cpu_possible_map);  EXPORT_PER_CPU_SYMBOL(cpu_sibling_map);  EXPORT_PER_CPU_SYMBOL(cpu_core_map); diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 8116a3328a19..b4aa5869c7f9 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig @@ -75,6 +75,7 @@ config S390  	select HAVE_KRETPROBES  	select HAVE_KVM if 64BIT  	select HAVE_ARCH_TRACEHOOK +	select INIT_ALL_POSSIBLE  source "init/Kconfig" diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index b5595688a477..f03914b8ed2f 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c @@ -52,12 +52,6 @@  struct _lowcore *lowcore_ptr[NR_CPUS];  EXPORT_SYMBOL(lowcore_ptr); -cpumask_t cpu_online_map = CPU_MASK_NONE; -EXPORT_SYMBOL(cpu_online_map); - -cpumask_t cpu_possible_map = CPU_MASK_ALL; -EXPORT_SYMBOL(cpu_possible_map); -  static struct task_struct *current_set[NR_CPUS];  static u8 smp_cpu_type; diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index 3c5ad1660bbc..593937d0c495 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c @@ -31,12 +31,6 @@  int __cpu_number_map[NR_CPUS];		/* Map physical to logical */  int __cpu_logical_map[NR_CPUS];		/* Map logical to physical */ -cpumask_t cpu_possible_map; -EXPORT_SYMBOL(cpu_possible_map); - -cpumask_t cpu_online_map; -EXPORT_SYMBOL(cpu_online_map); -  static inline void __init smp_store_cpu_info(unsigned int cpu)  {  	struct sh_cpuinfo *c = cpu_data + cpu; diff --git a/arch/sparc/include/asm/smp_32.h b/arch/sparc/include/asm/smp_32.h index a8180e546a48..8408d9d2a662 100644 --- a/arch/sparc/include/asm/smp_32.h +++ b/arch/sparc/include/asm/smp_32.h @@ -29,8 +29,6 @@   */  extern unsigned char boot_cpu_id; -extern cpumask_t phys_cpu_present_map; -#define cpu_possible_map phys_cpu_present_map  typedef void (*smpfunc_t)(unsigned long, unsigned long, unsigned long,  		       unsigned long, unsigned long); diff --git a/arch/sparc/kernel/smp.c b/arch/sparc/kernel/smp.c index e396c1f17a92..1e5ac4e282e1 100644 --- a/arch/sparc/kernel/smp.c +++ b/arch/sparc/kernel/smp.c @@ -39,8 +39,6 @@ volatile unsigned long cpu_callin_map[NR_CPUS] __cpuinitdata = {0,};  unsigned char boot_cpu_id = 0;  unsigned char boot_cpu_id4 = 0; /* boot_cpu_id << 2 */ -cpumask_t cpu_online_map = CPU_MASK_NONE; -cpumask_t phys_cpu_present_map = CPU_MASK_NONE;  cpumask_t smp_commenced_mask = CPU_MASK_NONE;  /* The only guaranteed locking primitive available on all Sparc @@ -334,7 +332,7 @@ void __init smp_setup_cpu_possible_map(void)  	instance = 0;  	while (!cpu_find_by_instance(instance, NULL, &mid)) {  		if (mid < NR_CPUS) { -			cpu_set(mid, phys_cpu_present_map); +			cpu_set(mid, cpu_possible_map);  			cpu_set(mid, cpu_present_map);  		}  		instance++; @@ -354,7 +352,7 @@ void __init smp_prepare_boot_cpu(void)  	current_thread_info()->cpu = cpuid;  	cpu_set(cpuid, cpu_online_map); -	cpu_set(cpuid, phys_cpu_present_map); +	cpu_set(cpuid, cpu_possible_map);  }  int __cpuinit __cpu_up(unsigned int cpu) diff --git a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c index b0dfff848653..32d11a5fe3a8 100644 --- a/arch/sparc/kernel/sparc_ksyms.c +++ b/arch/sparc/kernel/sparc_ksyms.c @@ -113,10 +113,6 @@ EXPORT_PER_CPU_SYMBOL(__cpu_data);  #ifdef CONFIG_SMP  /* IRQ implementation. */  EXPORT_SYMBOL(synchronize_irq); - -/* CPU online map and active count. */ -EXPORT_SYMBOL(cpu_online_map); -EXPORT_SYMBOL(phys_cpu_present_map);  #endif  EXPORT_SYMBOL(__udelay); diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index f500b0618bb0..a97b8822c22c 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c @@ -49,14 +49,10 @@  int sparc64_multi_core __read_mostly; -cpumask_t cpu_possible_map __read_mostly = CPU_MASK_NONE; -cpumask_t cpu_online_map __read_mostly = CPU_MASK_NONE;  DEFINE_PER_CPU(cpumask_t, cpu_sibling_map) = CPU_MASK_NONE;  cpumask_t cpu_core_map[NR_CPUS] __read_mostly =  	{ [0 ... NR_CPUS-1] = CPU_MASK_NONE }; -EXPORT_SYMBOL(cpu_possible_map); -EXPORT_SYMBOL(cpu_online_map);  EXPORT_PER_CPU_SYMBOL(cpu_sibling_map);  EXPORT_SYMBOL(cpu_core_map); diff --git a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c index 045772142844..98351c78bc81 100644 --- a/arch/um/kernel/smp.c +++ b/arch/um/kernel/smp.c @@ -25,13 +25,6 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);  #include "irq_user.h"  #include "os.h" -/* CPU online map, set by smp_boot_cpus */ -cpumask_t cpu_online_map = CPU_MASK_NONE; -cpumask_t cpu_possible_map = CPU_MASK_NONE; - -EXPORT_SYMBOL(cpu_online_map); -EXPORT_SYMBOL(cpu_possible_map); -  /* Per CPU bogomips and other parameters   * The only piece used here is the ipi pipe, which is set before SMP is   * started and never changed. diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 7b1093397319..468c2f9d47ae 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -101,14 +101,8 @@ EXPORT_SYMBOL(smp_num_siblings);  /* Last level cache ID of each logical CPU */  DEFINE_PER_CPU(u16, cpu_llc_id) = BAD_APICID; -/* bitmap of online cpus */ -cpumask_t cpu_online_map __read_mostly; -EXPORT_SYMBOL(cpu_online_map); -  cpumask_t cpu_callin_map;  cpumask_t cpu_callout_map; -cpumask_t cpu_possible_map; -EXPORT_SYMBOL(cpu_possible_map);  /* representing HT siblings of each logical CPU */  DEFINE_PER_CPU(cpumask_t, cpu_sibling_map); diff --git a/arch/x86/mach-voyager/voyager_smp.c b/arch/x86/mach-voyager/voyager_smp.c index 52145007bd7e..9c990185e9f2 100644 --- a/arch/x86/mach-voyager/voyager_smp.c +++ b/arch/x86/mach-voyager/voyager_smp.c @@ -63,11 +63,6 @@ static int voyager_extended_cpus = 1;  /* Used for the invalidate map that's also checked in the spinlock */  static volatile unsigned long smp_invalidate_needed; -/* Bitmask of currently online CPUs - used by setup.c for -   /proc/cpuinfo, visible externally but still physical */ -cpumask_t cpu_online_map = CPU_MASK_NONE; -EXPORT_SYMBOL(cpu_online_map); -  /* Bitmask of CPUs present in the system - exported by i386_syms.c, used   * by scheduler but indexed physically */  cpumask_t phys_cpu_present_map = CPU_MASK_NONE; @@ -218,8 +213,6 @@ static cpumask_t smp_commenced_mask = CPU_MASK_NONE;  /* This is for the new dynamic CPU boot code */  cpumask_t cpu_callin_map = CPU_MASK_NONE;  cpumask_t cpu_callout_map = CPU_MASK_NONE; -cpumask_t cpu_possible_map = CPU_MASK_NONE; -EXPORT_SYMBOL(cpu_possible_map);  /* The per processor IRQ masks (these are usually kept in sync) */  static __u16 vic_irq_mask[NR_CPUS] __cacheline_aligned; diff --git a/include/asm-m32r/smp.h b/include/asm-m32r/smp.h index c5dd66916692..b96a6d2ffbc3 100644 --- a/include/asm-m32r/smp.h +++ b/include/asm-m32r/smp.h @@ -63,8 +63,6 @@ extern volatile int cpu_2_physid[NR_CPUS];  #define raw_smp_processor_id()	(current_thread_info()->cpu)  extern cpumask_t cpu_callout_map; -extern cpumask_t cpu_possible_map; -extern cpumask_t cpu_present_map;  static __inline__ int hard_smp_processor_id(void)  { diff --git a/init/Kconfig b/init/Kconfig index f763762d544a..7656623f5006 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -916,6 +916,15 @@ config KMOD  endif # MODULES +config INIT_ALL_POSSIBLE +	bool +	help +	  Back when each arch used to define their own cpu_online_map and +	  cpu_possible_map, some of them chose to initialize cpu_possible_map +	  with all 1s, and others with all 0s.  When they were centralised, +	  it was better to provide this option than to break all the archs +	  and have several arch maintainers persuing me down dark alleys. +  config STOP_MACHINE  	bool  	default y diff --git a/kernel/cpu.c b/kernel/cpu.c index 8ea32e8d68b0..bae131a1211b 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -24,19 +24,20 @@  cpumask_t cpu_present_map __read_mostly;  EXPORT_SYMBOL(cpu_present_map); -#ifndef CONFIG_SMP -  /*   * Represents all cpu's that are currently online.   */ -cpumask_t cpu_online_map __read_mostly = CPU_MASK_ALL; +cpumask_t cpu_online_map __read_mostly;  EXPORT_SYMBOL(cpu_online_map); +#ifdef CONFIG_INIT_ALL_POSSIBLE  cpumask_t cpu_possible_map __read_mostly = CPU_MASK_ALL; +#else +cpumask_t cpu_possible_map __read_mostly; +#endif  EXPORT_SYMBOL(cpu_possible_map); -#else /* CONFIG_SMP */ - +#ifdef CONFIG_SMP  /* Serializes the updates to cpu_online_map, cpu_present_map */  static DEFINE_MUTEX(cpu_add_remove_lock); | 
