diff options
| author | Gautham R Shenoy <ego@in.ibm.com> | 2006-12-06 23:38:58 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-07 11:39:41 -0500 |
| commit | f7dff2b12654149c9cac8d8c79b6588759edd5a9 (patch) | |
| tree | 2fc9e50d6c796d48de577ee4b0704326337771ed /include | |
| parent | d3fa72e4556ec1f04e46a0d561d9e785ecaa173d (diff) | |
[PATCH] Handle per-subsystem mutexes for CONFIG_HOTPLUG_CPU not set
Provide a common interface for all the subsystems to lock and unlock their
per-subsystem hotcpu mutexes.
When CONFIG_HOTPLUG_CPU is not set, these operations would be no-ops.
[akpm@osdl.org: macros -> inlines]
Signed-off-by: Gautham R Shenoy <ego@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/cpu.h | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 71dc6ba4f73f..bf00ce6ecadf 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/compiler.h> | 24 | #include <linux/compiler.h> |
| 25 | #include <linux/cpumask.h> | 25 | #include <linux/cpumask.h> |
| 26 | #include <asm/semaphore.h> | 26 | #include <asm/semaphore.h> |
| 27 | #include <linux/mutex.h> | ||
| 27 | 28 | ||
| 28 | struct cpu { | 29 | struct cpu { |
| 29 | int node_id; /* The node which contains the CPU */ | 30 | int node_id; /* The node which contains the CPU */ |
| @@ -74,6 +75,17 @@ extern struct sysdev_class cpu_sysdev_class; | |||
| 74 | 75 | ||
| 75 | #ifdef CONFIG_HOTPLUG_CPU | 76 | #ifdef CONFIG_HOTPLUG_CPU |
| 76 | /* Stop CPUs going up and down. */ | 77 | /* Stop CPUs going up and down. */ |
| 78 | |||
| 79 | static inline void cpuhotplug_mutex_lock(struct mutex *cpu_hp_mutex) | ||
| 80 | { | ||
| 81 | mutex_lock(cpu_hp_mutex); | ||
| 82 | } | ||
| 83 | |||
| 84 | static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex) | ||
| 85 | { | ||
| 86 | mutex_unlock(cpu_hp_mutex); | ||
| 87 | } | ||
| 88 | |||
| 77 | extern void lock_cpu_hotplug(void); | 89 | extern void lock_cpu_hotplug(void); |
| 78 | extern void unlock_cpu_hotplug(void); | 90 | extern void unlock_cpu_hotplug(void); |
| 79 | #define hotcpu_notifier(fn, pri) { \ | 91 | #define hotcpu_notifier(fn, pri) { \ |
| @@ -85,7 +97,14 @@ extern void unlock_cpu_hotplug(void); | |||
| 85 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) | 97 | #define unregister_hotcpu_notifier(nb) unregister_cpu_notifier(nb) |
| 86 | int cpu_down(unsigned int cpu); | 98 | int cpu_down(unsigned int cpu); |
| 87 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) | 99 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) |
| 88 | #else | 100 | |
| 101 | #else /* CONFIG_HOTPLUG_CPU */ | ||
| 102 | |||
| 103 | static inline void cpuhotplug_mutex_lock(struct mutex *cpu_hp_mutex) | ||
| 104 | { } | ||
| 105 | static inline void cpuhotplug_mutex_unlock(struct mutex *cpu_hp_mutex) | ||
| 106 | { } | ||
| 107 | |||
| 89 | #define lock_cpu_hotplug() do { } while (0) | 108 | #define lock_cpu_hotplug() do { } while (0) |
| 90 | #define unlock_cpu_hotplug() do { } while (0) | 109 | #define unlock_cpu_hotplug() do { } while (0) |
| 91 | #define lock_cpu_hotplug_interruptible() 0 | 110 | #define lock_cpu_hotplug_interruptible() 0 |
| @@ -95,7 +114,7 @@ int cpu_down(unsigned int cpu); | |||
| 95 | 114 | ||
| 96 | /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ | 115 | /* CPUs don't go offline once they're online w/o CONFIG_HOTPLUG_CPU */ |
| 97 | static inline int cpu_is_offline(int cpu) { return 0; } | 116 | static inline int cpu_is_offline(int cpu) { return 0; } |
| 98 | #endif | 117 | #endif /* CONFIG_HOTPLUG_CPU */ |
| 99 | 118 | ||
| 100 | #ifdef CONFIG_SUSPEND_SMP | 119 | #ifdef CONFIG_SUSPEND_SMP |
| 101 | extern int disable_nonboot_cpus(void); | 120 | extern int disable_nonboot_cpus(void); |
