[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170418003032.s26wqp2huqe7twhk@x>
Date: Mon, 17 Apr 2017 17:30:33 -0700
From: Josh Triplett <josh@...htriplett.org>
To: "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
Cc: linux-kernel@...r.kernel.org, mingo@...nel.org,
jiangshanlai@...il.com, dipankar@...ibm.com,
akpm@...ux-foundation.org, mathieu.desnoyers@...icios.com,
tglx@...utronix.de, peterz@...radead.org, rostedt@...dmis.org,
dhowells@...hat.com, edumazet@...gle.com, fweisbec@...il.com,
oleg@...hat.com, bobby.prani@...il.com
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@...ux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@...htriplett.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
>
Powered by blists - more mailing lists