C MP+polockonce+poacquiresilsil | |
(* | |
* Result: Sometimes | |
* | |
* Do spinlocks provide order to outside observers using spin_is_locked() | |
* to sense the lock-held state, ordered by acquire? Note that when the | |
* first spin_is_locked() returns false and the second true, we know that | |
* the smp_load_acquire() executed before the lock was acquired (loosely | |
* speaking). | |
*) | |
{ | |
} | |
P0(spinlock_t *lo, int *x) | |
{ | |
spin_lock(lo); | |
WRITE_ONCE(*x, 1); | |
spin_unlock(lo); | |
} | |
P1(spinlock_t *lo, int *x) | |
{ | |
int r1; | |
int r2; | |
int r3; | |
r1 = smp_load_acquire(x); | |
r2 = spin_is_locked(lo); | |
r3 = spin_is_locked(lo); | |
} | |
exists (1:r1=1 /\ 1:r2=0 /\ 1:r3=1) |