aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.c
diff options
context:
space:
mode:
authorPaul E. McKenney <paul.mckenney@linaro.org>2012-05-09 18:39:56 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2012-07-02 15:34:21 -0400
commit3f5d3ea64f1783f0d4ea0d35890ae3297f045a8b (patch)
tree1a472f1a751aa6171f8ab47e083dde4f5125a9b0 /kernel/rcutree.c
parent285fe29481d865ae381ad3924c80894e6968c2d8 (diff)
rcu: Consolidate duplicate callback-list initialization
There are a couple of open-coded initializations of the rcu_data structure's RCU callback list. This commit therefore consolidates them into a new init_callback_list() function. Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r--kernel/rcutree.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index dc8c5284fe06..81e0394e46af 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -937,6 +937,18 @@ check_for_new_grace_period(struct rcu_state *rsp, struct rcu_data *rdp)
937} 937}
938 938
939/* 939/*
940 * Initialize the specified rcu_data structure's callback list to empty.
941 */
942static void init_callback_list(struct rcu_data *rdp)
943{
944 int i;
945
946 rdp->nxtlist = NULL;
947 for (i = 0; i < RCU_NEXT_SIZE; i++)
948 rdp->nxttail[i] = &rdp->nxtlist;
949}
950
951/*
940 * Advance this CPU's callbacks, but only if the current grace period 952 * Advance this CPU's callbacks, but only if the current grace period
941 * has ended. This may be called only from the CPU to whom the rdp 953 * has ended. This may be called only from the CPU to whom the rdp
942 * belongs. In addition, the corresponding leaf rcu_node structure's 954 * belongs. In addition, the corresponding leaf rcu_node structure's
@@ -1328,8 +1340,6 @@ static void
1328rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp, 1340rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp,
1329 struct rcu_node *rnp, struct rcu_data *rdp) 1341 struct rcu_node *rnp, struct rcu_data *rdp)
1330{ 1342{
1331 int i;
1332
1333 /* 1343 /*
1334 * Orphan the callbacks. First adjust the counts. This is safe 1344 * Orphan the callbacks. First adjust the counts. This is safe
1335 * because ->onofflock excludes _rcu_barrier()'s adoption of 1345 * because ->onofflock excludes _rcu_barrier()'s adoption of
@@ -1369,9 +1379,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp,
1369 } 1379 }
1370 1380
1371 /* Finally, initialize the rcu_data structure's list to empty. */ 1381 /* Finally, initialize the rcu_data structure's list to empty. */
1372 rdp->nxtlist = NULL; 1382 init_callback_list(rdp);
1373 for (i = 0; i < RCU_NEXT_SIZE; i++)
1374 rdp->nxttail[i] = &rdp->nxtlist;
1375} 1383}
1376 1384
1377/* 1385/*
@@ -2407,16 +2415,13 @@ static void __init
2407rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp) 2415rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
2408{ 2416{
2409 unsigned long flags; 2417 unsigned long flags;
2410 int i;
2411 struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu); 2418 struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu);
2412 struct rcu_node *rnp = rcu_get_root(rsp); 2419 struct rcu_node *rnp = rcu_get_root(rsp);
2413 2420
2414 /* Set up local state, ensuring consistent view of global state. */ 2421 /* Set up local state, ensuring consistent view of global state. */
2415 raw_spin_lock_irqsave(&rnp->lock, flags); 2422 raw_spin_lock_irqsave(&rnp->lock, flags);
2416 rdp->grpmask = 1UL << (cpu - rdp->mynode->grplo); 2423 rdp->grpmask = 1UL << (cpu - rdp->mynode->grplo);
2417 rdp->nxtlist = NULL; 2424 init_callback_list(rdp);
2418 for (i = 0; i < RCU_NEXT_SIZE; i++)
2419 rdp->nxttail[i] = &rdp->nxtlist;
2420 rdp->qlen_lazy = 0; 2425 rdp->qlen_lazy = 0;
2421 rdp->qlen = 0; 2426 rdp->qlen = 0;
2422 rdp->dynticks = &per_cpu(rcu_dynticks, cpu); 2427 rdp->dynticks = &per_cpu(rcu_dynticks, cpu);