Skip to content

Commit 148817b

Browse files
mitatorvalds
authored andcommitted
asm-generic: add another generic ext2 atomic bitops
The majority of architectures implement ext2 atomic bitops as test_and_{set,clear}_bit() without spinlock. This adds this type of generic implementation in ext2-atomic-setbit.h and use it wherever possible. Signed-off-by: Akinobu Mita <[email protected]> Suggested-by: Andreas Dilger <[email protected]> Suggested-by: Arnd Bergmann <[email protected]> Acked-by: Arnd Bergmann <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent b2c9cd3 commit 148817b

File tree

15 files changed

+28
-59
lines changed

15 files changed

+28
-59
lines changed

arch/alpha/include/asm/bitops.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,7 @@ sched_find_first_bit(const unsigned long b[2])
456456

457457
#include <asm-generic/bitops/le.h>
458458

459-
#define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a)
460-
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
459+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
461460

462461
#endif /* __KERNEL__ */
463462

arch/arm/include/asm/bitops.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -310,10 +310,7 @@ static inline int find_next_bit_le(const void *p, int size, int offset)
310310
/*
311311
* Ext2 is defined to use little-endian byte ordering.
312312
*/
313-
#define ext2_set_bit_atomic(lock, nr, p) \
314-
test_and_set_bit_le(nr, p)
315-
#define ext2_clear_bit_atomic(lock, nr, p) \
316-
test_and_clear_bit_le(nr, p)
313+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
317314

318315
#endif /* __KERNEL__ */
319316

arch/cris/include/asm/bitops.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,7 @@ static inline int test_and_change_bit(int nr, volatile unsigned long *addr)
156156

157157
#include <asm-generic/bitops/le.h>
158158

159-
#define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a)
160-
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
159+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
161160

162161
#include <asm-generic/bitops/sched.h>
163162

arch/frv/include/asm/bitops.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -403,8 +403,7 @@ int __ilog2_u64(u64 n)
403403

404404
#include <asm-generic/bitops/le.h>
405405

406-
#define ext2_set_bit_atomic(lock,nr,addr) test_and_set_bit ((nr) ^ 0x18, (addr))
407-
#define ext2_clear_bit_atomic(lock,nr,addr) test_and_clear_bit((nr) ^ 0x18, (addr))
406+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
408407

409408
#endif /* __KERNEL__ */
410409

arch/ia64/include/asm/bitops.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -458,8 +458,7 @@ static __inline__ unsigned long __arch_hweight64(unsigned long x)
458458

459459
#include <asm-generic/bitops/le.h>
460460

461-
#define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a)
462-
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
461+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
463462

464463
#include <asm-generic/bitops/sched.h>
465464

arch/mn10300/include/asm/bitops.h

+1-6
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,7 @@ int ffs(int x)
227227
#include <asm-generic/bitops/find.h>
228228
#include <asm-generic/bitops/sched.h>
229229
#include <asm-generic/bitops/hweight.h>
230-
231-
#define ext2_set_bit_atomic(lock, nr, addr) \
232-
test_and_set_bit((nr), (addr))
233-
#define ext2_clear_bit_atomic(lock, nr, addr) \
234-
test_and_clear_bit((nr), (addr))
235-
230+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
236231
#include <asm-generic/bitops/le.h>
237232

238233
#endif /* __KERNEL__ */

arch/parisc/include/asm/bitops.h

+1-8
Original file line numberDiff line numberDiff line change
@@ -223,14 +223,7 @@ static __inline__ int fls(int x)
223223
#ifdef __KERNEL__
224224

225225
#include <asm-generic/bitops/le.h>
226-
227-
/* '3' is bits per byte */
228-
#define LE_BYTE_ADDR ((sizeof(unsigned long) - 1) << 3)
229-
230-
#define ext2_set_bit_atomic(l,nr,addr) \
231-
test_and_set_bit((nr) ^ LE_BYTE_ADDR, (unsigned long *)addr)
232-
#define ext2_clear_bit_atomic(l,nr,addr) \
233-
test_and_clear_bit( (nr) ^ LE_BYTE_ADDR, (unsigned long *)addr)
226+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
234227

235228
#endif /* __KERNEL__ */
236229

arch/powerpc/include/asm/bitops.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -327,10 +327,7 @@ unsigned long find_next_bit_le(const void *addr,
327327
unsigned long size, unsigned long offset);
328328
/* Bitmap functions for the ext2 filesystem */
329329

330-
#define ext2_set_bit_atomic(lock, nr, addr) \
331-
test_and_set_bit_le((nr), (unsigned long*)addr)
332-
#define ext2_clear_bit_atomic(lock, nr, addr) \
333-
test_and_clear_bit_le((nr), (unsigned long*)addr)
330+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
334331

