Commit 55c2945aa9d4d907ec5ca4f6a4e30ae908d8d30d

Authored by Paul E. McKenney
Committed by Ingo Molnar
1 parent 29f742f88a

atomic: Add atomic_or()

An atomic_or() function is needed by TREE_RCU to avoid deadlock, so
add a generic version.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

Showing 1 changed file with 13 additions and 0 deletions Side-by-side Diff

include/linux/atomic.h
... ... @@ -34,5 +34,18 @@
34 34 }
35 35 #endif
36 36  
  37 +#ifndef CONFIG_ARCH_HAS_ATOMIC_OR
  38 +static inline void atomic_or(int i, atomic_t *v)
  39 +{
  40 + int old;
  41 + int new;
  42 +
  43 + do {
  44 + old = atomic_read(v);
  45 + new = old | i;
  46 + } while (atomic_cmpxchg(v, old, new) != old);
  47 +}
  48 +#endif /* #ifndef CONFIG_ARCH_HAS_ATOMIC_OR */
  49 +
37 50 #endif /* _LINUX_ATOMIC_H */