tools/memory-model: Label MP tests' producers and consumers
authorPaul E. McKenney <paulmck@kernel.org>
Thu, 5 Nov 2020 21:39:28 +0000 (13:39 -0800)
committerPaul E. McKenney <paulmck@kernel.org>
Sat, 7 Nov 2020 01:25:17 +0000 (17:25 -0800)
This commit adds comments that label the MP tests' producer and consumer
processes, and also that label the "exists" clause as the bad outcome.

Reported-by: Johannes Weiner <hannes@cmpxchg.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/memory-model/litmus-tests/MP+fencewmbonceonce+fencermbonceonce.litmus
tools/memory-model/litmus-tests/MP+onceassign+derefonce.litmus
tools/memory-model/litmus-tests/MP+polockmbonce+poacquiresilsil.litmus
tools/memory-model/litmus-tests/MP+polockonce+poacquiresilsil.litmus
tools/memory-model/litmus-tests/MP+polocks.litmus
tools/memory-model/litmus-tests/MP+poonceonces.litmus
tools/memory-model/litmus-tests/MP+pooncerelease+poacquireonce.litmus
tools/memory-model/litmus-tests/MP+porevlocks.litmus

index f15e501849dd57872f7b15009e21cf1560aabbcf..c5c168d929737b68bcae760c12838775cb22a04c 100644 (file)
@@ -13,14 +13,14 @@ C MP+fencewmbonceonce+fencermbonceonce
        int flag;
 }
 
-P0(int *buf, int *flag)
+P0(int *buf, int *flag) // Producer
 {
        WRITE_ONCE(*buf, 1);
        smp_wmb();
        WRITE_ONCE(*flag, 1);
 }
 
-P1(int *buf, int *flag)
+P1(int *buf, int *flag) // Consumer
 {
        int r0;
        int r1;
@@ -30,4 +30,4 @@ P1(int *buf, int *flag)
        r1 = READ_ONCE(*buf);
 }
 
-exists (1:r0=1 /\ 1:r1=0)
+exists (1:r0=1 /\ 1:r1=0) (* Bad outcome. *)
index ed8ee9bde0c9879ac7153867b2ff86481177c33b..20ff62649f1ee2e51a7ffa2eb5118d8cad1846d8 100644 (file)
@@ -15,13 +15,13 @@ C MP+onceassign+derefonce
        int y=0;
 }
 
-P0(int *x, int **p)
+P0(int *x, int **p) // Producer
 {
        WRITE_ONCE(*x, 1);
        rcu_assign_pointer(*p, x);
 }
 
-P1(int *x, int **p)
+P1(int *x, int **p) // Consumer
 {
        int *r0;
        int r1;
@@ -32,4 +32,4 @@ P1(int *x, int **p)
        rcu_read_unlock();
 }
 
-exists (1:r0=x /\ 1:r1=0)
+exists (1:r0=x /\ 1:r1=0) (* Bad outcome. *)
index b1b1266fb49a2166ab2d5783763f6b3787870f8a..153917ad5dc950f84248bf25cee8e493d7dd9fa5 100644 (file)
@@ -15,7 +15,7 @@ C MP+polockmbonce+poacquiresilsil
        int x;
 }
 
-P0(spinlock_t *lo, int *x)
+P0(spinlock_t *lo, int *x) // Producer
 {
        spin_lock(lo);
        smp_mb__after_spinlock();
@@ -23,7 +23,7 @@ P0(spinlock_t *lo, int *x)
        spin_unlock(lo);
 }
 
-P1(spinlock_t *lo, int *x)
+P1(spinlock_t *lo, int *x) // Consumer
 {
        int r1;
        int r2;
@@ -34,4 +34,4 @@ P1(spinlock_t *lo, int *x)
        r3 = spin_is_locked(lo);
 }
 
-exists (1:r1=1 /\ 1:r2=0 /\ 1:r3=1)
+exists (1:r1=1 /\ 1:r2=0 /\ 1:r3=1) (* Bad outcome. *)
index 867c75d8b96080a89a6cb64289c54d21ca465aa2..aad64397bb8cd4c0e9daa7f429676c9c704b09da 100644 (file)
@@ -15,14 +15,14 @@ C MP+polockonce+poacquiresilsil
        int x;
 }
 
-P0(spinlock_t *lo, int *x)
+P0(spinlock_t *lo, int *x) // Producer
 {
        spin_lock(lo);
        WRITE_ONCE(*x, 1);
        spin_unlock(lo);
 }
 
