35 lines
		
	
	
		
			639 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			639 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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)
 |