GNU Linux-libre 4.4.287-gnu1
[releases.git] / arch / microblaze / include / asm / atomic.h
1 #ifndef _ASM_MICROBLAZE_ATOMIC_H
2 #define _ASM_MICROBLAZE_ATOMIC_H
3
4 #include <asm/cmpxchg.h>
5 #include <asm-generic/atomic.h>
6 #include <asm-generic/atomic64.h>
7
8 /*
9  * Atomically test *v and decrement if it is greater than 0.
10  * The function returns the old value of *v minus 1.
11  */
12 static inline int atomic_dec_if_positive(atomic_t *v)
13 {
14         unsigned long flags;
15         int res;
16
17         local_irq_save(flags);
18         res = v->counter - 1;
19         if (res >= 0)
20                 v->counter = res;
21         local_irq_restore(flags);
22
23         return res;
24 }
25 #define atomic_dec_if_positive atomic_dec_if_positive
26
27 #endif /* _ASM_MICROBLAZE_ATOMIC_H */