|
@@ -2,6 +2,8 @@
|
|
|
/* Atomic operations usable in machine independent code */
|
|
|
#ifndef _LINUX_ATOMIC_H
|
|
|
#define _LINUX_ATOMIC_H
|
|
|
+#include <linux/types.h>
|
|
|
+
|
|
|
#include <asm/atomic.h>
|
|
|
#include <asm/barrier.h>
|
|
|
|
|
@@ -525,10 +527,10 @@
|
|
|
* @a: the amount to add to v...
|
|
|
* @u: ...unless v is equal to u.
|
|
|
*
|
|
|
- * Atomically adds @a to @v, so long as @v was not already @u.
|
|
|
- * Returns non-zero if @v was not @u, and zero otherwise.
|
|
|
+ * Atomically adds @a to @v, if @v was not already @u.
|
|
|
+ * Returns true if the addition was done.
|
|
|
*/
|
|
|
-static inline int atomic_add_unless(atomic_t *v, int a, int u)
|
|
|
+static inline bool atomic_add_unless(atomic_t *v, int a, int u)
|
|
|
{
|
|
|
return atomic_fetch_add_unless(v, a, u) != u;
|
|
|
}
|
|
@@ -537,8 +539,8 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u)
|
|
|
* atomic_inc_not_zero - increment unless the number is zero
|
|
|
* @v: pointer of type atomic_t
|
|
|
*
|
|
|
- * Atomically increments @v by 1, so long as @v is non-zero.
|
|
|
- * Returns non-zero if @v was non-zero, and zero otherwise.
|
|
|
+ * Atomically increments @v by 1, if @v is non-zero.
|
|
|
+ * Returns true if the increment was done.
|
|
|
*/
|
|
|
#ifndef atomic_inc_not_zero
|
|
|
#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
|
|
@@ -572,28 +574,28 @@ static inline int atomic_fetch_andnot_release(int i, atomic_t *v)
|
|
|
#endif
|
|
|
|
|
|
#ifndef atomic_inc_unless_negative
|
|
|
-static inline int atomic_inc_unless_negative(atomic_t *p)
|
|
|
+static inline bool atomic_inc_unless_negative(atomic_t *p)
|
|
|
{
|
|
|
int v, v1;
|
|
|
for (v = 0; v >= 0; v = v1) {
|
|
|
v1 = atomic_cmpxchg(p, v, v + 1);
|
|
|
if (likely(v1 == v))
|
|
|
- return 1;
|
|
|
+ return true;
|
|
|
}
|
|
|
- return 0;
|
|
|
+ return false;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
#ifndef atomic_dec_unless_positive
|
|
|
-static inline int atomic_dec_unless_positive(atomic_t *p)
|
|
|
+static inline bool atomic_dec_unless_positive(atomic_t *p)
|
|
|
{
|
|
|
int v, v1;
|
|
|
for (v = 0; v <= 0; v = v1) {
|
|
|
v1 = atomic_cmpxchg(p, v, v - 1);
|
|
|
if (likely(v1 == v))
|
|
|
- return 1;
|
|
|
+ return true;
|
|
|
}
|
|
|
- return 0;
|
|
|
+ return false;
|
|
|
}
|
|
|
#endif
|
|
|
|