Commit 55c2945aa9d4d907ec5ca4f6a4e30ae908d8d30d
Committed by
Ingo Molnar
1 parent
29f742f88a
Exists in
master
and in
7 other branches
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 */ |