Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4648189 authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Ingo Molnar
Browse files

tools/memory-model: Add litmus test for full multicopy atomicity



This commit adds a litmus test suggested by Alan Stern that is forbidden
on fully multicopy atomic systems, but allowed on other-multicopy and
on non-multicopy atomic systems.  For reference, s390 is fully multicopy
atomic, x86 and ARMv8 are other-multicopy atomic, and ARMv7 and powerpc
are non-multicopy atomic.

Suggested-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Acked-by: default avatarAndrea Parri <andrea.parri@amarulasolutions.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: akiyks@gmail.com
Cc: boqun.feng@gmail.com
Cc: dhowells@redhat.com
Cc: j.alglave@ucl.ac.uk
Cc: linux-arch@vger.kernel.org
Cc: luc.maranget@inria.fr
Cc: npiggin@gmail.com
Cc: parri.andrea@gmail.com
Cc: will.deacon@arm.com
Link: http://lkml.kernel.org/r/20180716180605.16115-1-paulmck@linux.vnet.ibm.com


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 52b544bd
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -111,6 +111,15 @@ SB+mbonceonces.litmus
SB+poonceonces.litmus
	As above, but without the smp_mb() invocations.

SB+rfionceonce-poonceonces.litmus
	This litmus test demonstrates that LKMM is not fully multicopy
	atomic.  (Neither is it other multicopy atomic.)  This litmus test
	also demonstrates the "locations" debugging aid, which designates
	additional registers and locations to be printed out in the dump
	of final states in the herd7 output.  Without the "locations"
	statement, only those registers and locations mentioned in the
	"exists" clause will be printed.

S+poonceonces.litmus
	As below, but without the smp_wmb() and acquire load.

+32 −0
Original line number Diff line number Diff line
C SB+rfionceonce-poonceonces

(*
 * Result: Sometimes
 *
 * This litmus test demonstrates that LKMM is not fully multicopy atomic.
 *)

{}

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);
}

locations [0:r1; 1:r3; x; y] (* Debug aid: Print things not in "exists". *)
exists (0:r2=0 /\ 1:r4=0)