Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

atomic: Collapse all atomic_{set,clear}_mask definitions

Move the now generic definitions of atomic_{set,clear}_mask() into
linux/atomic.h to avoid endless and pointless repetition.

Also, provide an atomic_andnot() wrapper for those few archs that can
implement that.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

authored by

Peter Zijlstra and committed by
Thomas Gleixner
de9e432c e6942b7d

+25 -174
-10
arch/arc/include/asm/atomic.h
··· 155 155 #undef ATOMIC_OP_RETURN 156 156 #undef ATOMIC_OP 157 157 158 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 159 - { 160 - atomic_and(~mask, v); 161 - } 162 - 163 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 164 - { 165 - atomic_or(mask, v); 166 - } 167 - 168 158 /** 169 159 * __atomic_add_unless - add unless the number is a given value 170 160 * @v: pointer of type atomic_t
-10
arch/blackfin/include/asm/atomic.h
··· 32 32 #define atomic_and(i, v) (void)__raw_atomic_and_asm(&(v)->counter, i) 33 33 #define atomic_xor(i, v) (void)__raw_atomic_xor_asm(&(v)->counter, i) 34 34 35 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 36 - { 37 - atomic_and(~mask, v); 38 - } 39 - 40 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 41 - { 42 - atomic_or(mask, v); 43 - } 44 - 45 35 #endif 46 36 47 37 #include <asm-generic/atomic.h>
-10
arch/frv/include/asm/atomic.h
··· 198 198 199 199 #undef ATOMIC_OP 200 200 201 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 202 - { 203 - atomic_and(~mask, v); 204 - } 205 - 206 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 207 - { 208 - atomic_or(mask, v); 209 - } 210 - 211 201 #endif /* _ASM_ATOMIC_H */
-10
arch/h8300/include/asm/atomic.h
··· 89 89 return ret; 90 90 } 91 91 92 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 93 - { 94 - atomic_and(~mask, v); 95 - } 96 - 97 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 98 - { 99 - atomic_or(mask, v); 100 - } 101 - 102 92 #endif /* __ARCH_H8300_ATOMIC __ */
-11
arch/m32r/include/asm/atomic.h
··· 243 243 return c; 244 244 } 245 245 246 - 247 - static __inline__ __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 248 - { 249 - atomic_and(~mask, v); 250 - } 251 - 252 - static __inline__ __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 253 - { 254 - atomic_or(mask, v); 255 - } 256 - 257 246 #endif /* _ASM_M32R_ATOMIC_H */
-10
arch/m68k/include/asm/atomic.h
··· 174 174 return c != 0; 175 175 } 176 176 177 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 178 - { 179 - atomic_and(~mask, v); 180 - } 181 - 182 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 183 - { 184 - atomic_or(mask, v); 185 - } 186 - 187 177 static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u) 188 178 { 189 179 int c, old;
-10
arch/metag/include/asm/atomic_lnkget.h
··· 82 82 #undef ATOMIC_OP_RETURN 83 83 #undef ATOMIC_OP 84 84 85 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 86 - { 87 - atomic_and(~mask, v); 88 - } 89 - 90 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 91 - { 92 - atomic_or(mask, v); 93 - } 94 - 95 85 static inline int atomic_cmpxchg(atomic_t *v, int old, int new) 96 86 { 97 87 int result, temp;
-10
arch/metag/include/asm/atomic_lock1.h
··· 76 76 #undef ATOMIC_OP_RETURN 77 77 #undef ATOMIC_OP 78 78 79 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 80 - { 81 - atomic_and(~mask, v); 82 - } 83 - 84 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 85 - { 86 - atomic_or(mask, v); 87 - } 88 - 89 79 static inline int atomic_cmpxchg(atomic_t *v, int old, int new) 90 80 { 91 81 int ret;
-24
arch/mn10300/include/asm/atomic.h
··· 131 131 #define atomic_xchg(ptr, v) (xchg(&(ptr)->counter, (v))) 132 132 #define atomic_cmpxchg(v, old, new) (cmpxchg(&((v)->counter), (old), (new))) 133 133 134 - /** 135 - * atomic_clear_mask - Atomically clear bits in memory 136 - * @mask: Mask of the bits to be cleared 137 - * @v: pointer to word in memory 138 - * 139 - * Atomically clears the bits set in mask from the memory word specified. 140 - */ 141 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 142 - { 143 - atomic_and(~mask, v); 144 - } 145 - 146 - /** 147 - * atomic_set_mask - Atomically set bits in memory 148 - * @mask: Mask of the bits to be set 149 - * @v: pointer to word in memory 150 - * 151 - * Atomically sets the bits set in mask from the memory word specified. 152 - */ 153 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 154 - { 155 - atomic_or(mask, v); 156 - } 157 - 158 134 #endif /* __KERNEL__ */ 159 135 #endif /* CONFIG_SMP */ 160 136 #endif /* _ASM_ATOMIC_H */
-19
arch/powerpc/kernel/misc_32.S
··· 596 596 b 2b 597 597 598 598 /* 599 - * void atomic_clear_mask(atomic_t mask, atomic_t *addr) 600 - * void atomic_set_mask(atomic_t mask, atomic_t *addr); 601 - */ 602 - _GLOBAL(atomic_clear_mask) 603 - 10: lwarx r5,0,r4 604 - andc r5,r5,r3 605 - PPC405_ERR77(0,r4) 606 - stwcx. r5,0,r4 607 - bne- 10b 608 - blr 609 - _GLOBAL(atomic_set_mask) 610 - 10: lwarx r5,0,r4 611 - or r5,r5,r3 612 - PPC405_ERR77(0,r4) 613 - stwcx. r5,0,r4 614 - bne- 10b 615 - blr 616 - 617 - /* 618 599 * Extended precision shifts. 619 600 * 620 601 * Updated to be valid for shift counts from 0 to 63 inclusive.
-10
arch/s390/include/asm/atomic.h
··· 132 132 133 133 #undef ATOMIC_OP 134 134 135 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 136 - { 137 - atomic_and(~mask, v); 138 - } 139 - 140 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 141 - { 142 - atomic_or(mask, v); 143 - } 144 - 145 135 #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) 146 136 147 137 static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
-10
arch/sh/include/asm/atomic.h
··· 25 25 #include <asm/atomic-irq.h> 26 26 #endif 27 27 28 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 29 - { 30 - atomic_and(~mask, v); 31 - } 32 - 33 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 34 - { 35 - atomic_or(mask, v); 36 - } 37 - 38 28 #define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) 39 29 #define atomic_dec_return(v) atomic_sub_return(1, (v)) 40 30 #define atomic_inc_return(v) atomic_add_return(1, (v))
-10
arch/x86/include/asm/atomic.h
··· 234 234 return *v; 235 235 } 236 236 237 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 238 - { 239 - atomic_and(~mask, v); 240 - } 241 - 242 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 243 - { 244 - atomic_or(mask, v); 245 - } 246 - 247 237 #ifdef CONFIG_X86_32 248 238 # include <asm/atomic64_32.h> 249 239 #else
-10
arch/xtensa/include/asm/atomic.h
··· 153 153 #undef ATOMIC_OP_RETURN 154 154 #undef ATOMIC_OP 155 155 156 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 157 - { 158 - atomic_or(mask, v); 159 - } 160 - 161 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 162 - { 163 - atomic_and(~mask, v); 164 - } 165 - 166 156 /** 167 157 * atomic_sub_and_test - subtract value from variable and test result 168 158 * @i: integer value to subtract
-10
include/asm-generic/atomic.h
··· 113 113 #undef ATOMIC_OP_RETURN 114 114 #undef ATOMIC_OP 115 115 116 - static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 117 - { 118 - atomic_and(~mask, v); 119 - } 120 - 121 - static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 122 - { 123 - atomic_or(mask, v); 124 - } 125 - 126 116 /* 127 117 * Atomic operations that C can't guarantee us. Useful for 128 118 * resource counting etc..
+25
include/linux/atomic.h
··· 28 28 #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) 29 29 #endif 30 30 31 + #ifndef atomic_andnot 32 + static inline void atomic_andnot(int i, atomic_t *v) 33 + { 34 + atomic_and(~i, v); 35 + } 36 + #endif 37 + 38 + static inline __deprecated void atomic_clear_mask(unsigned int mask, atomic_t *v) 39 + { 40 + atomic_andnot(mask, v); 41 + } 42 + 43 + static inline __deprecated void atomic_set_mask(unsigned int mask, atomic_t *v) 44 + { 45 + atomic_or(mask, v); 46 + } 47 + 31 48 /** 32 49 * atomic_inc_not_zero_hint - increment if not null 33 50 * @v: pointer of type atomic_t ··· 132 115 #ifdef CONFIG_GENERIC_ATOMIC64 133 116 #include <asm-generic/atomic64.h> 134 117 #endif 118 + 119 + #ifndef atomic64_andnot 120 + static inline void atomic64_andnot(long long i, atomic64_t *v) 121 + { 122 + atomic64_and(~i, v); 123 + } 124 + #endif 125 + 135 126 #endif /* _LINUX_ATOMIC_H */