lkml.org 
[lkml]   [2004]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[RFC/PATCH 3/4] introduce cpu_add and cpu_remove

These functions safely update cpu_present_map (i.e. with the
cpucontrol semaphore held) and register or unregister the cpu device
as needed. These are needed by systems which can add or remove cpus
from the system after boot (e.g. ppc64 and ia64), and are intended to
be called from the platform-specific code such as the ACPI or Open
Firmware layers.

Signed-off-by: Nathan Lynch <nathanl@austin.ibm.com>


---


diff -puN include/linux/cpu.h~introduce-cpu_add-and-cpu_remove include/linux/cpu.h
--- 2.6.10-rc1/include/linux/cpu.h~introduce-cpu_add-and-cpu_remove 2004-10-24 03:52:59.000000000 -0500
+++ 2.6.10-rc1-nathanl/include/linux/cpu.h 2004-10-24 03:52:59.000000000 -0500
@@ -67,6 +67,8 @@ extern struct semaphore cpucontrol;
register_cpu_notifier(&fn##_nb); \
}
int cpu_down(unsigned int cpu);
+unsigned int cpu_add(void);
+void cpu_remove(unsigned int);
#define cpu_is_offline(cpu) unlikely(!cpu_online(cpu))
#else
#define lock_cpu_hotplug() do { } while (0)
diff -puN kernel/cpu.c~introduce-cpu_add-and-cpu_remove kernel/cpu.c
--- 2.6.10-rc1/kernel/cpu.c~introduce-cpu_add-and-cpu_remove 2004-10-24 03:52:59.000000000 -0500
+++ 2.6.10-rc1-nathanl/kernel/cpu.c 2004-10-24 03:52:59.000000000 -0500
@@ -180,6 +180,49 @@ out:
unlock_cpu_hotplug();
return err;
}
+
+/*
+ * Add a cpu to the system. Return the number of the cpu added,
+ * or NR_CPUS if no more slots available.
+ */
+unsigned int cpu_add(void)
+{
+ unsigned int cpu = NR_CPUS;
+
+ lock_cpu_hotplug();
+
+ if (num_present_cpus() == num_possible_cpus())
+ goto out;
+
+ for_each_cpu(cpu)
+ if (!cpu_present(cpu))
+ break;
+
+ if (register_cpu(cpu)) {
+ cpu = NR_CPUS;
+ goto out;
+ }
+ cpu_set(cpu, cpu_present_map);
+out:
+ unlock_cpu_hotplug();
+ return cpu;
+}
+
+/*
+ * Remove a cpu from the system.
+ */
+void cpu_remove(unsigned int cpu)
+{
+ lock_cpu_hotplug();
+
+ BUG_ON(cpu_present(cpu));
+
+ unregister_cpu(cpu);
+
+ cpu_clear(cpu, cpu_present_map);
+
+ unlock_cpu_hotplug();
+}
#else
static inline int cpu_run_sbin_hotplug(unsigned int cpu, const char *action)
{
_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:07    [W:1.288 / U:0.848 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site