flow: fix some parent transition fallout
[smatch.git] / validation / sm_locking6.c
blob9366c2c11f1e5db3e0236f5624bcea334379c6b5
1 int __raw_local_irq_save();
2 int _spin_trylock(int x);
3 int raw_local_irq_restore(flags);
5 #define spin_trylock_irqsave(lock, flags) \
6 ({ \
7 (flags) = __raw_local_irq_save(); \
8 _spin_trylock(lock) ? 1 : ({ raw_local_irq_restore(flags); 0; }); \
9 })
11 void _spin_unlock_irqrestore(int lock, int flags);
13 int zzz;
15 void func (void)
17 int lock = 1;
18 int flags = 1;
20 if (!spin_trylock_irqsave(lock, flags))
21 return;
22 _spin_unlock_irqrestore(lock, flags);
23 if (zzz)
24 return;
25 if (spin_trylock_irqsave(lock, flags))
26 return;
27 return;
30 * check-name: Smatch locking #6
31 * check-command: smatch -p=kernel sm_locking6.c
33 * check-output-start
34 sm_locking6.c:27 func() warn: inconsistent returns 'irqsave:flags'.
35 Locked on: line 26
36 Unlocked on: line 21
37 line 24
38 line 27
39 sm_locking6.c:27 func() warn: inconsistent returns 'spin_lock:lock'.
40 Locked on: line 26
41 Unlocked on: line 21
42 line 24
43 line 27
44 * check-output-end