Messages in this thread |  | | | Date | Thu, 26 Apr 2012 07:49:10 -0700 | | From | "Paul E. McKenney" <> | | Subject | Re: [PATCH RFC tip/core/rcu 3/4] rcu: Make RCU_FAST_NO_HZ account for pauses out of idle |
| |
On Thu, Apr 26, 2012 at 03:00:42PM +0200, Peter Zijlstra wrote: > 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;
Excellent point -- I have added that transformation to the todo list for 3.6.
I must confess that I had no idea that you could say the above. I would have expected to have to say the following:
per_cpu(rcu_dyntick, cpu).first_pass = 0;
Not much difference either way, though.
Thanx, Paul
|  |