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