diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2015-01-21 01:44:13 -0500 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2015-02-26 15:01:27 -0500 |
commit | 2723249a31a68ccc0ec8ac59a905d7f9430bf8f6 (patch) | |
tree | 795977fb8960723ead95a6614784ed209a92172a /kernel/rcu/tree.c | |
parent | d3f3f3f25b1d4ee152f3f19a812c3a282da4c120 (diff) |
rcu: Wire ->rda pointers at compile time
This commit wires up the rcu_state structures' ->rda pointers to the
per-CPU rcu_data structures at compile time, thus ensuring that this
linkage is present at early boot, in turn allowing posting of callbacks
before rcu_init() is executed.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu/tree.c')
-rw-r--r-- | kernel/rcu/tree.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index f8cdb92da10b..d2fa95e4a268 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c | |||
@@ -91,8 +91,10 @@ static const char *tp_##sname##_varname __used __tracepoint_string = sname##_var | |||
91 | 91 | ||
92 | #define RCU_STATE_INITIALIZER(sname, sabbr, cr) \ | 92 | #define RCU_STATE_INITIALIZER(sname, sabbr, cr) \ |
93 | DEFINE_RCU_TPS(sname) \ | 93 | DEFINE_RCU_TPS(sname) \ |
94 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_data, sname##_data); \ | ||
94 | struct rcu_state sname##_state = { \ | 95 | struct rcu_state sname##_state = { \ |
95 | .level = { &sname##_state.node[0] }, \ | 96 | .level = { &sname##_state.node[0] }, \ |
97 | .rda = &sname##_data, \ | ||
96 | .call = cr, \ | 98 | .call = cr, \ |
97 | .fqs_state = RCU_GP_IDLE, \ | 99 | .fqs_state = RCU_GP_IDLE, \ |
98 | .gpnum = 0UL - 300UL, \ | 100 | .gpnum = 0UL - 300UL, \ |
@@ -104,8 +106,7 @@ struct rcu_state sname##_state = { \ | |||
104 | .onoff_mutex = __MUTEX_INITIALIZER(sname##_state.onoff_mutex), \ | 106 | .onoff_mutex = __MUTEX_INITIALIZER(sname##_state.onoff_mutex), \ |
105 | .name = RCU_STATE_NAME(sname), \ | 107 | .name = RCU_STATE_NAME(sname), \ |
106 | .abbr = sabbr, \ | 108 | .abbr = sabbr, \ |
107 | }; \ | 109 | } |
108 | DEFINE_PER_CPU_SHARED_ALIGNED(struct rcu_data, sname##_data) | ||
109 | 110 | ||
110 | RCU_STATE_INITIALIZER(rcu_sched, 's', call_rcu_sched); | 111 | RCU_STATE_INITIALIZER(rcu_sched, 's', call_rcu_sched); |
111 | RCU_STATE_INITIALIZER(rcu_bh, 'b', call_rcu_bh); | 112 | RCU_STATE_INITIALIZER(rcu_bh, 'b', call_rcu_bh); |
@@ -3843,7 +3844,6 @@ static void __init rcu_init_one(struct rcu_state *rsp, | |||
3843 | } | 3844 | } |
3844 | } | 3845 | } |
3845 | 3846 | ||
3846 | rsp->rda = rda; | ||
3847 | init_waitqueue_head(&rsp->gp_wq); | 3847 | init_waitqueue_head(&rsp->gp_wq); |
3848 | rnp = rsp->level[rcu_num_lvls - 1]; | 3848 | rnp = rsp->level[rcu_num_lvls - 1]; |
3849 | for_each_possible_cpu(i) { | 3849 | for_each_possible_cpu(i) { |