All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rusty Russell <rusty@rustcorp.com.au>
To: Alexey Dobriyan <adobriyan@gmail.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>,
	linux-next@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: linux-next: arch/alpha/include/asm/smp.h:48:1: error: "cpu_possible_map" redefined
Date: Fri, 24 Oct 2008 02:10:11 +1100	[thread overview]
Message-ID: <200810240210.11605.rusty@rustcorp.com.au> (raw)
In-Reply-To: <20081023121656.GD27984@x200.localdomain>

On Thursday 23 October 2008 23:16:56 Alexey Dobriyan wrote:
> On Thu, Oct 23, 2008 at 04:15:50PM +0400, Alexey Dobriyan wrote:
> > On alpha-smp-y-debug-n:
>
> Debug part is irrelevant, all alpha-smp-y is broken.

Yes, centralizing cpu_online_map & cpu_possible_map broke three archs, alpha
the worst.

This is the new, improved version.  Should apply against Linus' tree.

Thanks for the report,
Rusty.

cpumask: centralize cpu_online_map and cpu_possible_map

Each SMP arch defines these themselves.  Move them to a central
location.

Twists:
1) Some archs set possible_map to all 1, so we add a
   CONFIG_INIT_ALL_POSSIBLE for this rather than break them.

2) mips and sparc32 '#define cpu_possible_map phys_cpu_present_map'.
   Those archs simply have phys_cpu_present_map replaced everywhere.

3) Alpha defined cpu_possible_map to cpu_present_map; this is tricky
   so I just manipulate them both in sync.

4) IA64, cris and m32r have gratuitous 'extern cpumask_t cpu_possible_map'
   declarations.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
---
 arch/alpha/include/asm/smp.h        |    1 -
 arch/alpha/kernel/process.c         |    2 ++
 arch/alpha/kernel/smp.c             |    7 ++-----
 arch/arm/kernel/smp.c               |   10 ----------
 arch/cris/arch-v32/kernel/smp.c     |    4 ----
 arch/ia64/include/asm/smp.h         |    1 -
 arch/ia64/kernel/smpboot.c          |    6 ------
 arch/m32r/Kconfig                   |    1 +
 arch/m32r/kernel/smpboot.c          |    6 ------
 arch/mips/include/asm/smp.h         |    3 ---
 arch/mips/kernel/smp-cmp.c          |    2 +-
 arch/mips/kernel/smp-mt.c           |    2 +-
 arch/mips/kernel/smp.c              |    7 +------
 arch/mips/kernel/smtc.c             |    6 +++---
 arch/mips/pmc-sierra/yosemite/smp.c |    6 +++---
 arch/mips/sgi-ip27/ip27-smp.c       |    2 +-
 arch/mips/sibyte/bcm1480/smp.c      |    8 ++++----
 arch/mips/sibyte/sb1250/smp.c       |    8 ++++----
 arch/parisc/Kconfig                 |    1 +
 arch/parisc/kernel/smp.c            |   15 ---------------
 arch/powerpc/kernel/smp.c           |    4 ----
 arch/s390/Kconfig                   |    1 +
 arch/s390/kernel/smp.c              |    6 ------
 arch/sh/kernel/smp.c                |    6 ------
 arch/sparc/include/asm/smp_32.h     |    2 --
 arch/sparc/kernel/smp.c             |    6 ++----
 arch/sparc/kernel/sparc_ksyms.c     |    4 ----
 arch/sparc64/kernel/smp.c           |    4 ----
 arch/um/kernel/smp.c                |    7 -------
 arch/x86/kernel/smpboot.c           |    6 ------
 arch/x86/mach-voyager/voyager_smp.c |    7 -------
 include/asm-cris/smp.h              |    1 -
 include/asm-m32r/smp.h              |    2 --
 init/Kconfig                        |    9 +++++++++
 kernel/cpu.c                        |   11 ++++++-----
 35 files changed, 42 insertions(+), 132 deletions(-)

