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
| ||
|
Date: Tue, 2 Feb 2016 11:45:59 +0000 From: Will Deacon <will.deacon@....com> To: Boqun Feng <boqun.feng@...il.com> Cc: "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>, Peter Zijlstra <peterz@...radead.org>, "Maciej W. Rozycki" <macro@...tec.com>, David Daney <ddaney@...iumnetworks.com>, Måns Rullgård <mans@...sr.com>, Ralf Baechle <ralf@...ux-mips.org>, linux-kernel@...r.kernel.org, torvalds@...ux-foundation.org Subject: Re: [RFC][PATCH] mips: Fix arch_spin_unlock() On Tue, Feb 02, 2016 at 01:19:04PM +0800, Boqun Feng wrote: > On Mon, Feb 01, 2016 at 07:54:58PM -0800, Paul E. McKenney wrote: > > On Mon, Feb 01, 2016 at 01:56:22PM +0000, Will Deacon wrote: > > > On Fri, Jan 29, 2016 at 02:22:53AM -0800, Paul E. McKenney wrote: > > > > On Fri, Jan 29, 2016 at 09:59:59AM +0000, Will Deacon wrote: > > > Locally transitive chain termination: > > > > > > (i.e. these can't be used to extend a chain) > > > > Agreed. > > > > > > o smp_store_release() -> lockless_dereference() (???) > > > > o rcu_assign_pointer() -> rcu_dereference() > > > > o smp_store_release() -> READ_ONCE(); if > > Just want to make sure, this one is actually: > > o smp_store_release() -> READ_ONCE(); if ;<WRITE_ONCE()> > > right? Because control dependency only orders READ->WRITE. > > If so, do we also need to take the following pairing into consideration? > > o smp_store_release() -> READ_ONCE(); if ;smp_rmb(); <ACCESS_ONCE()> > > > > > I am OK with the first and last, but I believe that the middle one > > has real use cases. So the rcu_assign_pointer() -> rcu_dereference() > > case needs to be locally transitive. > > > > Hmm... I don't think we should differ rcu_dereference() and > lockless_dereference(). One reason: list_for_each_entry_rcu() are using > lockless_dereference() right now, which means we used to think > rcu_dereference() and lockless_dereference() are interchangeable, right? > > Besides, Will, what's the reason of having a locally transitive chain > termination? Because on some architectures RELEASE->DEPENDENCY pairs may > not be locally transitive? Well, the following ISA2 test is permitted on ARM: P0: Wx=1 WyRel=1 // rcu_assign_pointer P1: Ry=1 // rcu_dereference WzRel=1 // rcu_assign_pointer P2: Rz=1 // rcu_dereference <addr> Rx=0 Make one of the rcu_dereferences an ACQUIRE and the behaviour is forbidden. Paul: what use-cases did you have in mind? Will
Powered by blists - more mailing lists