1*1f5207b7SJohn Levon void _spin_lock(int name); 2*1f5207b7SJohn Levon void _spin_unlock(int name); 3*1f5207b7SJohn Levon 4*1f5207b7SJohn Levon int a, b, c; 5*1f5207b7SJohn Levon func(void)6*1f5207b7SJohn Levonint func (void) 7*1f5207b7SJohn Levon { 8*1f5207b7SJohn Levon int mylock = 1; 9*1f5207b7SJohn Levon int mylock2 = 1; 10*1f5207b7SJohn Levon int mylock3 = 1; 11*1f5207b7SJohn Levon 12*1f5207b7SJohn Levon if (a) { 13*1f5207b7SJohn Levon return; 14*1f5207b7SJohn Levon } 15*1f5207b7SJohn Levon 16*1f5207b7SJohn Levon _spin_lock(mylock); 17*1f5207b7SJohn Levon _spin_unlock(mylock); 18*1f5207b7SJohn Levon 19*1f5207b7SJohn Levon if (b) { 20*1f5207b7SJohn Levon _spin_unlock(mylock2); 21*1f5207b7SJohn Levon return; 22*1f5207b7SJohn Levon } 23*1f5207b7SJohn Levon 24*1f5207b7SJohn Levon if (c) 25*1f5207b7SJohn Levon _spin_lock(mylock3); 26*1f5207b7SJohn Levon return; 27*1f5207b7SJohn Levon } 28*1f5207b7SJohn Levon /* 29*1f5207b7SJohn Levon * check-name: Smatch locking #1 30*1f5207b7SJohn Levon * check-command: smatch --project=kernel --spammy sm_locking.c 31*1f5207b7SJohn Levon * 32*1f5207b7SJohn Levon * check-output-start 33*1f5207b7SJohn Levon sm_locking.c:26 func() warn: 'spin_lock:mylock3' is sometimes locked here and sometimes unlocked. 34*1f5207b7SJohn Levon sm_locking.c:26 func() warn: inconsistent returns 'spin_lock:mylock2'. 35*1f5207b7SJohn Levon Locked on: line 13 36*1f5207b7SJohn Levon line 26 37*1f5207b7SJohn Levon Unlocked on: line 21 38*1f5207b7SJohn Levon * check-output-end 39*1f5207b7SJohn Levon */ 40