diff -r fe19e30f8ea3 arch/alpha/include/asm/smp.h
--- a/arch/alpha/include/asm/smp.h	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/alpha/include/asm/smp.h	Thu Oct 23 23:43:49 2008 +1100
@@ -45,7 +45,6 @@ extern struct cpuinfo_alpha cpu_data[NR_
 #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 -r fe19e30f8ea3 arch/alpha/kernel/process.c
--- a/arch/alpha/kernel/process.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/alpha/kernel/process.c	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/alpha/kernel/smp.c
--- a/arch/alpha/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/alpha/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -69,11 +69,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.  */
@@ -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 -r fe19e30f8ea3 arch/arm/kernel/smp.c
--- a/arch/arm/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/arm/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -32,16 +32,6 @@
 #include <asm/processor.h>
 #include <asm/tlbflush.h>
 #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
diff -r fe19e30f8ea3 arch/cris/arch-v32/kernel/smp.c
--- a/arch/cris/arch-v32/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/cris/arch-v32/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -29,11 +29,7 @@ spinlock_t cris_atomic_locks[] = { [0 ..
 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 -r fe19e30f8ea3 arch/ia64/include/asm/smp.h
--- a/arch/ia64/include/asm/smp.h	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/ia64/include/asm/smp.h	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/ia64/kernel/smpboot.c
--- a/arch/ia64/kernel/smpboot.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/ia64/kernel/smpboot.c	Thu Oct 23 23:43:49 2008 +1100
@@ -130,12 +130,6 @@ struct task_struct *task_for_booting_cpu
  * State for each 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);
diff -r fe19e30f8ea3 arch/m32r/Kconfig
--- a/arch/m32r/Kconfig	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/m32r/Kconfig	Thu Oct 23 23:43:49 2008 +1100
@@ -10,6 +10,7 @@ config M32R
 	default y
 	select HAVE_IDE
 	select HAVE_OPROFILE
+	select INIT_ALL_POSSIBLE
 
 config SBUS
 	bool
diff -r fe19e30f8ea3 arch/m32r/kernel/smpboot.c
--- a/arch/m32r/kernel/smpboot.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/m32r/kernel/smpboot.c	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/mips/include/asm/smp.h
--- a/arch/mips/include/asm/smp.h	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/include/asm/smp.h	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/mips/kernel/smp-cmp.c
--- a/arch/mips/kernel/smp-cmp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/kernel/smp-cmp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/mips/kernel/smp-mt.c
--- a/arch/mips/kernel/smp-mt.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/kernel/smp-mt.c	Thu Oct 23 23:43:49 2008 +1100
@@ -70,7 +70,7 @@ static unsigned int __init smvp_vpe_init
 		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 -r fe19e30f8ea3 arch/mips/kernel/smp.c
--- a/arch/mips/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -44,14 +44,9 @@
 #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);
 
@@ -199,7 +194,7 @@ void __devinit smp_prepare_boot_cpu(void
 	 */
 	__cpu_number_map[0] = 0;
 	__cpu_logical_map[0] = 0;
-	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 -r fe19e30f8ea3 arch/mips/kernel/smtc.c
--- a/arch/mips/kernel/smtc.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/kernel/smtc.c	Thu Oct 23 23:43:49 2008 +1100
@@ -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_
 	 */
 	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 -r fe19e30f8ea3 arch/mips/pmc-sierra/yosemite/smp.c
--- a/arch/mips/pmc-sierra/yosemite/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/pmc-sierra/yosemite/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -141,7 +141,7 @@ static void __cpuinit yos_boot_secondary
 }
 
 /*
- * 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 -r fe19e30f8ea3 arch/mips/sgi-ip27/ip27-smp.c
--- a/arch/mips/sgi-ip27/ip27-smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/sgi-ip27/ip27-smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -76,7 +76,7 @@ static int do_cpumask(cnodeid_t cnode, n
 			/* 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 -r fe19e30f8ea3 arch/mips/sibyte/bcm1480/smp.c
--- a/arch/mips/sibyte/bcm1480/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/sibyte/bcm1480/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -136,7 +136,7 @@ static void __cpuinit bcm1480_boot_secon
 
 /*
  * 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(voi
 {
 	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 -r fe19e30f8ea3 arch/mips/sibyte/sb1250/smp.c
--- a/arch/mips/sibyte/sb1250/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/mips/sibyte/sb1250/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -124,7 +124,7 @@ static void __cpuinit sb1250_boot_second
 
 /*
  * 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 -r fe19e30f8ea3 arch/parisc/Kconfig
--- a/arch/parisc/Kconfig	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/parisc/Kconfig	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/parisc/kernel/smp.c
--- a/arch/parisc/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/parisc/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -66,21 +66,6 @@ static volatile int cpu_now_booting __re
 static volatile int cpu_now_booting __read_mostly = 0;	/* track which CPU is booting */
 
 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;
 
diff -r fe19e30f8ea3 arch/powerpc/kernel/smp.c
--- a/arch/powerpc/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/powerpc/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -60,13 +60,9 @@ int smp_hw_index[NR_CPUS];
 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 -r fe19e30f8ea3 arch/s390/Kconfig
--- a/arch/s390/Kconfig	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/s390/Kconfig	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/s390/kernel/smp.c
--- a/arch/s390/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/s390/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -51,12 +51,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];
 
diff -r fe19e30f8ea3 arch/sh/kernel/smp.c
--- a/arch/sh/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/sh/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -29,12 +29,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)
 {
diff -r fe19e30f8ea3 arch/sparc/include/asm/smp_32.h
--- a/arch/sparc/include/asm/smp_32.h	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/sparc/include/asm/smp_32.h	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/sparc/kernel/smp.c
--- a/arch/sparc/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/sparc/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -39,8 +39,6 @@ unsigned char boot_cpu_id = 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(v
 	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 -r fe19e30f8ea3 arch/sparc/kernel/sparc_ksyms.c
--- a/arch/sparc/kernel/sparc_ksyms.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/sparc/kernel/sparc_ksyms.c	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/sparc64/kernel/smp.c
--- a/arch/sparc64/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/sparc64/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/um/kernel/smp.c
--- a/arch/um/kernel/smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/um/kernel/smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -24,13 +24,6 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_ga
 #include "kern.h"
 #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
diff -r fe19e30f8ea3 arch/x86/kernel/smpboot.c
--- a/arch/x86/kernel/smpboot.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/x86/kernel/smpboot.c	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 arch/x86/mach-voyager/voyager_smp.c
--- a/arch/x86/mach-voyager/voyager_smp.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/arch/x86/mach-voyager/voyager_smp.c	Thu Oct 23 23:43:49 2008 +1100
@@ -61,11 +61,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 */
@@ -216,8 +211,6 @@ static cpumask_t smp_commenced_mask = CP
 /* 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 -r fe19e30f8ea3 include/asm-cris/smp.h
--- a/include/asm-cris/smp.h	Thu Oct 23 23:36:18 2008 +1100
+++ b/include/asm-cris/smp.h	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 include/asm-m32r/smp.h
--- a/include/asm-m32r/smp.h	Thu Oct 23 23:36:18 2008 +1100
+++ b/include/asm-m32r/smp.h	Thu Oct 23 23:43:49 2008 +1100
@@ -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 -r fe19e30f8ea3 init/Kconfig
--- a/init/Kconfig	Thu Oct 23 23:36:18 2008 +1100
+++ b/init/Kconfig	Thu Oct 23 23:43:49 2008 +1100
@@ -905,6 +905,15 @@ config MODULE_SRCVERSION_ALL
 
 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 -r fe19e30f8ea3 kernel/cpu.c
--- a/kernel/cpu.c	Thu Oct 23 23:36:18 2008 +1100
+++ b/kernel/cpu.c	Thu Oct 23 23:43:49 2008 +1100
@@ -24,19 +24,20 @@ cpumask_t cpu_present_map __read_mostly;
 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);
 

  reply	other threads:[~2008-10-23 15:10 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-23 10:36 linux-next: Tree for October 23 Stephen Rothwell
2008-10-23 12:11 ` linux-next: kernel/trace/trace.c:658: error: Alexey Dobriyan
2008-10-23 12:48   ` Frédéric Weisbecker
2008-10-23 13:15     ` Frédéric Weisbecker
2008-10-23 14:41       ` Frederic Weisbecker
2008-10-23 14:37         ` Geert Uytterhoeven
2008-10-23 14:57           ` Frédéric Weisbecker
2008-10-23 15:30             ` Geert Uytterhoeven
2008-10-23 15:33               ` Frédéric Weisbecker
2008-10-23 17:27               ` [PATCH] tracing: fix a build error on alpha and m68k Frederic Weisbecker
2008-10-23 16:24                 ` Frédéric Weisbecker
2008-10-23 16:34                 ` Alexey Dobriyan
2008-10-23 16:35                   ` Frédéric Weisbecker
2008-10-23 16:38                   ` Ingo Molnar
2008-10-23 16:51                     ` Frédéric Weisbecker
2008-10-23 16:55                       ` Ingo Molnar
2008-10-23 17:06                         ` Frédéric Weisbecker
2008-10-23 17:12                           ` Steven Rostedt
2008-10-23 17:25                             ` Frédéric Weisbecker
2008-10-24 14:16                     ` Frederic Weisbecker
2008-10-24 13:42                       ` [PATCH] ftrace: handle archs that do not support irqs_disabled_flags Steven Rostedt
2008-10-24 13:54                         ` Frédéric Weisbecker
2008-10-25  8:24                         ` Geert Uytterhoeven
2008-10-28  7:25                           ` Greg Ungerer
2008-10-23 17:14                   ` [PATCH] tracing: fix a build error on alpha and m68k Steven Rostedt
2008-10-30 21:49                   ` Alexey Dobriyan
2008-10-30 22:57                     ` Frédéric Weisbecker
2008-10-30 23:03                       ` Ingo Molnar
2008-10-31  8:50                     ` Geert Uytterhoeven
2008-10-31  9:55                       ` Ingo Molnar
2008-11-01 10:16                         ` Geert Uytterhoeven
2008-10-23 16:37                 ` Ingo Molnar
2008-10-23 12:15 ` linux-next: arch/alpha/include/asm/smp.h:48:1: error: "cpu_possible_map" redefined Alexey Dobriyan
2008-10-23 12:16   ` Alexey Dobriyan
2008-10-23 15:10     ` Rusty Russell [this message]
2008-10-23 12:22 ` linux-next: include/linux/mmzone.h:288: error: 'CONFIG_NR_CPUS' undeclared here (not in a function) Alexey Dobriyan
2008-10-23 14:38   ` Geert Uytterhoeven
2008-10-23 12:26 ` linux-next: undefined reference to 'forbid_dac' Alexey Dobriyan
2008-10-23 13:16   ` FUJITA Tomonori
2008-10-23 12:57 ` linux-next: undefined reference to `nop_trace' Alexey Dobriyan
2008-10-23 13:07 ` linux-next: arch/s390/kernel/smp.c:120: error: request for member 'bits' in something not a structure or union Alexey Dobriyan
2008-10-23 14:14 ` linux-next: x86_64 UML broken Alexey Dobriyan
2008-10-23 14:48 ` linux-next: drivers/lguest/page_tables.c:1044: error: invalid initializer Alexey Dobriyan
2008-10-24  2:08   ` Rusty Russell
2008-10-24  0:18 ` linux-next: Tree for October 23 (cx88) Randy Dunlap
2008-10-24  1:04 ` linux-next: Tree for October 23 Randy Dunlap
2008-10-26  7:19   ` [ofa-general] " Or Gerlitz
2008-10-26 18:49     ` Randy Dunlap
2008-10-26 18:49       ` Randy Dunlap
2008-10-24  1:14 ` [PATCH] PCI hotplug printk format Randy Dunlap
2008-10-24 17:42   ` Jesse Barnes
2008-10-24 17:49   ` Jesse Barnes
2008-10-24  1:17 ` [PATCH] nfsctl: credentials error Randy Dunlap
2008-10-24  1:17 ` [PATCH] coda: " Randy Dunlap

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200810240210.11605.rusty@rustcorp.com.au \
    --to=rusty@rustcorp.com.au \
    --cc=adobriyan@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=sfr@canb.auug.org.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.