db/fixup_kernel.sh: fix clear_user() handling
[smatch.git] / validation / sm_locking6.c
blobdf7c9808275db40e566258a229a550097d9ad29f
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 -DCONFIG_SMP=y sm_locking6.c
33 * check-output-start
34 sm_locking6.c:27 func() warn: inconsistent returns 'flags'.
35 Locked on : 26
36 Unlocked on: 21,24,27
37 sm_locking6.c:27 func() warn: inconsistent returns 'lock'.
38 Locked on : 26
39 Unlocked on: 24,27
40 * check-output-end