From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753309AbdBMVYm (ORCPT ); Mon, 13 Feb 2017 16:24:42 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:35405 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753246AbdBMVYk (ORCPT ); Mon, 13 Feb 2017 16:24:40 -0500 Date: Mon, 13 Feb 2017 13:24:36 -0800 From: "Paul E. McKenney" To: Alan Stern Cc: bob smith , rth@twiddle.net, ink@jurassic.park.msu.ru, mattst88@gmail.com, j.alglave@ucl.ac.uk, luc.maranget@inria.fr, parri.andrea@gmail.com, will.deacon@arm.com, linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: Question about DEC Alpha memory ordering Reply-To: paulmck@linux.vnet.ibm.com References: <20170213202849.GO30506@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 17021321-0020-0000-0000-00000B5B2D5C X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00006611; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000203; SDB=6.00821496; UDB=6.00401784; IPR=6.00598950; BA=6.00005133; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00014270; XFM=3.00000011; UTC=2017-02-13 21:24:36 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17021321-0021-0000-0000-00005A12A085 Message-Id: <20170213212436.GQ30506@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-02-13_11:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1612050000 definitions=main-1702130203 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Feb 13, 2017 at 04:06:21PM -0500, Alan Stern wrote: > On Mon, 13 Feb 2017, Paul E. McKenney wrote: > > > On Mon, Feb 13, 2017 at 08:14:23PM +0100, Tobias Klausmann wrote: > > > Hi! > > > > > > On Mon, 13 Feb 2017, Paul E. McKenney wrote: > > > > On Mon, Feb 13, 2017 at 01:53:27PM -0500, bob smith wrote: > > > > > On 2/13/17 1:39 PM, Paul E. McKenney wrote: > > > > > > can real DEC Alpha hardware end up with both instances of "r1" > > > > > > having the value 1? > > > > > > > > > > I thought this question reminded me of something, so I found this: > > > > > > https://www.kernel.org/doc/Documentation/memory-barriers.txt > > > > > > > > > > and I pasted in the content - David Howells is one of the authors and > > > > > maybe that is why the question sort of reminded me. > > > > > > > > > > Maybe someone has an update but this is what was said then. > > > > > > > > Well, thank you for pointing me to this, but my question was intended to > > > > check whether or not the words I helped to write in memory-barriers.txt > > > > are in fact accurate. So if you have an SMP DEC Alpha system that you > > > > could provide remote access to, that would be very helpful! > > > > > > I have a 4-cpu ES40. Send me a test program and I'll gladly run > > > it for you. > > > > Andrea, could you please convert the litmus test below and send it to > > Tobias? > > > > Thanx, Paul > > > > ------------------------------------------------------------------------ > > > > C auto/C-LB-LRW+OB-Dv > > (* > > * Result: Never > > * > > *) > > { > > } > > > > P0(int *u0, int *x1) > > { > > r1 = READ_ONCE(*u0); > > smp_mb(); > > WRITE_ONCE(*x1, 1); > > } > > > > > > P1(int *u0, int *x1) > > { > > r1 = rcu_dereference(*x1); > > No, please, not this. It should be: > > r1 = READ_ONCE(*x1); > > That is, the auto/C-LB-LRW+OB-Ov.litmus test. > > > WRITE_ONCE(*u0, r1); > > } > > > > exists > > (0:r1=1 /\ 1:r1=1) Sorry, here is the correct one in full. Thanx, Paul ------------------------------------------------------------------------ C auto/C-LB-LRW+OB-Ov (* * Result: Maybe * P0-P1 rf OB-Ov: Never->Maybe: Note lack of C11 guarantee, control dependency * P1 Ov,LRW: Note lack of C11 guarantee, control dependency *) { } P0(int *u0, int *x1) { r1 = READ_ONCE(*u0); smp_mb(); WRITE_ONCE(*x1, 1); } P1(int *u0, int *x1) { r1 = READ_ONCE(*x1); WRITE_ONCE(*u0, r1); } exists (0:r1=1 /\ 1:r1=1)