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 <[email protected]>

Reviewed-by: Josh Triplett <[email protected]>

>  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
> 

Reply via email to