aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r--kernel/rcutree.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index f3e43274ed53..75762cddbe03 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1132,6 +1132,8 @@ __rcu_process_callbacks(struct rcu_state *rsp, struct rcu_data *rdp)
1132{ 1132{
1133 unsigned long flags; 1133 unsigned long flags;
1134 1134
1135 WARN_ON_ONCE(rdp->beenonline == 0);
1136
1135 /* 1137 /*
1136 * If an RCU GP has gone long enough, go check for dyntick 1138 * If an RCU GP has gone long enough, go check for dyntick
1137 * idle CPUs and, if needed, send resched IPIs. 1139 * idle CPUs and, if needed, send resched IPIs.
@@ -1416,14 +1418,13 @@ static void __cpuinit rcu_online_cpu(int cpu)
1416{ 1418{
1417 rcu_init_percpu_data(cpu, &rcu_state); 1419 rcu_init_percpu_data(cpu, &rcu_state);
1418 rcu_init_percpu_data(cpu, &rcu_bh_state); 1420 rcu_init_percpu_data(cpu, &rcu_bh_state);
1419 open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
1420} 1421}
1421 1422
1422/* 1423/*
1423 * Handle CPU online/offline notifcation events. 1424 * Handle CPU online/offline notifcation events.
1424 */ 1425 */
1425static int __cpuinit rcu_cpu_notify(struct notifier_block *self, 1426int __cpuinit rcu_cpu_notify(struct notifier_block *self,
1426 unsigned long action, void *hcpu) 1427 unsigned long action, void *hcpu)
1427{ 1428{
1428 long cpu = (long)hcpu; 1429 long cpu = (long)hcpu;
1429 1430
@@ -1532,10 +1533,6 @@ do { \
1532 } \ 1533 } \
1533} while (0) 1534} while (0)
1534 1535
1535static struct notifier_block __cpuinitdata rcu_nb = {
1536 .notifier_call = rcu_cpu_notify,
1537};
1538
1539void __init __rcu_init(void) 1536void __init __rcu_init(void)
1540{ 1537{
1541 int i; /* All used by RCU_DATA_PTR_INIT(). */ 1538 int i; /* All used by RCU_DATA_PTR_INIT(). */
@@ -1554,11 +1551,7 @@ void __init __rcu_init(void)
1554 RCU_DATA_PTR_INIT(&rcu_bh_state, rcu_bh_data); 1551 RCU_DATA_PTR_INIT(&rcu_bh_state, rcu_bh_data);
1555 for_each_possible_cpu(i) 1552 for_each_possible_cpu(i)
1556 rcu_boot_init_percpu_data(i, &rcu_bh_state); 1553 rcu_boot_init_percpu_data(i, &rcu_bh_state);
1557 1554 open_softirq(RCU_SOFTIRQ, rcu_process_callbacks);
1558 for_each_online_cpu(i)
1559 rcu_cpu_notify(&rcu_nb, CPU_UP_PREPARE, (void *)(long)i);
1560 /* Register notifier for non-boot CPUs */
1561 register_cpu_notifier(&rcu_nb);
1562} 1555}
1563 1556
1564module_param(blimit, int, 0); 1557module_param(blimit, int, 0);