aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkinobu Mita <akinobu.mita@gmail.com>2011-03-23 19:41:46 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-03-23 22:46:11 -0400
commit63ab595fb6b34234f116f05f95dc752dd5f8affb (patch)
tree37bf0cd86463e24df2f0162190be38e75c4af7b6
parent12ce22423abacca70bf1dfbcb8543b3e2b74aad4 (diff)
bitops: merge little and big endian definisions in asm-generic/bitops/le.h
This patch series introduces little-endian bit operations in asm/bitops.h for all architectures and converts all ext2 non-atomic and minix bit operations to use little-endian bit operations. It enables us to remove ext2 non-atomic and minix bit operations from asm/bitops.h. The reason they should be removed from asm/bitops.h is as follows: For ext2 non-atomic bit operations, they are used for little-endian byte order bitmap access by some filesystems and modules. But using ext2_*() functions on a module other than ext2 filesystem makes some feel strange. For minix bit operations, they are only used by minix filesystem and are useless by other modules. Because byte order of inode and block bitmap is This patch: In order to make the forthcoming changes smaller, this merges macro definisions in asm-generic/bitops/le.h for big-endian and little-endian as much as possible. This also removes unused BITOP_WORD macro. Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--include/asm-generic/bitops/le.h46
1 files changed, 20 insertions, 26 deletions
diff --git a/include/asm-generic/bitops/le.h b/include/asm-generic/bitops/le.h
index 80e3bf13b2b9..9085429ff3ca 100644
--- a/include/asm-generic/bitops/le.h
+++ b/include/asm-generic/bitops/le.h
@@ -4,27 +4,33 @@
4#include <asm/types.h> 4#include <asm/types.h>
5#include <asm/byteorder.h> 5#include <asm/byteorder.h>
6 6
7#define BITOP_WORD(nr) ((nr) / BITS_PER_LONG)
8#define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7)
9
10#if defined(__LITTLE_ENDIAN) 7#if defined(__LITTLE_ENDIAN)
11 8
12#define generic_test_le_bit(nr, addr) test_bit(nr, addr) 9#define BITOP_LE_SWIZZLE 0
13#define generic___set_le_bit(nr, addr) __set_bit(nr, addr)
14#define generic___clear_le_bit(nr, addr) __clear_bit(nr, addr)
15
16#define generic_test_and_set_le_bit(nr, addr) test_and_set_bit(nr, addr)
17#define generic_test_and_clear_le_bit(nr, addr) test_and_clear_bit(nr, addr)
18
19#define generic___test_and_set_le_bit(nr, addr) __test_and_set_bit(nr, addr)
20#define generic___test_and_clear_le_bit(nr, addr) __test_and_clear_bit(nr, addr)
21 10
22#define generic_find_next_zero_le_bit(addr, size, offset) find_next_zero_bit(addr, size, offset) 11#define generic_find_next_zero_le_bit(addr, size, offset) \
12 find_next_zero_bit(addr, size, offset)
23#define generic_find_next_le_bit(addr, size, offset) \ 13#define generic_find_next_le_bit(addr, size, offset) \
24 find_next_bit(addr, size, offset) 14 find_next_bit(addr, size, offset)
15#define generic_find_first_zero_le_bit(addr, size) \
16 find_first_zero_bit(addr, size)
25 17
26#elif defined(__BIG_ENDIAN) 18#elif defined(__BIG_ENDIAN)
27 19
20#define BITOP_LE_SWIZZLE ((BITS_PER_LONG-1) & ~0x7)
21
22extern unsigned long generic_find_next_zero_le_bit(const unsigned long *addr,
23 unsigned long size, unsigned long offset);
24extern unsigned long generic_find_next_le_bit(const unsigned long *addr,
25 unsigned long size, unsigned long offset);
26
27#define generic_find_first_zero_le_bit(addr, size) \
28 generic_find_next_zero_le_bit((addr), (size), 0)
29
30#else
31#error "Please fix <asm/byteorder.h>"
32#endif
33
28#define generic_test_le_bit(nr, addr) \ 34#define generic_test_le_bit(nr, addr) \
29 test_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) 35 test_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
30#define generic___set_le_bit(nr, addr) \ 36#define generic___set_le_bit(nr, addr) \
@@ -42,16 +48,4 @@
42#define generic___test_and_clear_le_bit(nr, addr) \ 48#define generic___test_and_clear_le_bit(nr, addr) \
43 __test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr)) 49 __test_and_clear_bit((nr) ^ BITOP_LE_SWIZZLE, (addr))
44 50
45extern unsigned long generic_find_next_zero_le_bit(const unsigned long *addr,
46 unsigned long size, unsigned long offset);
47extern unsigned long generic_find_next_le_bit(const unsigned long *addr,
48 unsigned long size, unsigned long offset);
49
50#else
51#error "Please fix <asm/byteorder.h>"
52#endif
53
54#define generic_find_first_zero_le_bit(addr, size) \
55 generic_find_next_zero_le_bit((addr), (size), 0)
56
57#endif /* _ASM_GENERIC_BITOPS_LE_H_ */ 51#endif /* _ASM_GENERIC_BITOPS_LE_H_ */