Messages in this thread | | | Subject | Re: [PATCH RFC tip/core/rcu 3/4] rcu: Make RCU_FAST_NO_HZ account for pauses out of idle | From | Peter Zijlstra <> | Date | Thu, 26 Apr 2012 15:00:42 +0200 |
| |
On Mon, 2012-04-23 at 09:16 -0700, Paul E. McKenney wrote: > static DEFINE_PER_CPU(int, rcu_dyntick_drain); > static DEFINE_PER_CPU(unsigned long, rcu_dyntick_holdoff); > static DEFINE_PER_CPU(struct timer_list, rcu_idle_gp_timer); > +static DEFINE_PER_CPU(unsigned long, rcu_idle_gp_timer_expires); > +static DEFINE_PER_CPU(bool, rcu_idle_first_pass); > +static DEFINE_PER_CPU(unsigned long, rcu_nonlazy_posted); > +static DEFINE_PER_CPU(unsigned long, rcu_nonlazy_posted_snap);
Wouldn't that all be prettier if it were in a struct of sorts?
struct rcu_dyntick { int drain; unsigned long holdoff; struct timer_list gp_timer; unsigned long gp_timer_expires; bool first_pass; unsigned long posted; unsigned long posted_snap; };
static DEFINE_PER_CPU(struct rcu_dyntick, rcu_dyntick);
( fwiw, bool doesn't have a well specified storage type )
This way you have more control over the placement, variables are forced to be together, instead of at the mercy of whatever per_cpu and the linker do, and you more clearly see the holes in the structure.
All the per_cpu() usage should still work like:
per_cpu(rcu_dyntick.first_pass, cpu) = 0;
| |