public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] cpumask: centralize cpu_online_map and cpu_possible_map
@ 2008-11-19 14:37 Rusty Russell
  2008-11-19 18:17 ` Russell King
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Rusty Russell @ 2008-11-19 14:37 UTC (permalink / raw)
  To: linux-kernel
  Cc: Mike Travis, ink, rmk, starvik, tony.luck, takata, ralf, grundler,
	paulus, schwidefsky, lethal, wli, davem, jdike, mingo, ink, rmk,
	starvik, tony.luck, takata, ralf, grundler, paulus, schwidefsky,
	lethal, wli, davem, jdike, mingo

(I'll be rinsing this through linux-next; testing feedback and even
Acked-by's appreciated).

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

Twists:
1) Some archs (m32, parisc, s390) 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>
Cc: Mike Travis <travis@sgi.com>
Cc: ink@jurassic.park.msu.ru
Cc: rmk@arm.linux.org.uk
Cc: starvik@axis.com
Cc: tony.luck@intel.com
Cc: takata@linux-m32r.org
Cc: ralf@linux-mips.org
Cc: grundler@parisc-linux.org
Cc: paulus@samba.org
Cc: schwidefsky@de.ibm.com
Cc: lethal@linux-sh.org
Cc: wli@holomorphy.com
Cc: davem@davemloft.net
Cc: jdike@addtoit.com
Cc: mingo@redhat.com
---
 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/cris/include/asm/smp.h         |    1 -
 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-m32r/smp.h              |    2 --
 init/Kconfig                        |    9 +++++++++
 kernel/cpu.c                        |   11 ++++++-----
 35 files changed, 42 insertions(+), 132 deletions(-)

diff -r c8ab7f6fc5e8 arch/alpha/include/asm/smp.h
--- a/arch/alpha/include/asm/smp.h	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/alpha/include/asm/smp.h	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/alpha/kernel/process.c
--- a/arch/alpha/kernel/process.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/alpha/kernel/process.c	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/alpha/kernel/smp.c
--- a/arch/alpha/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/alpha/kernel/smp.c	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/arm/kernel/smp.c
--- a/arch/arm/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/arm/kernel/smp.c	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/cris/arch-v32/kernel/smp.c
--- a/arch/cris/arch-v32/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/cris/arch-v32/kernel/smp.c	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/ia64/include/asm/smp.h
--- a/arch/ia64/include/asm/smp.h	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/ia64/include/asm/smp.h	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/ia64/kernel/smpboot.c
--- a/arch/ia64/kernel/smpboot.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/ia64/kernel/smpboot.c	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/m32r/Kconfig
--- a/arch/m32r/Kconfig	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/m32r/Kconfig	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/m32r/kernel/smpboot.c
--- a/arch/m32r/kernel/smpboot.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/m32r/kernel/smpboot.c	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/mips/include/asm/smp.h
--- a/arch/mips/include/asm/smp.h	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/include/asm/smp.h	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/mips/kernel/smp-cmp.c
--- a/arch/mips/kernel/smp-cmp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/kernel/smp-cmp.c	Fri Oct 31 11:22:28 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 c8ab7f6fc5e8 arch/mips/kernel/smp-mt.c
--- a/arch/mips/kernel/smp-mt.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/kernel/smp-mt.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/mips/kernel/smp.c
--- a/arch/mips/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/kernel/smp.c	Fri Oct 31 11:22:29 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);
 
@@ -195,7 +190,7 @@ void __init smp_prepare_cpus(unsigned in
 /* 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 -r c8ab7f6fc5e8 arch/mips/kernel/smtc.c
--- a/arch/mips/kernel/smtc.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/kernel/smtc.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/mips/pmc-sierra/yosemite/smp.c
--- a/arch/mips/pmc-sierra/yosemite/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/pmc-sierra/yosemite/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/mips/sgi-ip27/ip27-smp.c
--- a/arch/mips/sgi-ip27/ip27-smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/sgi-ip27/ip27-smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/mips/sibyte/bcm1480/smp.c
--- a/arch/mips/sibyte/bcm1480/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/sibyte/bcm1480/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/mips/sibyte/sb1250/smp.c
--- a/arch/mips/sibyte/sb1250/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/mips/sibyte/sb1250/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/parisc/Kconfig
--- a/arch/parisc/Kconfig	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/parisc/Kconfig	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/parisc/kernel/smp.c
--- a/arch/parisc/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/parisc/kernel/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/powerpc/kernel/smp.c
--- a/arch/powerpc/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/powerpc/kernel/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/s390/Kconfig
--- a/arch/s390/Kconfig	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/s390/Kconfig	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/s390/kernel/smp.c
--- a/arch/s390/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/s390/kernel/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/sh/kernel/smp.c
--- a/arch/sh/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/sh/kernel/smp.c	Fri Oct 31 11:22:29 2008 +1100
@@ -30,12 +30,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 c8ab7f6fc5e8 arch/sparc/include/asm/smp_32.h
--- a/arch/sparc/include/asm/smp_32.h	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/sparc/include/asm/smp_32.h	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/sparc/kernel/smp.c
--- a/arch/sparc/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/sparc/kernel/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/sparc/kernel/sparc_ksyms.c
--- a/arch/sparc/kernel/sparc_ksyms.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/sparc/kernel/sparc_ksyms.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/sparc64/kernel/smp.c
--- a/arch/sparc64/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/sparc64/kernel/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/um/kernel/smp.c
--- a/arch/um/kernel/smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/um/kernel/smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/x86/kernel/smpboot.c
--- a/arch/x86/kernel/smpboot.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/x86/kernel/smpboot.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/x86/mach-voyager/voyager_smp.c
--- a/arch/x86/mach-voyager/voyager_smp.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/x86/mach-voyager/voyager_smp.c	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 arch/cris/include/asm/smp.h
--- a/arch/cris/include/asm/smp.h	Fri Oct 31 10:48:30 2008 +1100
+++ b/arch/cris/include/asm/smp.h	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 include/asm-m32r/smp.h
--- a/include/asm-m32r/smp.h	Fri Oct 31 10:48:30 2008 +1100
+++ b/include/asm-m32r/smp.h	Fri Oct 31 11:22:29 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 c8ab7f6fc5e8 init/Kconfig
--- a/init/Kconfig	Fri Oct 31 10:48:30 2008 +1100
+++ b/init/Kconfig	Fri Oct 31 11:22:29 2008 +1100
@@ -910,6 +910,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 c8ab7f6fc5e8 kernel/cpu.c
--- a/kernel/cpu.c	Fri Oct 31 10:48:30 2008 +1100
+++ b/kernel/cpu.c	Fri Oct 31 11:22:29 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);
 



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-11-20  8:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-19 14:37 [PATCH 1/2] cpumask: centralize cpu_online_map and cpu_possible_map Rusty Russell
2008-11-19 18:17 ` Russell King
2008-11-19 23:30   ` Rusty Russell
2008-11-20  5:10 ` Grant Grundler
2008-11-20  8:20 ` Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox