]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - include/linux/atomic.h
lockless get_write_access/deny_write_access
[mirror_ubuntu-zesty-kernel.git] / include / linux / atomic.h
index ee456c79b0e6784cb8af04fcddbc3f354030b59f..bc6615d4132b288213a65843f7a65e6c1be6e1bf 100644 (file)
@@ -34,6 +34,32 @@ static inline int atomic_inc_not_zero_hint(atomic_t *v, int hint)
 }
 #endif
 
+#ifndef atomic_inc_unless_negative
+static inline int 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 0;
+}
+#endif
+
+#ifndef atomic_dec_unless_positive
+static inline int 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 0;
+}
+#endif
+
 #ifndef CONFIG_ARCH_HAS_ATOMIC_OR
 static inline void atomic_or(int i, atomic_t *v)
 {