-P1(spinlock_t *lo, int *x)
+P1(spinlock_t *lo, int *x) // Consumer
 {
        int r1;
        int r2;
@@ -33,4 +33,4 @@ P1(spinlock_t *lo, int *x)
        r3 = spin_is_locked(lo);
 }
 
-exists (1:r1=1 /\ 1:r2=0 /\ 1:r3=1)
+exists (1:r1=1 /\ 1:r2=0 /\ 1:r3=1) (* Bad outcome. *)
index 4b0c2edcc029b488220137f81b988cbe04c55847..21cbca6f3be4ca8a385eac87900b379c7ffae09b 100644 (file)
@@ -17,7 +17,7 @@ C MP+polocks
        int flag;
 }
 
-P0(int *buf, int *flag, spinlock_t *mylock)
+P0(int *buf, int *flag, spinlock_t *mylock) // Producer
 {
        WRITE_ONCE(*buf, 1);
        spin_lock(mylock);
@@ -25,7 +25,7 @@ P0(int *buf, int *flag, spinlock_t *mylock)
        spin_unlock(mylock);
 }
 
-P1(int *buf, int *flag, spinlock_t *mylock)
+P1(int *buf, int *flag, spinlock_t *mylock) // Consumer
 {
        int r0;
        int r1;
@@ -36,4 +36,4 @@ P1(int *buf, int *flag, spinlock_t *mylock)
        r1 = READ_ONCE(*buf);
 }
 
-exists (1:r0=1 /\ 1:r1=0)
+exists (1:r0=1 /\ 1:r1=0) (* Bad outcome. *)
index 3010bbaec46c6b67e3f30feb1afe5d5ad4ee383b..9f9769d647c7bb787e5ce9339ec8414541f53067 100644 (file)
@@ -12,13 +12,13 @@ C MP+poonceonces
        int flag;
 }
 
-P0(int *buf, int *flag)
+P0(int *buf, int *flag) // Producer
 {
        WRITE_ONCE(*buf, 1);
        WRITE_ONCE(*flag, 1);
 }
 
-P1(int *buf, int *flag)
+P1(int *buf, int *flag) // Consumer
 {
        int r0;
        int r1;
@@ -27,4 +27,4 @@ P1(int *buf, int *flag)
        r1 = READ_ONCE(*buf);
 }
 
-exists (1:r0=1 /\ 1:r1=0)
+exists (1:r0=1 /\ 1:r1=0) (* Bad outcome. *)
index 21e825d5dea6577213622ae66368cb1dc6c0714a..cbe28e7334437866a1b250c01999952453b296c1 100644 (file)
@@ -13,13 +13,13 @@ C MP+pooncerelease+poacquireonce
        int flag;
 }
 
-P0(int *buf, int *flag)
+P0(int *buf, int *flag) // Producer
 {
        WRITE_ONCE(*buf, 1);
        smp_store_release(flag, 1);
 }
 
-P1(int *buf, int *flag)
+P1(int *buf, int *flag) // Consumer
 {
        int r0;
        int r1;
@@ -28,4 +28,4 @@ P1(int *buf, int *flag)
        r1 = READ_ONCE(*buf);
 }
 
-exists (1:r0=1 /\ 1:r1=0)
+exists (1:r0=1 /\ 1:r1=0) (* Bad outcome. *)
index 9691d55b4e21cbe2eae3f3c0fa57ba76b78de7a1..012041bd4feb30574d459e583a4e3f31ea1a1c51 100644 (file)
@@ -17,7 +17,7 @@ C MP+porevlocks
        int flag;
 }
 
-P0(int *buf, int *flag, spinlock_t *mylock)
+P0(int *buf, int *flag, spinlock_t *mylock) // Consumer
 {
        int r0;
        int r1;
@@ -28,7 +28,7 @@ P0(int *buf, int *flag, spinlock_t *mylock)
        spin_unlock(mylock);
 }
 
-P1(int *buf, int *flag, spinlock_t *mylock)
+P1(int *buf, int *flag, spinlock_t *mylock) // Producer
 {
        spin_lock(mylock);
        WRITE_ONCE(*buf, 1);
@@ -36,4 +36,4 @@ P1(int *buf, int *flag, spinlock_t *mylock)
        WRITE_ONCE(*flag, 1);
 }
 
-exists (0:r0=1 /\ 0:r1=0)
+exists (0:r0=1 /\ 0:r1=0) (* Bad outcome. *)