| Date | Mon, 17 Apr 2017 17:30:33 -0700 | From | Josh Triplett <> | Subject | Re: [PATCH v2 tip/core/rcu 03/39] srcu: Consolidate batch checking into rcu_all_batches_empty() |
| |
On Mon, Apr 17, 2017 at 04:44:50PM -0700, Paul E. McKenney wrote: > The srcu_reschedule() function invokes rcu_batch_empty() on each of > the four rcu_batch structures in the srcu_struct in question twice. > Given that this check will also be needed in cleanup_srcu_struct(), this > commit consolidates these four checks into a new rcu_all_batches_empty() > function. > > Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
> kernel/rcu/srcu.c | 21 +++++++++++++-------- > 1 file changed, 13 insertions(+), 8 deletions(-) > > diff --git a/kernel/rcu/srcu.c b/kernel/rcu/srcu.c > index ef3bcfb15b39..ba41a5d04b49 100644 > --- a/kernel/rcu/srcu.c > +++ b/kernel/rcu/srcu.c > @@ -65,6 +65,17 @@ static inline bool rcu_batch_empty(struct rcu_batch *b) > } > > /* > + * Are all batches empty for the specified srcu_struct? > + */ > +static inline bool rcu_all_batches_empty(struct srcu_struct *sp) > +{ > + return rcu_batch_empty(&sp->batch_done) && > + rcu_batch_empty(&sp->batch_check1) && > + rcu_batch_empty(&sp->batch_check0) && > + rcu_batch_empty(&sp->batch_queue); > +} > + > +/* > * Remove the callback at the head of the specified rcu_batch structure > * and return a pointer to it, or return NULL if the structure is empty. > */ > @@ -619,15 +630,9 @@ static void srcu_reschedule(struct srcu_struct *sp) > { > bool pending = true; > > - if (rcu_batch_empty(&sp->batch_done) && > - rcu_batch_empty(&sp->batch_check1) && > - rcu_batch_empty(&sp->batch_check0) && > - rcu_batch_empty(&sp->batch_queue)) { > + if (rcu_all_batches_empty(sp)) { > spin_lock_irq(&sp->queue_lock); > - if (rcu_batch_empty(&sp->batch_done) && > - rcu_batch_empty(&sp->batch_check1) && > - rcu_batch_empty(&sp->batch_check0) && > - rcu_batch_empty(&sp->batch_queue)) { > + if (rcu_all_batches_empty(sp)) { > sp->running = false; > pending = false; > } > -- > 2.5.2 >
|