Messages in this thread | | | Date | Tue, 13 Oct 2009 15:44:53 +0800 | From | Lai Jiangshan <> | Subject | Re: [PATCH RFC tip/core/rcu 1/3] rcu: The Bloatwatch Edition, v7 |
| |
Again. trivial code-beautifying except the last one.
Paul E. McKenney wrote:
[...]
> + > +/* Global control variables for rcupdate callback mechanism. */ > +struct rcu_ctrlblk { > + struct rcu_head *rcucblist; /* List of pending callbacks (CBs). */ > + struct rcu_head **donetail; /* ->next pointer of last "done" CB. */ > + struct rcu_head **curtail; /* ->next pointer of last CB. */ > +}; > + > +extern struct rcu_ctrlblk rcu_ctrlblk; > +extern struct rcu_ctrlblk rcu_bh_ctrlblk;
Since rcu_batches_completed() returns a constant, this piece of code is not needed here. We can move it to rcutiny.c.
and remove "EXPORT_SYMBOL_GPL(rcu_ctrlblk);" & "EXPORT_SYMBOL_GPL(rcu_bh_ctrlblk);".
[...]
> +/* extern void rcu_restart_cpu(int cpu); */ > +
redundant comments.
[...]
> + > +static inline int rcu_pending(int cpu) > +{ > + return 1; > +}
It seems that no one use it.
[...]
> +/* Definition for rcupdate control block. */ > +struct rcu_ctrlblk rcu_ctrlblk = { > + .rcucblist = NULL, > + .donetail = &rcu_ctrlblk.rcucblist, > + .curtail = &rcu_ctrlblk.rcucblist, > +}; > +EXPORT_SYMBOL_GPL(rcu_ctrlblk);
remove "EXPORT_SYMBOL_GPL(rcu_ctrlblk);"
> +struct rcu_ctrlblk rcu_bh_ctrlblk = { > + .rcucblist = NULL, > + .donetail = &rcu_bh_ctrlblk.rcucblist, > + .curtail = &rcu_bh_ctrlblk.rcucblist, > +}; > +EXPORT_SYMBOL_GPL(rcu_bh_ctrlblk);
remove "EXPORT_SYMBOL_GPL(rcu_bh_ctrlblk);"
> + > +#ifdef CONFIG_NO_HZ > + > +static long rcu_dynticks_nesting = 1; > + > +/* > + * Enter dynticks-idle mode, which is an extended quiescent state > + * if we have fully entered that mode (i.e., if the new value of > + * dynticks_nesting is zero). > + */ > +void rcu_enter_nohz(void) > +{ > + if (--rcu_dynticks_nesting == 0) > + rcu_sched_qs(0); /* implies rcu_bh_qsctr_inc(0) */ > +} > + > +/* > + * Exit dynticks-idle mode, so that we are no longer in an extended > + * quiescent state. > + */ > +void rcu_exit_nohz(void) > +{ > + rcu_dynticks_nesting++; > +} > + > +#endif /* #ifdef CONFIG_NO_HZ */
It's an old issue. It's not only about RCUTINY, it's also about other rcu implementations:
rcu_enter_nohz()/rcu_exit_nohz() are not called in pairs.
irq_exit() calls tick_nohz_stop_sched_tick() which calls rcu_enter_nohz(), where is the corresponding rcu_exit_nohz()? (or tick_nohz_restart_sched_tick())?
| |