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:	Thu, 29 Nov 2012 14:05:25 -0800
From:	"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
To:	Lai Jiangshan <laijs@...fujitsu.com>
Cc:	linux-kernel@...r.kernel.org
Subject: Re: [PATCH 8/8] srcu: use ACCESS_ONCE() to access sp->completed in
 srcu_read_lock()

On Thu, Nov 29, 2012 at 04:46:09PM +0800, Lai Jiangshan wrote:
> Old srcu implement requires sp->completed is loaded in
> RCU-sched(preempt_disable()) section.
> 
> The new srcu is now not RCU-sched based, it doesn't require the load of
> sp->completed and the access to counter must be in the same RCU-sched
> read site C.S., so we use ACCESS_ONCE() instead, and move it out of
> the preempt_disable() section, preempt_disable() section is only used
> for percpu data, not for RCU-sched.
> 
> The resulted code is almost as the same as before, but it helps people to
> understand the code, and it avoids to add surprise to reviewer: "why we need
> rcu_read_lock_sched_held() here?"

The first seven patches look good!

One question about this one -- the current code provided dependency
ordering between the fetch of idx and the increment, but the code after
this patch would not provide this ordering (at least not on Alpha,
and maybe also not in presence of aggressive compiler optimizations).

In the immortal words of MSDOS, "Are you sure?"

							Thanx, Paul

> Signed-off-by: Lai Jiangshan <laijs@...fujitsu.com>
> ---
>  kernel/srcu.c |    3 +--
>  1 files changed, 1 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/srcu.c b/kernel/srcu.c
> index 38a762f..224400a 100644
> --- a/kernel/srcu.c
> +++ b/kernel/srcu.c
> @@ -294,9 +294,8 @@ int __srcu_read_lock(struct srcu_struct *sp)
>  {
>  	int idx;
> 
> +	idx = ACCESS_ONCE(sp->completed) & 0x1;
>  	preempt_disable();
> -	idx = rcu_dereference_index_check(sp->completed,
> -					  rcu_read_lock_sched_held()) & 0x1;
>  	ACCESS_ONCE(this_cpu_ptr(sp->per_cpu_ref)->c[idx]) += 1;
>  	smp_mb(); /* B */  /* Avoid leaking the critical section. */
>  	ACCESS_ONCE(this_cpu_ptr(sp->per_cpu_ref)->seq[idx]) += 1;
> -- 
> 1.7.4.4
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