diff options
Diffstat (limited to 'kernel/cpu.c')
-rw-r--r-- | kernel/cpu.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/kernel/cpu.c b/kernel/cpu.c index 0690ac27a253..63e8de13c948 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c | |||
@@ -20,6 +20,20 @@ | |||
20 | /* Serializes the updates to cpu_online_mask, cpu_present_mask */ | 20 | /* Serializes the updates to cpu_online_mask, cpu_present_mask */ |
21 | static DEFINE_MUTEX(cpu_add_remove_lock); | 21 | static DEFINE_MUTEX(cpu_add_remove_lock); |
22 | 22 | ||
23 | /* | ||
24 | * The following two API's must be used when attempting | ||
25 | * to serialize the updates to cpu_online_mask, cpu_present_mask. | ||
26 | */ | ||
27 | void cpu_maps_update_begin(void) | ||
28 | { | ||
29 | mutex_lock(&cpu_add_remove_lock); | ||
30 | } | ||
31 | |||
32 | void cpu_maps_update_done(void) | ||
33 | { | ||
34 | mutex_unlock(&cpu_add_remove_lock); | ||
35 | } | ||
36 | |||
23 | static __cpuinitdata RAW_NOTIFIER_HEAD(cpu_chain); | 37 | static __cpuinitdata RAW_NOTIFIER_HEAD(cpu_chain); |
24 | 38 | ||
25 | /* If set, cpu_up and cpu_down will return -EBUSY and do nothing. | 39 | /* If set, cpu_up and cpu_down will return -EBUSY and do nothing. |
@@ -27,6 +41,8 @@ static __cpuinitdata RAW_NOTIFIER_HEAD(cpu_chain); | |||
27 | */ | 41 | */ |
28 | static int cpu_hotplug_disabled; | 42 | static int cpu_hotplug_disabled; |
29 | 43 | ||
44 | #ifdef CONFIG_HOTPLUG_CPU | ||
45 | |||
30 | static struct { | 46 | static struct { |
31 | struct task_struct *active_writer; | 47 | struct task_struct *active_writer; |
32 | struct mutex lock; /* Synchronizes accesses to refcount, */ | 48 | struct mutex lock; /* Synchronizes accesses to refcount, */ |
@@ -41,8 +57,6 @@ static struct { | |||
41 | .refcount = 0, | 57 | .refcount = 0, |
42 | }; | 58 | }; |
43 | 59 | ||
44 | #ifdef CONFIG_HOTPLUG_CPU | ||
45 | |||
46 | void get_online_cpus(void) | 60 | void get_online_cpus(void) |
47 | { | 61 | { |
48 | might_sleep(); | 62 | might_sleep(); |
@@ -67,22 +81,6 @@ void put_online_cpus(void) | |||
67 | } | 81 | } |
68 | EXPORT_SYMBOL_GPL(put_online_cpus); | 82 | EXPORT_SYMBOL_GPL(put_online_cpus); |
69 | 83 | ||
70 | #endif /* CONFIG_HOTPLUG_CPU */ | ||
71 | |||
72 | /* | ||
73 | * The following two API's must be used when attempting | ||
74 | * to serialize the updates to cpu_online_mask, cpu_present_mask. | ||
75 | */ | ||
76 | void cpu_maps_update_begin(void) | ||
77 | { | ||
78 | mutex_lock(&cpu_add_remove_lock); | ||
79 | } | ||
80 | |||
81 | void cpu_maps_update_done(void) | ||
82 | { | ||
83 | mutex_unlock(&cpu_add_remove_lock); | ||
84 | } | ||
85 | |||
86 | /* | 84 | /* |
87 | * This ensures that the hotplug operation can begin only when the | 85 | * This ensures that the hotplug operation can begin only when the |
88 | * refcount goes to zero. | 86 | * refcount goes to zero. |
@@ -124,6 +122,12 @@ static void cpu_hotplug_done(void) | |||
124 | cpu_hotplug.active_writer = NULL; | 122 | cpu_hotplug.active_writer = NULL; |
125 | mutex_unlock(&cpu_hotplug.lock); | 123 | mutex_unlock(&cpu_hotplug.lock); |
126 | } | 124 | } |
125 | |||
126 | #else /* #if CONFIG_HOTPLUG_CPU */ | ||
127 | static void cpu_hotplug_begin(void) {} | ||
128 | static void cpu_hotplug_done(void) {} | ||
129 | #endif /* #esle #if CONFIG_HOTPLUG_CPU */ | ||
130 | |||
127 | /* Need to know about CPUs going up/down? */ | 131 | /* Need to know about CPUs going up/down? */ |
128 | int __ref register_cpu_notifier(struct notifier_block *nb) | 132 | int __ref register_cpu_notifier(struct notifier_block *nb) |
129 | { | 133 | { |