mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-07 14:32:23 +00:00
tools/memory-model: Label MP tests' producers and consumers
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>
This commit is contained in:
parent
acc4bdc55d
commit
b6ff30849c
@ -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. *)
|
||||
|
@ -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. *)
|
||||
|
@ -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. *)
|
||||
|
@ -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. *)
|
||||
|
@ -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. *)
|
||||
|
@ -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. *)
|
||||
|
@ -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. *)
|
||||
|
@ -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. *)
|
||||
|
Loading…
Reference in New Issue
Block a user