diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/rcupdate.c | 22 | ||||
-rw-r--r-- | kernel/rcutiny.c | 11 | ||||
-rw-r--r-- | kernel/rcutree.c | 17 |
3 files changed, 15 insertions, 35 deletions
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index 7625f207f65e..eb6b534db318 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c | |||
@@ -161,28 +161,6 @@ EXPORT_SYMBOL_GPL(synchronize_rcu_bh); | |||
161 | 161 | ||
162 | #endif /* #ifndef CONFIG_TINY_RCU */ | 162 | #endif /* #ifndef CONFIG_TINY_RCU */ |
163 | 163 | ||
164 | static int __cpuinit rcu_barrier_cpu_hotplug(struct notifier_block *self, | ||
165 | unsigned long action, void *hcpu) | ||
166 | { | ||
167 | return rcu_cpu_notify(self, action, hcpu); | ||
168 | } | ||
169 | |||
170 | void __init rcu_init(void) | ||
171 | { | ||
172 | int i; | ||
173 | |||
174 | __rcu_init(); | ||
175 | cpu_notifier(rcu_barrier_cpu_hotplug, 0); | ||
176 | |||
177 | /* | ||
178 | * We don't need protection against CPU-hotplug here because | ||
179 | * this is called early in boot, before either interrupts | ||
180 | * or the scheduler are operational. | ||
181 | */ | ||
182 | for_each_online_cpu(i) | ||
183 | rcu_barrier_cpu_hotplug(NULL, CPU_UP_PREPARE, (void *)(long)i); | ||
184 | } | ||
185 | |||
186 | void rcu_scheduler_starting(void) | 164 | void rcu_scheduler_starting(void) |
187 | { | 165 | { |
188 | WARN_ON(num_online_cpus() != 1); | 166 | WARN_ON(num_online_cpus() != 1); |
diff --git a/kernel/rcutiny.c b/kernel/rcutiny.c index b33ec3aa377a..9f6d9ff2572c 100644 --- a/kernel/rcutiny.c +++ b/kernel/rcutiny.c | |||
@@ -178,15 +178,6 @@ static void rcu_process_callbacks(struct softirq_action *unused) | |||
178 | } | 178 | } |
179 | 179 | ||
180 | /* | 180 | /* |
181 | * Null function to handle CPU being onlined. Longer term, we want to | ||
182 | * make TINY_RCU avoid using rcupdate.c, but later... | ||
183 | */ | ||
184 | int rcu_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) | ||
185 | { | ||
186 | return NOTIFY_OK; | ||
187 | } | ||
188 | |||
189 | /* | ||
190 | * Wait for a grace period to elapse. But it is illegal to invoke | 181 | * Wait for a grace period to elapse. But it is illegal to invoke |
191 | * synchronize_sched() from within an RCU read-side critical section. | 182 | * synchronize_sched() from within an RCU read-side critical section. |
192 | * Therefore, any legal call to synchronize_sched() is a quiescent | 183 | * Therefore, any legal call to synchronize_sched() is a quiescent |
@@ -285,7 +276,7 @@ void rcu_barrier_sched(void) | |||
285 | } | 276 | } |
286 | EXPORT_SYMBOL_GPL(rcu_barrier_sched); | 277 | EXPORT_SYMBOL_GPL(rcu_barrier_sched); |
287 | 278 | ||
288 | void __rcu_init(void) | 279 | void __init rcu_init(void) |
289 | { | 280 | { |
290 | open_softirq(RCU_SOFTIRQ, rcu_process_callbacks); | 281 | open_softirq(RCU_SOFTIRQ, rcu_process_callbacks); |
291 | } | 282 | } |
diff --git a/kernel/rcutree.c b/kernel/rcutree.c index b79bfcd28e95..e3d3bbddbcd5 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c | |||
@@ -1644,8 +1644,8 @@ static void __cpuinit rcu_online_cpu(int cpu) | |||
1644 | /* | 1644 | /* |
1645 | * Handle CPU online/offline notification events. | 1645 | * Handle CPU online/offline notification events. |
1646 | */ | 1646 | */ |
1647 | int __cpuinit rcu_cpu_notify(struct notifier_block *self, | 1647 | static int __cpuinit rcu_cpu_notify(struct notifier_block *self, |
1648 | unsigned long action, void *hcpu) | 1648 | unsigned long action, void *hcpu) |
1649 | { | 1649 | { |
1650 | long cpu = (long)hcpu; | 1650 | long cpu = (long)hcpu; |
1651 | 1651 | ||
@@ -1781,8 +1781,10 @@ do { \ | |||
1781 | } \ | 1781 | } \ |
1782 | } while (0) | 1782 | } while (0) |
1783 | 1783 | ||
1784 | void __init __rcu_init(void) | 1784 | void __init rcu_init(void) |
1785 | { | 1785 | { |
1786 | int i; | ||
1787 | |||
1786 | rcu_bootup_announce(); | 1788 | rcu_bootup_announce(); |
1787 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR | 1789 | #ifdef CONFIG_RCU_CPU_STALL_DETECTOR |
1788 | printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n"); | 1790 | printk(KERN_INFO "RCU-based detection of stalled CPUs is enabled.\n"); |
@@ -1791,6 +1793,15 @@ void __init __rcu_init(void) | |||
1791 | RCU_INIT_FLAVOR(&rcu_bh_state, rcu_bh_data); | 1793 | RCU_INIT_FLAVOR(&rcu_bh_state, rcu_bh_data); |
1792 | __rcu_init_preempt(); | 1794 | __rcu_init_preempt(); |
1793 | open_softirq(RCU_SOFTIRQ, rcu_process_callbacks); | 1795 | open_softirq(RCU_SOFTIRQ, rcu_process_callbacks); |
1796 | |||
1797 | /* | ||
1798 | * We don't need protection against CPU-hotplug here because | ||
1799 | * this is called early in boot, before either interrupts | ||
1800 | * or the scheduler are operational. | ||
1801 | */ | ||
1802 | cpu_notifier(rcu_cpu_notify, 0); | ||
1803 | for_each_online_cpu(i) | ||
1804 | rcu_cpu_notify(NULL, CPU_UP_PREPARE, (void *)(long)i); | ||
1794 | } | 1805 | } |
1795 | 1806 | ||
1796 | #include "rcutree_plugin.h" | 1807 | #include "rcutree_plugin.h" |