b464818978
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: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Acked-by: Alan Stern <stern@rowland.harvard.edu> Acked-by: Andrea 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: Ingo Molnar <mingo@kernel.org>
32 lines
452 B
Text
32 lines
452 B
Text
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)
|