Commit 61f2e7b0f474225b4226772830ae4b29a3a21f8d
Committed by
Linus Torvalds
1 parent
3fca5af786
Exists in
master
and in
4 other branches
bitops: remove minix bitops from asm/bitops.h
minix bit operations are only used by minix filesystem and useless by other modules. Because byte order of inode and block bitmaps is different on each architecture like below: m68k: big-endian 16bit indexed bitmaps h8300, microblaze, s390, sparc, m68knommu: big-endian 32 or 64bit indexed bitmaps m32r, mips, sh, xtensa: big-endian 32 or 64bit indexed bitmaps for big-endian mode little-endian bitmaps for little-endian mode Others: little-endian bitmaps In order to move minix bit operations from asm/bitops.h to architecture independent code in minix filesystem, this provides two config options. CONFIG_MINIX_FS_BIG_ENDIAN_16BIT_INDEXED is only selected by m68k. CONFIG_MINIX_FS_NATIVE_ENDIAN is selected by the architectures which use native byte order bitmaps (h8300, microblaze, s390, sparc, m68knommu, m32r, mips, sh, xtensa). The architectures which always use little-endian bitmaps do not select these options. Finally, we can remove minix bit operations from asm/bitops.h for all architectures. Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Greg Ungerer <gerg@uclinux.org> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Roman Zippel <zippel@linux-m68k.org> Cc: Andreas Schwab <schwab@linux-m68k.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Michal Simek <monstr@monstr.eu> Cc: "David S. Miller" <davem@davemloft.net> Cc: Hirokazu Takata <takata@linux-m32r.org> Acked-by: Ralf Baechle <ralf@linux-mips.org> Acked-by: Paul Mundt <lethal@linux-sh.org> Cc: Chris Zankel <chris@zankel.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 27 changed files with 82 additions and 110 deletions Side-by-side Diff
- arch/alpha/include/asm/bitops.h
- arch/arm/include/asm/bitops.h
- arch/avr32/include/asm/bitops.h
- arch/blackfin/include/asm/bitops.h
- arch/cris/include/asm/bitops.h
- arch/frv/include/asm/bitops.h
- arch/h8300/include/asm/bitops.h
- arch/ia64/include/asm/bitops.h
- arch/m32r/include/asm/bitops.h
- arch/m68k/include/asm/bitops_mm.h
- arch/m68k/include/asm/bitops_no.h
- arch/mips/include/asm/bitops.h
- arch/mn10300/include/asm/bitops.h
- arch/parisc/include/asm/bitops.h
- arch/powerpc/include/asm/bitops.h
- arch/s390/include/asm/bitops.h
- arch/sh/include/asm/bitops.h
- arch/sparc/include/asm/bitops_32.h
- arch/sparc/include/asm/bitops_64.h
- arch/tile/include/asm/bitops.h
- arch/x86/include/asm/bitops.h
- arch/xtensa/include/asm/bitops.h
- fs/minix/Kconfig
- fs/minix/minix.h
- include/asm-generic/bitops.h
- include/asm-generic/bitops/minix-le.h
- include/asm-generic/bitops/minix.h
arch/alpha/include/asm/bitops.h
arch/arm/include/asm/bitops.h
... | ... | @@ -345,16 +345,6 @@ |
345 | 345 | #define ext2_clear_bit_atomic(lock, nr, p) \ |
346 | 346 | test_and_clear_bit_le(nr, p) |
347 | 347 | |
348 | -/* | |
349 | - * Minix is defined to use little-endian byte ordering. | |
350 | - * These do not need to be atomic. | |
351 | - */ | |
352 | -#define minix_set_bit __set_bit_le | |
353 | -#define minix_test_bit test_bit_le | |
354 | -#define minix_test_and_set_bit __test_and_set_bit_le | |
355 | -#define minix_test_and_clear_bit __test_and_clear_bit_le | |
356 | -#define minix_find_first_zero_bit find_first_zero_bit_le | |
357 | - | |
358 | 348 | #endif /* __KERNEL__ */ |
359 | 349 | |
360 | 350 | #endif /* _ARM_BITOPS_H */ |
arch/avr32/include/asm/bitops.h
arch/blackfin/include/asm/bitops.h
arch/cris/include/asm/bitops.h
arch/frv/include/asm/bitops.h
... | ... | @@ -406,8 +406,6 @@ |
406 | 406 | #define ext2_set_bit_atomic(lock,nr,addr) test_and_set_bit ((nr) ^ 0x18, (addr)) |
407 | 407 | #define ext2_clear_bit_atomic(lock,nr,addr) test_and_clear_bit((nr) ^ 0x18, (addr)) |
408 | 408 | |
409 | -#include <asm-generic/bitops/minix-le.h> | |
410 | - | |
411 | 409 | #endif /* __KERNEL__ */ |
412 | 410 | |
413 | 411 | #endif /* _ASM_BITOPS_H */ |
arch/h8300/include/asm/bitops.h
arch/ia64/include/asm/bitops.h
arch/m32r/include/asm/bitops.h
arch/m68k/include/asm/bitops_mm.h
... | ... | @@ -325,36 +325,6 @@ |
325 | 325 | #include <asm-generic/bitops/hweight.h> |
326 | 326 | #include <asm-generic/bitops/lock.h> |
327 | 327 | |
328 | -/* Bitmap functions for the minix filesystem */ | |
329 | - | |
330 | -static inline int minix_find_first_zero_bit(const void *vaddr, unsigned size) | |
331 | -{ | |
332 | - const unsigned short *p = vaddr, *addr = vaddr; | |
333 | - unsigned short num; | |
334 | - | |
335 | - if (!size) | |
336 | - return 0; | |
337 | - | |
338 | - size = (size >> 4) + ((size & 15) > 0); | |
339 | - while (*p++ == 0xffff) { | |
340 | - if (--size == 0) | |
341 | - return (p - addr) << 4; | |
342 | - } | |
343 | - | |
344 | - num = *--p; | |
345 | - return ((p - addr) << 4) + ffz(num); | |
346 | -} | |
347 | - | |
348 | -#define minix_test_and_set_bit(nr, addr) __test_and_set_bit((nr) ^ 16, (unsigned long *)(addr)) | |
349 | -#define minix_set_bit(nr,addr) __set_bit((nr) ^ 16, (unsigned long *)(addr)) | |
350 | -#define minix_test_and_clear_bit(nr, addr) __test_and_clear_bit((nr) ^ 16, (unsigned long *)(addr)) | |
351 | - | |
352 | -static inline int minix_test_bit(int nr, const void *vaddr) | |
353 | -{ | |
354 | - const unsigned short *p = vaddr; | |
355 | - return (p[nr >> 4] & (1U << (nr & 15))) != 0; | |
356 | -} | |
357 | - | |
358 | 328 | /* Bitmap functions for the little endian bitmap. */ |
359 | 329 | |
360 | 330 | static inline void __set_bit_le(int nr, void *addr) |
arch/m68k/include/asm/bitops_no.h
arch/mips/include/asm/bitops.h
arch/mn10300/include/asm/bitops.h
arch/parisc/include/asm/bitops.h
arch/powerpc/include/asm/bitops.h
... | ... | @@ -332,20 +332,6 @@ |
332 | 332 | #define ext2_clear_bit_atomic(lock, nr, addr) \ |
333 | 333 | test_and_clear_bit_le((nr), (unsigned long*)addr) |
334 | 334 | |
335 | -/* Bitmap functions for the minix filesystem. */ | |
336 | - | |
337 | -#define minix_test_and_set_bit(nr,addr) \ | |
338 | - __test_and_set_bit_le(nr, (unsigned long *)addr) | |
339 | -#define minix_set_bit(nr,addr) \ | |
340 | - __set_bit_le(nr, (unsigned long *)addr) | |
341 | -#define minix_test_and_clear_bit(nr,addr) \ | |
342 | - __test_and_clear_bit_le(nr, (unsigned long *)addr) | |
343 | -#define minix_test_bit(nr,addr) \ | |
344 | - test_bit_le(nr, (unsigned long *)addr) | |
345 | - | |
346 | -#define minix_find_first_zero_bit(addr,size) \ | |
347 | - find_first_zero_bit_le((unsigned long *)addr, size) | |
348 | - | |
349 | 335 | #include <asm-generic/bitops/sched.h> |
350 | 336 | |
351 | 337 | #endif /* __KERNEL__ */ |
arch/s390/include/asm/bitops.h
arch/sh/include/asm/bitops.h
... | ... | @@ -96,7 +96,6 @@ |
96 | 96 | #include <asm-generic/bitops/sched.h> |
97 | 97 | #include <asm-generic/bitops/le.h> |
98 | 98 | #include <asm-generic/bitops/ext2-atomic.h> |
99 | -#include <asm-generic/bitops/minix.h> | |
100 | 99 | #include <asm-generic/bitops/fls.h> |
101 | 100 | #include <asm-generic/bitops/__fls.h> |
102 | 101 | #include <asm-generic/bitops/fls64.h> |
arch/sparc/include/asm/bitops_32.h
arch/sparc/include/asm/bitops_64.h
arch/tile/include/asm/bitops.h
arch/x86/include/asm/bitops.h
arch/xtensa/include/asm/bitops.h
fs/minix/Kconfig
... | ... | @@ -15,4 +15,12 @@ |
15 | 15 | module will be called minix. Note that the file system of your root |
16 | 16 | partition (the one containing the directory /) cannot be compiled as |
17 | 17 | a module. |
18 | + | |
19 | +config MINIX_FS_NATIVE_ENDIAN | |
20 | + def_bool MINIX_FS | |
21 | + depends on H8300 || M32R || MICROBLAZE || MIPS || S390 || SUPERH || SPARC || XTENSA || (M68K && !MMU) | |
22 | + | |
23 | +config MINIX_FS_BIG_ENDIAN_16BIT_INDEXED | |
24 | + def_bool MINIX_FS | |
25 | + depends on M68K && MMU |
fs/minix/minix.h
... | ... | @@ -88,5 +88,79 @@ |
88 | 88 | return list_entry(inode, struct minix_inode_info, vfs_inode); |
89 | 89 | } |
90 | 90 | |
91 | +#if defined(CONFIG_MINIX_FS_NATIVE_ENDIAN) && \ | |
92 | + defined(CONFIG_MINIX_FS_BIG_ENDIAN_16BIT_INDEXED) | |
93 | + | |
94 | +#error Minix file system byte order broken | |
95 | + | |
96 | +#elif defined(CONFIG_MINIX_FS_NATIVE_ENDIAN) | |
97 | + | |
98 | +/* | |
99 | + * big-endian 32 or 64 bit indexed bitmaps on big-endian system or | |
100 | + * little-endian bitmaps on little-endian system | |
101 | + */ | |
102 | + | |
103 | +#define minix_test_and_set_bit(nr, addr) \ | |
104 | + __test_and_set_bit((nr), (unsigned long *)(addr)) | |
105 | +#define minix_set_bit(nr, addr) \ | |
106 | + __set_bit((nr), (unsigned long *)(addr)) | |
107 | +#define minix_test_and_clear_bit(nr, addr) \ | |
108 | + __test_and_clear_bit((nr), (unsigned long *)(addr)) | |
109 | +#define minix_test_bit(nr, addr) \ | |
110 | + test_bit((nr), (unsigned long *)(addr)) | |
111 | +#define minix_find_first_zero_bit(addr, size) \ | |
112 | + find_first_zero_bit((unsigned long *)(addr), (size)) | |
113 | + | |
114 | +#elif defined(CONFIG_MINIX_FS_BIG_ENDIAN_16BIT_INDEXED) | |
115 | + | |
116 | +/* | |
117 | + * big-endian 16bit indexed bitmaps | |
118 | + */ | |
119 | + | |
120 | +static inline int minix_find_first_zero_bit(const void *vaddr, unsigned size) | |
121 | +{ | |
122 | + const unsigned short *p = vaddr, *addr = vaddr; | |
123 | + unsigned short num; | |
124 | + | |
125 | + if (!size) | |
126 | + return 0; | |
127 | + | |
128 | + size = (size >> 4) + ((size & 15) > 0); | |
129 | + while (*p++ == 0xffff) { | |
130 | + if (--size == 0) | |
131 | + return (p - addr) << 4; | |
132 | + } | |
133 | + | |
134 | + num = *--p; | |
135 | + return ((p - addr) << 4) + ffz(num); | |
136 | +} | |
137 | + | |
138 | +#define minix_test_and_set_bit(nr, addr) \ | |
139 | + __test_and_set_bit((nr) ^ 16, (unsigned long *)(addr)) | |
140 | +#define minix_set_bit(nr, addr) \ | |
141 | + __set_bit((nr) ^ 16, (unsigned long *)(addr)) | |
142 | +#define minix_test_and_clear_bit(nr, addr) \ | |
143 | + __test_and_clear_bit((nr) ^ 16, (unsigned long *)(addr)) | |
144 | + | |
145 | +static inline int minix_test_bit(int nr, const void *vaddr) | |
146 | +{ | |
147 | + const unsigned short *p = vaddr; | |
148 | + return (p[nr >> 4] & (1U << (nr & 15))) != 0; | |
149 | +} | |
150 | + | |
151 | +#else | |
152 | + | |
153 | +/* | |
154 | + * little-endian bitmaps | |
155 | + */ | |
156 | + | |
157 | +#define minix_test_and_set_bit __test_and_set_bit_le | |
158 | +#define minix_set_bit __set_bit_le | |
159 | +#define minix_test_and_clear_bit __test_and_clear_bit_le | |
160 | +#define minix_test_bit test_bit_le | |
161 | +#define minix_find_first_zero_bit find_first_zero_bit_le | |
162 | + | |
163 | +#endif | |
164 | + | |
91 | 165 | #endif /* FS_MINIX_H */ |
include/asm-generic/bitops.h
include/asm-generic/bitops/minix-le.h
1 | -#ifndef _ASM_GENERIC_BITOPS_MINIX_LE_H_ | |
2 | -#define _ASM_GENERIC_BITOPS_MINIX_LE_H_ | |
3 | - | |
4 | -#define minix_test_and_set_bit(nr,addr) \ | |
5 | - __test_and_set_bit_le((nr), (unsigned long *)(addr)) | |
6 | -#define minix_set_bit(nr,addr) \ | |
7 | - __set_bit_le((nr), (unsigned long *)(addr)) | |
8 | -#define minix_test_and_clear_bit(nr,addr) \ | |
9 | - __test_and_clear_bit_le((nr), (unsigned long *)(addr)) | |
10 | -#define minix_test_bit(nr,addr) \ | |
11 | - test_bit_le((nr), (unsigned long *)(addr)) | |
12 | -#define minix_find_first_zero_bit(addr,size) \ | |
13 | - find_first_zero_bit_le((unsigned long *)(addr), (size)) | |
14 | - | |
15 | -#endif /* _ASM_GENERIC_BITOPS_MINIX_LE_H_ */ |
include/asm-generic/bitops/minix.h
1 | -#ifndef _ASM_GENERIC_BITOPS_MINIX_H_ | |
2 | -#define _ASM_GENERIC_BITOPS_MINIX_H_ | |
3 | - | |
4 | -#define minix_test_and_set_bit(nr,addr) \ | |
5 | - __test_and_set_bit((nr),(unsigned long *)(addr)) | |
6 | -#define minix_set_bit(nr,addr) \ | |
7 | - __set_bit((nr),(unsigned long *)(addr)) | |
8 | -#define minix_test_and_clear_bit(nr,addr) \ | |
9 | - __test_and_clear_bit((nr),(unsigned long *)(addr)) | |
10 | -#define minix_test_bit(nr,addr) \ | |
11 | - test_bit((nr),(unsigned long *)(addr)) | |
12 | -#define minix_find_first_zero_bit(addr,size) \ | |
13 | - find_first_zero_bit((unsigned long *)(addr),(size)) | |
14 | - | |
15 | -#endif /* _ASM_GENERIC_BITOPS_MINIX_H_ */ |