Messages in this thread | | | Date | Sat, 27 Mar 2010 21:15:54 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH] rcu: move some code from macro to function |
| |
On Sun, Mar 28, 2010 at 11:12:30AM +0800, Lai Jiangshan wrote: > > cleanup: move some code from macro to function
Nice!
I have queued this for RCU 2.6.35, with the following commit message:
Shrink the RCU_INIT_FLAVOR() macro by moving all but the initialization of the ->rda[] array to rcu_init_one(). The call to rcu_init_one() can then be moved to the end of the RCU_INIT_FLAVOR() macro, which is required because rcu_boot_init_percpu_data(), which is now called from rcu_init_one(), depends on the initialization of the ->rda[] array.
Seem reasonable?
Thanx, Paul
> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> > --- > diff --git a/kernel/rcutree.c b/kernel/rcutree.c > index 3ec8160..112edb5 100644 > --- a/kernel/rcutree.c > +++ b/kernel/rcutree.c > @@ -1849,6 +1849,14 @@ static void __init rcu_init_one(struct rcu_state *rsp) > INIT_LIST_HEAD(&rnp->blocked_tasks[3]); > } > } > + > + rnp = rsp->level[NUM_RCU_LVLS - 1]; > + for_each_possible_cpu(i) { > + if (i > rnp->grphi) > + rnp++; > + rsp->rda[i]->mynode = rnp; > + rcu_boot_init_percpu_data(i, rsp); > + } > } > > /* > @@ -1859,19 +1867,11 @@ static void __init rcu_init_one(struct rcu_state *rsp) > #define RCU_INIT_FLAVOR(rsp, rcu_data) \ > do { \ > int i; \ > - int j; \ > - struct rcu_node *rnp; \ > \ > - rcu_init_one(rsp); \ > - rnp = (rsp)->level[NUM_RCU_LVLS - 1]; \ > - j = 0; \ > for_each_possible_cpu(i) { \ > - if (i > rnp[j].grphi) \ > - j++; \ > - per_cpu(rcu_data, i).mynode = &rnp[j]; \ > (rsp)->rda[i] = &per_cpu(rcu_data, i); \ > - rcu_boot_init_percpu_data(i, rsp); \ > } \ > + rcu_init_one(rsp); \ > } while (0) > > void __init rcu_init(void) >
| |