Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3319940imm; Tue, 29 May 2018 05:19:23 -0700 (PDT) X-Google-Smtp-Source: AB8JxZrL1yHusA0ypmAhvNK4Oh/FawVCSryceeecsjbel5XtOHCHI+xSjDHMt+0zz0iSh0ln/ppS X-Received: by 2002:a65:6592:: with SMTP id u18-v6mr13457483pgv.366.1527596363740; Tue, 29 May 2018 05:19:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527596363; cv=none; d=google.com; s=arc-20160816; b=gaQK65eZGJbwvhUDOc19WGIJkUiiDFF+oBlzjYMswGxqz2nbIDaVo2llWhZa5FhpRn HcxZP57A+3eqVT6610lBK5B2I0SYqd/ff53nHVaktwLkcQU8z/amdIo7GyvBQ+y+6Gxw U0NjALymMS2sT4mvL7SI3y956JjWnhNHDl5XV23PjVhPKZ8FhLB369YIQv+bhIRaZywr /eNepPNqgLNRKINQc9hq+dZBGWKJ8zpuxOebryRdu7CMHsWZJoT5QgAN//wqsixYCQue ZtiAhq/ypM3OEKIO0cWXebKEQsjU5DMVt+W09X2VY5wchdPvl0/taIyLo92fyo4FiDKZ WoBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:user-agent:in-reply-to :content-transfer-encoding:content-disposition:mime-version :references:reply-to:subject:cc:to:from:date :arc-authentication-results; bh=ZS364iESnbPSCykZWTT/UVJ51GllM8nIVRACMiH10Gc=; b=1HsNCEz5MBluDhsEnl9otJunN1AuFvsHhJPhExnp62HA2BxdFZLXGF3S37F1J9ivd0 8IwNVVRk8UJlw15aX9PlZN0nc5+lC32tOcrBn2w9Gg8lkGVHB468BNve0OJXUDlJXLhk zSBaX9cwUeTwOrqoib6RNffh7nsJYY0n7wxFi4aHlV5RZlwv20+sFy1uJrbxcytB2AUh KzLHXm/ZMYbVRjb8qHRTPiCVxbSxjgAe3X3RA2e/D/mt9NCy+Ae3bYXT9v2zlIuTaBo6 DT1u+WJPRyypdT+IUk/98O/FYMlz8TKK0b4AulG997MIyZGxqI8P+Y1LblvO0TDdnV3o nHmg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 38-v6si32911531plc.446.2018.05.29.05.19.09; Tue, 29 May 2018 05:19:23 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933898AbeE2MSL convert rfc822-to-8bit (ORCPT + 99 others); Tue, 29 May 2018 08:18:11 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:34416 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933576AbeE2MSF (ORCPT ); Tue, 29 May 2018 08:18:05 -0400 Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w4TCEIgn098392 for ; Tue, 29 May 2018 08:18:04 -0400 Received: from e19.ny.us.ibm.com (e19.ny.us.ibm.com [129.33.205.209]) by mx0b-001b2d01.pphosted.com with ESMTP id 2j964hsvtg-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 29 May 2018 08:18:04 -0400 Received: from localhost by e19.ny.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 29 May 2018 08:18:03 -0400 Received: from b01cxnp22036.gho.pok.ibm.com (9.57.198.26) by e19.ny.us.ibm.com (146.89.104.206) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Tue, 29 May 2018 08:17:59 -0400 Received: from b01ledav003.gho.pok.ibm.com (b01ledav003.gho.pok.ibm.com [9.57.199.108]) by b01cxnp22036.gho.pok.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w4TCHwcG60752080 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 29 May 2018 12:17:58 GMT Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3AD2DB205F; Tue, 29 May 2018 09:19:40 -0400 (EDT) Received: from b01ledav003.gho.pok.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id ED9E2B2064; Tue, 29 May 2018 09:19:39 -0400 (EDT) Received: from paulmck-ThinkPad-W541 (unknown [9.85.155.31]) by b01ledav003.gho.pok.ibm.com (Postfix) with ESMTP; Tue, 29 May 2018 09:19:39 -0400 (EDT) Received: by paulmck-ThinkPad-W541 (Postfix, from userid 1000) id B92ED16C611E; Tue, 29 May 2018 05:19:41 -0700 (PDT) Date: Tue, 29 May 2018 05:19:41 -0700 From: "Paul E. McKenney" To: Andrea Parri Cc: linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, stern@rowland.harvard.edu, will.deacon@arm.com, peterz@infradead.org, boqun.feng@gmail.com, npiggin@gmail.com, dhowells@redhat.com, j.alglave@ucl.ac.uk, luc.maranget@inria.fr, akiyks@gmail.com, mingo@kernel.org Subject: Re: [PATCH RFC tools/memory-model] Add litmus-test naming scheme Reply-To: paulmck@linux.vnet.ibm.com References: <20180525191020.GA5914@linux.vnet.ibm.com> <20180528112010.GA8801@andrea> <20180528214838.GZ3803@linux.vnet.ibm.com> <20180529093350.GA5803@andrea> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: 8BIT In-Reply-To: <20180529093350.GA5803@andrea> User-Agent: Mutt/1.5.21 (2010-09-15) X-TM-AS-GCONF: 00 x-cbid: 18052912-0056-0000-0000-00000459257E X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00009096; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000264; SDB=6.01039354; UDB=6.00530875; IPR=6.00818483; MB=3.00021357; MTD=3.00000008; XFM=3.00000015; UTC=2018-05-29 12:18:03 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18052912-0057-0000-0000-0000089D49AB Message-Id: <20180529121941.GG3803@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-05-29_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1709140000 definitions=main-1805290140 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 29, 2018 at 11:33:50AM +0200, Andrea Parri wrote: > [...] > > > > We used to distinguigh between the test name and the test filename; we > > > currently have only one test whose name ends with .litmus: > > > > > > ISA2+pooncelock+pooncelock+pombonce.litmus > > > > > > (that I missed until now...). > > > > I queued a commit to fix this with your Reported-by, good catch! > > Thanks for the fix. > > > > I also notice that, with the current version, the above command can be > > > simplified to: > > > > > > $ norm7 -bell linux-kernel.bell Rfi Once PodRR Once Fre Once Rfi Once PodRR Once Fre Once | sed -e 's/:.*//g' > > > > Dropping the "classify7" command, correct? > > Right, thanks. Ah, maybe we should strive to meet the 80-chars bound > by splitting the command with "\"? We could, but combined with your later request for indentation, we end up with something like this: $ norm7 -bell linux-kernel.bell \ Rfi Once PodRR Once Fre Once Rfi Once PodRR Once Fre Once | \ sed -e 's/:.*//g' SB+rfionceonce-poonceonces In the immortal words of MSDOS, are you sure? ;-) > > > Maybe expand to recall that we're referring to a particular cycle (the > > > cycle referred to in the previous section)? (the term 'consecutive' is > > > overloaded ;-) > > > > Well, it is an English word, so overloading is the common case. ;-) > > > > How about this? > > Looks better, thanks. > > > > I'm not sure if it is worth commenting on this, but compare, e.g., the > > > 'exists' clauses of the following two tests (thinking at 'coherence'): > > > > > > $ diyone7 -arch LISA PosWR PodRR Fre PosWR PodRR Fre > > > LISA A > > > "PosWR PodRR Fre PosWR PodRR Fre" > > > Generator=diyone7 (version 7.49+02(dev)) > > > Prefetch=0:x=F,0:y=T,1:y=F,1:x=T > > > Com=Fr Fr > > > Orig=PosWR PodRR Fre PosWR PodRR Fre > > > { > > > } > > > P0 | P1 ; > > > w[] x 1 | w[] y 1 ; > > > r[] r0 x | r[] r0 y ; > > > r[] r1 y | r[] r1 x ; > > > exists > > > (0:r1=0 /\ 1:r1=0) > > > > > > $ diyone7 -arch LISA Rfi PodRR Fre Rfi PodRR Fre > > > LISA A > > > "Rfi PodRR Fre Rfi PodRR Fre" > > > Generator=diyone7 (version 7.49+02(dev)) > > > Prefetch=0:x=F,0:y=T,1:y=F,1:x=T > > > Com=Fr Fr > > > Orig=Rfi PodRR Fre Rfi PodRR Fre > > > { > > > } > > > P0 | P1 ; > > > w[] x 1 | w[] y 1 ; > > > r[] r0 x | r[] r0 y ; > > > r[] r1 y | r[] r1 x ; > > > exists > > > (0:r0=1 /\ 0:r1=0 /\ 1:r0=1 /\ 1:r1=0) > > > > How about this? > > > > fi: Read-from internal. The current process wrote a variable and then > > immediately read the value back from it. For the purposes of > > naming, Rfi acts identically to PosWR. > > Well, "Rfi" produces "rfi" while "PosWR" produces "pos" for a name... Right you are! How about this, then? Rfi: Read-from internal. The current process wrote a variable and then immediately read the value back from it. For the purposes of litmus-test code generation, Rfi acts identically to PosWR. However, they differ for purposes of naming, and they also result in different "exists" clauses. Example: ??? > > However, there are subtle > > but very real differences between them in other contexts. > > I think that you're fascinated by the evocative power of English words. ;-) If you didn't know better, you might even think that I was a native English speaker! ;-) > > > The list of descriptors is incomplete; the command: > > > > > > $ diyone7 -bell linux-kernel.bell -show edges > > > > > > shows other descriptors (including fences and dependencies). We might > > > want to list this command; searching the commit history, I found: > > > > > > 3c24730ef6c662 ("gen: Add a new command line option -show (edges|fences|annotations) that list various categories of candidate relaxations.") > > > > Yow!!! > > > > CtrldR CtrldW CtrlsR CtrlsW DpAddrdR DpAddrdW DpAddrsR DpAddrsW DpCtrldR DpCtrldW DpCtrlsR DpCtrlsW DpDatadW DpDatasW Dpd* DpdR DpdW Dps* DpsR DpsW FenceAfter-atomic FenceAfter-atomicd** FenceAfter-atomicd*R FenceAfter-atomicd*W FenceAfter-atomicdR* FenceAfter-atomicdRR FenceAfter-atomicdRW FenceAfter-atomicdW* FenceAfter-atomicdWR FenceAfter-atomicdWW FenceAfter-atomics** FenceAfter-atomics*R FenceAfter-atomics*W FenceAfter-atomicsR* FenceAfter-atomicsRR FenceAfter-atomicsRW FenceAfter-atomicsW* FenceAfter-atomicsWR FenceAfter-atomicsWW FenceAfter-spinlock FenceAfter-spinlockd** FenceAfter-spinlockd*R FenceAfter-spinlockd*W FenceAfter-spinlockdR* FenceAfter-spinlockdRR FenceAfter-spinlockdRW FenceAfter-spinlockdW* FenceAfter-spinlockdWR FenceAfter-spinlockdWW FenceAfter-spinlocks** FenceAfter-spinlocks*R FenceAfter-spinlocks*W FenceAfter-spinlocksR* FenceAfter-spinlocksRR FenceAfter-spinlocksRW FenceAfter-spinlocksW* FenceAfter-spinlocksWR FenceAfter-spinlocksWW FenceBefore-atomic FenceBefore-atomicd** FenceBefore-atomicd*R FenceBefore-atomicd*W FenceBefore-atomicdR* FenceBefore-atomicdRR FenceBefore-atomicdRW FenceBefore-atomicdW* FenceBefore-atomicdWR FenceBefore-atomicdWW FenceBefore-atomics** FenceBefore-atomics*R FenceBefore-atomics*W FenceBefore-atomicsR* FenceBefore-atomicsRR FenceBefore-atomicsRW FenceBefore-atomicsW* FenceBefore-atomicsWR FenceBefore-atomicsWW FenceMb FenceMbd** FenceMbd*R FenceMbd*W FenceMbdR* FenceMbdRR FenceMbdRW FenceMbdW* FenceMbdWR FenceMbdWW FenceMbs** FenceMbs*R FenceMbs*W FenceMbsR* FenceMbsRR FenceMbsRW FenceMbsW* FenceMbsWR FenceMbsWW FenceRcu-lock FenceRcu-lockd** FenceRcu-lockd*R FenceRcu-lockd*W FenceRcu-lockdR* FenceRcu-lockdRR FenceRcu-lockdRW FenceRcu-lockdW* FenceRcu-lockdWR FenceRcu-lockdWW FenceRcu-locks** FenceRcu-locks*R FenceRcu-locks*W FenceRcu-locksR* FenceRcu-locksRR FenceRcu-locksRW FenceRcu-locksW* FenceRcu-locksWR FenceRcu-locksWW FenceRcu-unlock FenceRcu-unlockd** FenceRcu-unlockd*R FenceRcu-unlockd*W FenceRcu-unlockdR* FenceRcu-unlockdRR FenceRcu-unlockdRW FenceRcu-unlockdW* FenceRcu-unlockdWR FenceRcu-unlockdWW FenceRcu-unlocks** FenceRcu-unlocks*R FenceRcu-unlocks*W FenceRcu-unlocksR* FenceRcu-unlocksRR FenceRcu-unlocksRW FenceRcu-unlocksW* FenceRcu-unlocksWR FenceRcu-unlocksWW FenceRmb FenceRmbd** FenceRmbd*R FenceRmbd*W FenceRmbdR* FenceRmbdRR FenceRmbdRW FenceRmbdW* FenceRmbdWR FenceRmbdWW FenceRmbs** FenceRmbs*R FenceRmbs*W FenceRmbsR* FenceRmbsRR FenceRmbsRW FenceRmbsW* FenceRmbsWR FenceRmbsWW FenceSync-rcu FenceSync-rcud** FenceSync-rcud*R FenceSync-rcud*W FenceSync-rcudR* FenceSync-rcudRR FenceSync-rcudRW FenceSync-rcudW* FenceSync-rcudWR FenceSync-rcudWW FenceSync-rcus** FenceSync-rcus*R FenceSync-rcus*W FenceSync-rcusR* FenceSync-rcusRR FenceSync-rcusRW FenceSync-rcusW* FenceSync-rcusWR FenceSync-rcusWW FenceWmb FenceWmbd** FenceWmbd*R FenceWmbd*W FenceWmbdR* FenceWmbdRR FenceWmbdRW FenceWmbdW* FenceWmbdWR FenceWmbdWW FenceWmbs** FenceWmbs*R FenceWmbs*W FenceWmbsR* FenceWmbsRR FenceWmbsRW FenceWmbsW* FenceWmbsWR FenceWmbsWW Fenced** Fenced*R Fenced*W FencedR* FencedRR FencedRW FencedW* FencedWR FencedWW Fences** Fences*R Fences*W FencesR* FencesRR FencesRW FencesW* FencesWR FencesWW FrBack FrLeave Fre Fri Hat Na Pod** Pod*R Pod*W PodR* PodRR PodRW PodW* PodWR PodWW Pos** Pos*R Pos*W PosR* PosRR PosRW PosW* PosWR PosWW R Read RfBack RfLeave Rfe Rfi Rmw W Write WsBack WsLeave Wse Wsi > > > > I added the following at the end: > > > > Please note that the above is a partial list. To see the full list of > > descriptors, execute the following command: > > > > $ diyone7 -bell linux-kernel.bell -show edges > > Thanks. One more nit: I'd indent this and the above "norm7" commands as > we do in our "main" README. Done! > > > I also notice that our current names for tests with fences (and cycle) > > > deviate from the corresponding 'norm7' results; e.g., > > > > > > $ norm7 -bell linux-kernel.bell FenceWmbdWW Once Rfe Once FenceRmbdRR Once Fre Once | sed -e 's/:.*//g' > > > MP+fencewmbonceonce+fencermbonceonce > > > > > > while we use 'MP+wmbonceonce+rmbonceonce' (that is, we omit the 'fence' > > > prefixes). > > > > Would you be willing to send me a patch fixing them up? > > Yes, I'll work this out. Thanks in advance! Thanx, Paul > Andrea > > > > > > Please see below for updated patch. > > > > Thanx, Paul > > > > ------------------------------------------------------------------------ > > > > commit 04a897a8e202e8d79dd47910321f0e8efb081854 > > Author: Paul E. McKenney > > Date: Fri May 25 12:02:53 2018 -0700 > > > > EXP tools/memory-model: Add litmus-test naming scheme > > > > This commit documents the scheme used to generate the names for the > > litmus tests. > > > > Signed-off-by: Paul E. McKenney > > [ paulmck: Apply feedback from Andrea Parri. ] > > > > diff --git a/tools/memory-model/litmus-tests/README b/tools/memory-model/litmus-tests/README > > index 00140aaf58b7..9c0ea65c5362 100644 > > --- a/tools/memory-model/litmus-tests/README > > +++ b/tools/memory-model/litmus-tests/README > > @@ -1,4 +1,6 @@ > > -This directory contains the following litmus tests: > > +============ > > +LITMUS TESTS > > +============ > > > > CoRR+poonceonce+Once.litmus > > Test of read-read coherence, that is, whether or not two > > @@ -151,3 +153,143 @@ Z6.0+pooncerelease+poacquirerelease+mbonceonce.litmus > > A great many more litmus tests are available here: > > > > https://github.com/paulmckrcu/litmus > > + > > +================== > > +LITMUS TEST NAMING > > +================== > > + > > +Litmus tests are usually named based on their contents, which means that > > +looking at the name tells you what the litmus test does. The naming > > +scheme covers litmus tests having a single cycle that passes through > > +each process exactly once, so litmus tests not fitting this description > > +are named on an ad-hoc basis. > > + > > +The structure of a litmus-test name is the litmus-test class, a plus > > +sign ("+"), and one string for each process, separated by plus signs. > > +The end of the name is ".litmus". > > + > > +The litmus-test classes may be found in the infamous test6.pdf: > > +https://www.cl.cam.ac.uk/~pes20/ppc-supplemental/test6.pdf > > +Each class defines the pattern of accesses and of the variables accessed. > > +For example, if the one process writes to a pair of variables, and > > +the other process reads from these same variables, the corresponding > > +litmus-test class is "MP" (message passing), which may be found on the > > +left-hand end of the second row of tests on page one of test6.pdf. > > + > > +The strings used to identify the actions carried out by each process are > > +complex due to a desire to have short(er) names. Thus, there is a tool to > > +generate these strings from a given litmus test's actions. For example, > > +consider the processes from SB+rfionceonce-poonceonces.litmus: > > + > > + P0(int *x, int *y) > > + { > > + int r1; > > + int r2; > > + > > + WRITE_ONCE(*x, 1); > > + r1 = READ_ONCE(*x); > > + r2 = READ_ONCE(*y); > > + } > > + > > + P1(int *x, int *y) > > + { > > + int r3; > > + int r4; > > + > > + WRITE_ONCE(*y, 1); > > + r3 = READ_ONCE(*y); > > + r4 = READ_ONCE(*x); > > + } > > + > > +The next step is to construct a space-separated list of descriptors, > > +interleaving descriptions of the relation between a pair of consecutive > > +accesses with descriptions of the second access in the pair. > > + > > +P0()'s WRITE_ONCE() is read by its first READ_ONCE(), which is a > > +reads-from link (rf) and internal to the P0() process. This is > > +"rfi", which is an abbreviation for "reads-from internal". Because > > +some of the tools string these abbreviations together with space > > +characters separating processes, the first character is capitalized, > > +resulting in "Rfi". > > + > > +P0()'s second access is a READ_ONCE(), as opposed to (for example) > > +smp_load_acquire(), so next is "Once". Thus far, we have "Rfi Once". > > + > > +P0()'s third access is also a READ_ONCE(), but to y rather than x. > > +This is related to P0()'s second access by program order ("po"), > > +to a different variable ("d"), and both accesses are reads ("RR"). > > +The resulting descriptor is "PodRR". Because P0()'s third access is > > +READ_ONCE(), we add another "Once" descriptor. > > + > > +A from-read ("fre") relation links P0()'s third to P1()'s first > > +access, and the resulting descriptor is "Fre". P1()'s first access is > > +WRITE_ONCE(), which as before gives the descriptor "Once". The string > > +thus far is thus "Rfi Once PodRR Once Fre Once". > > + > > +The remainder of P1() is similar to P0(), which means we add > > +"Rfi Once PodRR Once". Another fre links P1()'s last access to > > +P0()'s first access, which is WRITE_ONCE(), so we add "Fre Once". > > +The full string is thus: > > + > > + Rfi Once PodRR Once Fre Once Rfi Once PodRR Once Fre Once > > + > > +This string can be given to the "norm7" and "classify7" tools to > > +produce the name: > > + > > +$ norm7 -bell linux-kernel.bell Rfi Once PodRR Once Fre Once Rfi Once PodRR Once Fre Once | sed -e 's/:.*//g' > > +SB+rfionceonce-poonceonces > > + > > +Adding the ".litmus" suffix: SB+rfionceonce-poonceonces.litmus > > + > > + > > +======================= > > +LITMUS TEST DESCRIPTORS > > +======================= > > + > > +These descriptors cover connections between consecutive accesses within > > +the cycle through a given litmus test: > > + > > +Fre: From-read external. The current process wrote a variable that > > + the previous process read. Example: The SB (store buffering) test. > > +Fri: From-read internal. This process read a variable and then > > + immediately wrote to it. Example: ??? > > +PodRR: Program-order different variable, read followed by read. > > + This process read a variable and again read a different variable. > > + Example: The read-side process in the MP (message-passing) test. > > +PodRW: Program-order different variable, read followed by write. > > + This process read a variable and then wrote a different variable. > > + Example: The LB (load buffering) test. > > +PodWR: Program-order different variable, write followed by read. > > + This process wrote a variable and then read a different variable. > > + Example: The SB (store buffering) test. > > +PodWW: Program-order different variable, write followed by write. > > + This process wrote a variable and again wrote a different variable. > > + Example: The write-side process in the MP (message-passing) test. > > +PosRR: Program-order same variable, read followed by read. > > + This process read a variable and again read that same variable. > > + Example: ??? > > +PosRW: Program-order same variable, read followed by write. > > + This process read a variable and then wrote that same variable. > > + Example: ??? > > +PosWR: Program-order same variable, write followed by read. > > + This process wrote a variable and then read that same variable. > > + Example: ??? > > +PosWW: Program-order same variable, write followed by write. > > + This process wrote a variable and again wrote that same variable. > > + Example: ??? > > +Rfe: Read-from external. The current process read a variable written > > + by the previous process. Example: The MP (message passing) test. > > +Rfi: Read-from internal. The current process wrote a variable and then > > + immediately read the value back from it. For the purposes of > > + naming, Rfi acts identically to PosWR. However, there are subtle > > + but very real differences between them in other contexts. > > + Example: ??? > > +Wse: Write same external. The current process wrote to a variable that > > + was also written to by the previous process. Example: ??? > > +Wsi: Write same internal. The current process wrote to a variable and > > + then immediately wrote to it again. Example: ??? > > + > > +Please note that the above is a partial list. To see the full list of > > +descriptors, execute the following command: > > + > > +$ diyone7 -bell linux-kernel.bell -show edges > > >