lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