[PATCH] cpumask 1/10 cpu_present_map real even on non-smp

Paul Jackson
2004-06-03T17:48:05Z

cpumask 1/10 cpu_present_map real even on non-smp

This patch makes cpu_present_map a real map for all
configurations, instead of a constant for non-SMP.
It also moves the definition of cpu_present_map out of
kernel/cpu.c into kernel/sched.c, because cpu.c isn't
compiled into non-SMP kernels.

The pattern is that each of the possible, present and
online cpu maps are actual kernel global cpumask_t
variables, for all configurations. They are documented
in include/linux/cpumask.h. Some of the UP (NR_CPUS=1)
code cheats, and hardcodes the assumption that the single
bit position of these maps is always set, as an optimization.

include/linux/cpumask.h | 13 +++++--------
kernel/cpu.c | 8 --------
kernel/sched.c | 10 ++++++++++
3 files changed, 15 insertions(+), 16 deletions(-)

Signed-off-by: Paul Jackson <pj@sgi.com>

Index: 2.6.7-rc2-mm2/include/linux/cpumask.h
===================================================================
--- 2.6.7-rc2-mm2.orig/include/linux/cpumask.h 2004-06-03 05:39:37.000000000 -0700
+++ 2.6.7-rc2-mm2/include/linux/cpumask.h 2004-06-03 05:56:00.000000000 -0700
@@ -10,15 +10,12 @@

extern cpumask_t cpu_online_map;
extern cpumask_t cpu_possible_map;
-extern cpumask_t cpu_present_map;

#define num_online_cpus() cpus_weight(cpu_online_map)
#define num_possible_cpus() cpus_weight(cpu_possible_map)
-#define num_present_cpus() cpus_weight(cpu_present_map)

#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map)
#define cpu_possible(cpu) cpu_isset(cpu, cpu_possible_map)
-#define cpu_present(cpu) cpu_isset(cpu, cpu_present_map)

#define for_each_cpu_mask(cpu, mask) \
for (cpu = first_cpu_const(mk_cpumask_const(mask)); \
@@ -27,25 +24,25 @@

#define for_each_cpu(cpu) for_each_cpu_mask(cpu, cpu_possible_map)
#define for_each_online_cpu(cpu) for_each_cpu_mask(cpu, cpu_online_map)
-#define for_each_present_cpu(cpu) for_each_cpu_mask(cpu, cpu_present_map)
#else
#define cpu_online_map cpumask_of_cpu(0)
#define cpu_possible_map cpumask_of_cpu(0)
-#define cpu_present_map cpumask_of_cpu(0)

#define num_online_cpus() 1
#define num_possible_cpus() 1
-#define num_present_cpus() 1

#define cpu_online(cpu) ({ BUG_ON((cpu) != 0); 1; })
#define cpu_possible(cpu) ({ BUG_ON((cpu) != 0); 1; })
-#define cpu_present(cpu) ({ BUG_ON((cpu) != 0); 1; })

#define for_each_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
#define for_each_online_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
-#define for_each_present_cpu(cpu) for (cpu = 0; cpu < 1; cpu++)
#endif

+extern cpumask_t cpu_present_map;
+#define num_present_cpus() cpus_weight(cpu_present_map)
+#define cpu_present(cpu) cpu_isset(cpu, cpu_present_map)
+#define for_each_present_cpu(cpu) for_each_cpu_mask(cpu, cpu_present_map)
+
#define cpumask_scnprintf(buf, buflen, map) \
bitmap_scnprintf(buf, buflen, cpus_addr(map), NR_CPUS)

Index: 2.6.7-rc2-mm2/kernel/cpu.c
===================================================================
--- 2.6.7-rc2-mm2.orig/kernel/cpu.c 2004-06-03 05:39:46.000000000 -0700
+++ 2.6.7-rc2-mm2/kernel/cpu.c 2004-06-03 05:56:00.000000000 -0700
@@ -20,14 +20,6 @@
DECLARE_MUTEX(cpucontrol);

static struct notifier_block *cpu_chain;
-/*
- * Represents all cpu's present in the system
- * In systems capable of hotplug, this map could dynamically grow
- * as new cpu's are detected in the system via any platform specific
- * method, such as ACPI for e.g.
- */
-cpumask_t cpu_present_map;
-EXPORT_SYMBOL(cpu_present_map);

/* Need to know about CPUs going up/down? */
int register_cpu_notifier(struct notifier_block *nb)
Index: 2.6.7-rc2-mm2/kernel/sched.c
===================================================================
--- 2.6.7-rc2-mm2.orig/kernel/sched.c 2004-06-03 05:46:32.000000000 -0700
+++ 2.6.7-rc2-mm2/kernel/sched.c 2004-06-03 05:56:00.000000000 -0700
@@ -3109,6 +3109,16 @@
return retval;
}

+/*
+ * Represents all cpu's present in the system
+ * In systems capable of hotplug, this map could dynamically grow
+ * as new cpu's are detected in the system via any platform specific
+ * method, such as ACPI for e.g.
+ */
+
+cpumask_t cpu_present_map;
+EXPORT_SYMBOL(cpu_present_map);
+
/**
* sys_sched_getaffinity - get the cpu affinity of a process
* @pid: pid of the process

--
I won't rest till it's the best ...
Programmer, Linux Scalability
Paul Jackson <pj@sgi.com> 1.650.933.1373