335332
#include <asm-generic/bitops/sched.h>
336333

arch/s390/include/asm/bitops.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -832,10 +832,7 @@ static inline int find_next_bit_le(void *vaddr, unsigned long size,
832832

833833
#include <asm-generic/bitops/le.h>
834834

835-
#define ext2_set_bit_atomic(lock, nr, addr) \
836-
test_and_set_bit_le(nr, addr)
837-
#define ext2_clear_bit_atomic(lock, nr, addr) \
838-
test_and_clear_bit_le(nr, addr)
835+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
839836

840837

841838
#endif /* __KERNEL__ */

arch/sparc/include/asm/bitops_64.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,7 @@ static inline unsigned int __arch_hweight8(unsigned int w)
9191

9292
#include <asm-generic/bitops/le.h>
9393

94-
#define ext2_set_bit_atomic(lock,nr,addr) \
95-
test_and_set_bit((nr) ^ 0x38,(unsigned long *)(addr))
96-
#define ext2_clear_bit_atomic(lock,nr,addr) \
97-
test_and_clear_bit((nr) ^ 0x38,(unsigned long *)(addr))
94+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
9895

9996
#endif /* __KERNEL__ */
10097

arch/tile/include/asm/bitops_64.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,6 @@ static inline int test_and_change_bit(unsigned nr,
9797
return (oldval & mask) != 0;
9898
}
9999

100-
#define ext2_set_bit_atomic(lock, nr, addr) \
101-
test_and_set_bit((nr), (unsigned long *)(addr))
102-
#define ext2_clear_bit_atomic(lock, nr, addr) \
103-
test_and_clear_bit((nr), (unsigned long *)(addr))
100+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
104101

105102
#endif /* _ASM_TILE_BITOPS_64_H */

arch/x86/include/asm/bitops.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -458,10 +458,7 @@ static inline int fls(int x)
458458

459459
#include <asm-generic/bitops/le.h>
460460

461-
#define ext2_set_bit_atomic(lock, nr, addr) \
462-
test_and_set_bit((nr), (unsigned long *)(addr))
463-
#define ext2_clear_bit_atomic(lock, nr, addr) \
464-
test_and_clear_bit((nr), (unsigned long *)(addr))
461+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
465462

466463
#endif /* __KERNEL__ */
467464
#endif /* _ASM_X86_BITOPS_H */

arch/xtensa/include/asm/bitops.h

+1-13
Original file line numberDiff line numberDiff line change
@@ -108,19 +108,7 @@ static inline unsigned long __fls(unsigned long word)
108108
#include <asm-generic/bitops/find.h>
109109
#include <asm-generic/bitops/le.h>
110110

111-
#ifdef __XTENSA_EL__
112-
# define ext2_set_bit_atomic(lock,nr,addr) \
113-
test_and_set_bit((nr), (unsigned long*)(addr))
114-
# define ext2_clear_bit_atomic(lock,nr,addr) \
115-
test_and_clear_bit((nr), (unsigned long*)(addr))
116-
#elif defined(__XTENSA_EB__)
117-
# define ext2_set_bit_atomic(lock,nr,addr) \
118-
test_and_set_bit((nr) ^ 0x18, (unsigned long*)(addr))
119-
# define ext2_clear_bit_atomic(lock,nr,addr) \
120-
test_and_clear_bit((nr) ^ 0x18, (unsigned long*)(addr))
121-
#else
122-
# error processor byte order undefined!
123-
#endif
111+
#include <asm-generic/bitops/ext2-atomic-setbit.h>
124112

125113
#include <asm-generic/bitops/hweight.h>
126114
#include <asm-generic/bitops/lock.h>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#ifndef _ASM_GENERIC_BITOPS_EXT2_ATOMIC_SETBIT_H_
2+
#define _ASM_GENERIC_BITOPS_EXT2_ATOMIC_SETBIT_H_
3+
4+
/*
5+
* Atomic bitops based version of ext2 atomic bitops
6+
*/
7+
8+
#define ext2_set_bit_atomic(l, nr, addr) test_and_set_bit_le(nr, addr)
9+
#define ext2_clear_bit_atomic(l, nr, addr) test_and_clear_bit_le(nr, addr)
10+
11+
#endif /* _ASM_GENERIC_BITOPS_EXT2_ATOMIC_SETBIT_H_ */

include/asm-generic/bitops/ext2-atomic.h

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#ifndef _ASM_GENERIC_BITOPS_EXT2_ATOMIC_H_
22
#define _ASM_GENERIC_BITOPS_EXT2_ATOMIC_H_
33

4+
/*
5+
* Spinlock based version of ext2 atomic bitops
6+
*/
7+
48
#define ext2_set_bit_atomic(lock, nr, addr) \
59
({ \
610
int ret; \

0 commit comments

Comments
 (0)