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>
This commit is contained in:
Родитель
3fca5af786
Коммит
61f2e7b0f4
|
@ -459,8 +459,6 @@ sched_find_first_bit(const unsigned long b[2])
|
|||
#define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a)
|
||||
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
|
||||
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _ALPHA_BITOPS_H */
|
||||
|
|
|
@ -345,16 +345,6 @@ static inline int find_next_bit_le(const void *p, int size, int offset)
|
|||
#define ext2_clear_bit_atomic(lock, nr, p) \
|
||||
test_and_clear_bit_le(nr, p)
|
||||
|
||||
/*
|
||||
* Minix is defined to use little-endian byte ordering.
|
||||
* These do not need to be atomic.
|
||||
*/
|
||||
#define minix_set_bit __set_bit_le
|
||||
#define minix_test_bit test_bit_le
|
||||
#define minix_test_and_set_bit __test_and_set_bit_le
|
||||
#define minix_test_and_clear_bit __test_and_clear_bit_le
|
||||
#define minix_find_first_zero_bit find_first_zero_bit_le
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _ARM_BITOPS_H */
|
||||
|
|
|
@ -301,6 +301,5 @@ static inline int ffs(unsigned long word)
|
|||
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix-le.h>
|
||||
|
||||
#endif /* __ASM_AVR32_BITOPS_H */
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
#include <linux/irqflags.h>
|
||||
|
|
|
@ -159,7 +159,6 @@ static inline int test_and_change_bit(int nr, volatile unsigned long *addr)
|
|||
#define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a)
|
||||
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
|
||||
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
@ -406,8 +406,6 @@ int __ilog2_u64(u64 n)
|
|||
#define ext2_set_bit_atomic(lock,nr,addr) test_and_set_bit ((nr) ^ 0x18, (addr))
|
||||
#define ext2_clear_bit_atomic(lock,nr,addr) test_and_clear_bit((nr) ^ 0x18, (addr))
|
||||
|
||||
#include <asm-generic/bitops/minix-le.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* _ASM_BITOPS_H */
|
||||
|
|
|
@ -202,7 +202,6 @@ static __inline__ unsigned long __ffs(unsigned long word)
|
|||
#include <asm-generic/bitops/lock.h>
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -461,7 +461,6 @@ static __inline__ unsigned long __arch_hweight64(unsigned long x)
|
|||
#define ext2_set_bit_atomic(l,n,a) test_and_set_bit(n,a)
|
||||
#define ext2_clear_bit_atomic(l,n,a) test_and_clear_bit(n,a)
|
||||
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
@ -268,7 +268,6 @@ static __inline__ int test_and_change_bit(int nr, volatile void * addr)
|
|||
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -325,36 +325,6 @@ static inline int __fls(int x)
|
|||
#include <asm-generic/bitops/hweight.h>
|
||||
#include <asm-generic/bitops/lock.h>
|
||||
|
||||
/* Bitmap functions for the minix filesystem */
|
||||
|
||||
static inline int minix_find_first_zero_bit(const void *vaddr, unsigned size)
|
||||
{
|
||||
const unsigned short *p = vaddr, *addr = vaddr;
|
||||
unsigned short num;
|
||||
|
||||
if (!size)
|
||||
return 0;
|
||||
|
||||
size = (size >> 4) + ((size & 15) > 0);
|
||||
while (*p++ == 0xffff) {
|
||||
if (--size == 0)
|
||||
return (p - addr) << 4;
|
||||
}
|
||||
|
||||
num = *--p;
|
||||
return ((p - addr) << 4) + ffz(num);
|
||||
}
|
||||
|
||||
#define minix_test_and_set_bit(nr, addr) __test_and_set_bit((nr) ^ 16, (unsigned long *)(addr))
|
||||
#define minix_set_bit(nr,addr) __set_bit((nr) ^ 16, (unsigned long *)(addr))
|
||||
#define minix_test_and_clear_bit(nr, addr) __test_and_clear_bit((nr) ^ 16, (unsigned long *)(addr))
|
||||
|
||||
static inline int minix_test_bit(int nr, const void *vaddr)
|
||||
{
|
||||
const unsigned short *p = vaddr;
|
||||
return (p[nr >> 4] & (1U << (nr & 15))) != 0;
|
||||
}
|
||||
|
||||
/* Bitmap functions for the little endian bitmap. */
|
||||
|
||||
static inline void __set_bit_le(int nr, void *addr)
|
||||
|
|
|
@ -336,8 +336,6 @@ found_middle:
|
|||
return result + ffz(__swab32(tmp));
|
||||
}
|
||||
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#include <asm-generic/bitops/fls.h>
|
||||
|
|
|
@ -678,7 +678,6 @@ static inline int ffs(int word)
|
|||
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -234,7 +234,6 @@ int ffs(int x)
|
|||
test_and_clear_bit((nr), (addr))
|
||||
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/minix-le.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __ASM_BITOPS_H */
|
||||
|
|
|
@ -234,6 +234,4 @@ static __inline__ int fls(int x)
|
|||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#include <asm-generic/bitops/minix-le.h>
|
||||
|
||||
#endif /* _PARISC_BITOPS_H */
|
||||
|
|
|
@ -332,20 +332,6 @@ unsigned long find_next_bit_le(const void *addr,
|
|||
#define ext2_clear_bit_atomic(lock, nr, addr) \
|
||||
test_and_clear_bit_le((nr), (unsigned long*)addr)
|
||||
|
||||
/* Bitmap functions for the minix filesystem. */
|
||||
|
||||
#define minix_test_and_set_bit(nr,addr) \
|
||||
__test_and_set_bit_le(nr, (unsigned long *)addr)
|
||||
#define minix_set_bit(nr,addr) \
|
||||
__set_bit_le(nr, (unsigned long *)addr)
|
||||
#define minix_test_and_clear_bit(nr,addr) \
|
||||
__test_and_clear_bit_le(nr, (unsigned long *)addr)
|
||||
#define minix_test_bit(nr,addr) \
|
||||
test_bit_le(nr, (unsigned long *)addr)
|
||||
|
||||
#define minix_find_first_zero_bit(addr,size) \
|
||||
find_first_zero_bit_le((unsigned long *)addr, size)
|
||||
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
|
|
@ -862,7 +862,6 @@ static inline int find_next_bit_le(void *vaddr, unsigned long size,
|
|||
#define ext2_clear_bit_atomic(lock, nr, addr) \
|
||||
test_and_clear_bit_le(nr, addr)
|
||||
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -96,7 +96,6 @@ static inline unsigned long ffz(unsigned long word)
|
|||
#include <asm-generic/bitops/sched.h>
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
#include <asm-generic/bitops/fls.h>
|
||||
#include <asm-generic/bitops/__fls.h>
|
||||
#include <asm-generic/bitops/fls64.h>
|
||||
|
|
|
@ -105,7 +105,6 @@ static inline void change_bit(unsigned long nr, volatile unsigned long *addr)
|
|||
#include <asm-generic/bitops/find.h>
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -96,8 +96,6 @@ static inline unsigned int __arch_hweight8(unsigned int w)
|
|||
#define ext2_clear_bit_atomic(lock,nr,addr) \
|
||||
test_and_clear_bit((nr) ^ 0x38,(unsigned long *)(addr))
|
||||
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
#endif /* defined(_SPARC64_BITOPS_H) */
|
||||
|
|
|
@ -123,6 +123,5 @@ static inline unsigned long __arch_hweight64(__u64 w)
|
|||
#include <asm-generic/bitops/find.h>
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* _ASM_TILE_BITOPS_H */
|
||||
|
|
|
@ -463,7 +463,5 @@ static inline int fls(int x)
|
|||
#define ext2_clear_bit_atomic(lock, nr, addr) \
|
||||
test_and_clear_bit((nr), (unsigned long *)(addr))
|
||||
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _ASM_X86_BITOPS_H */
|
||||
|
|
|
@ -125,7 +125,6 @@ static inline unsigned long __fls(unsigned long word)
|
|||
#include <asm-generic/bitops/hweight.h>
|
||||
#include <asm-generic/bitops/lock.h>
|
||||
#include <asm-generic/bitops/sched.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
|
|
@ -15,3 +15,11 @@ config MINIX_FS
|
|||
module will be called minix. Note that the file system of your root
|
||||
partition (the one containing the directory /) cannot be compiled as
|
||||
a module.
|
||||
|
||||
config MINIX_FS_NATIVE_ENDIAN
|
||||
def_bool MINIX_FS
|
||||
depends on H8300 || M32R || MICROBLAZE || MIPS || S390 || SUPERH || SPARC || XTENSA || (M68K && !MMU)
|
||||
|
||||
config MINIX_FS_BIG_ENDIAN_16BIT_INDEXED
|
||||
def_bool MINIX_FS
|
||||
depends on M68K && MMU
|
||||
|
|
|
@ -88,4 +88,78 @@ static inline struct minix_inode_info *minix_i(struct inode *inode)
|
|||
return list_entry(inode, struct minix_inode_info, vfs_inode);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_MINIX_FS_NATIVE_ENDIAN) && \
|
||||
defined(CONFIG_MINIX_FS_BIG_ENDIAN_16BIT_INDEXED)
|
||||
|
||||
#error Minix file system byte order broken
|
||||
|
||||
#elif defined(CONFIG_MINIX_FS_NATIVE_ENDIAN)
|
||||
|
||||
/*
|
||||
* big-endian 32 or 64 bit indexed bitmaps on big-endian system or
|
||||
* little-endian bitmaps on little-endian system
|
||||
*/
|
||||
|
||||
#define minix_test_and_set_bit(nr, addr) \
|
||||
__test_and_set_bit((nr), (unsigned long *)(addr))
|
||||
#define minix_set_bit(nr, addr) \
|
||||
__set_bit((nr), (unsigned long *)(addr))
|
||||
#define minix_test_and_clear_bit(nr, addr) \
|
||||
__test_and_clear_bit((nr), (unsigned long *)(addr))
|
||||
#define minix_test_bit(nr, addr) \
|
||||
test_bit((nr), (unsigned long *)(addr))
|
||||
#define minix_find_first_zero_bit(addr, size) \
|
||||
find_first_zero_bit((unsigned long *)(addr), (size))
|
||||
|
||||
#elif defined(CONFIG_MINIX_FS_BIG_ENDIAN_16BIT_INDEXED)
|
||||
|
||||
/*
|
||||
* big-endian 16bit indexed bitmaps
|
||||
*/
|
||||
|
||||
static inline int minix_find_first_zero_bit(const void *vaddr, unsigned size)
|
||||
{
|
||||
const unsigned short *p = vaddr, *addr = vaddr;
|
||||
unsigned short num;
|
||||
|
||||
if (!size)
|
||||
return 0;
|
||||
|
||||
size = (size >> 4) + ((size & 15) > 0);
|
||||
while (*p++ == 0xffff) {
|
||||
if (--size == 0)
|
||||
return (p - addr) << 4;
|
||||
}
|
||||
|
||||
num = *--p;
|
||||
return ((p - addr) << 4) + ffz(num);
|
||||
}
|
||||
|
||||
#define minix_test_and_set_bit(nr, addr) \
|
||||
__test_and_set_bit((nr) ^ 16, (unsigned long *)(addr))
|
||||
#define minix_set_bit(nr, addr) \
|
||||
__set_bit((nr) ^ 16, (unsigned long *)(addr))
|
||||
#define minix_test_and_clear_bit(nr, addr) \
|
||||
__test_and_clear_bit((nr) ^ 16, (unsigned long *)(addr))
|
||||
|
||||
static inline int minix_test_bit(int nr, const void *vaddr)
|
||||
{
|
||||
const unsigned short *p = vaddr;
|
||||
return (p[nr >> 4] & (1U << (nr & 15))) != 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
* little-endian bitmaps
|
||||
*/
|
||||
|
||||
#define minix_test_and_set_bit __test_and_set_bit_le
|
||||
#define minix_set_bit __set_bit_le
|
||||
#define minix_test_and_clear_bit __test_and_clear_bit_le
|
||||
#define minix_test_bit test_bit_le
|
||||
#define minix_find_first_zero_bit find_first_zero_bit_le
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* FS_MINIX_H */
|
||||
|
|
|
@ -40,6 +40,5 @@
|
|||
#include <asm-generic/bitops/non-atomic.h>
|
||||
#include <asm-generic/bitops/le.h>
|
||||
#include <asm-generic/bitops/ext2-atomic.h>
|
||||
#include <asm-generic/bitops/minix.h>
|
||||
|
||||
#endif /* __ASM_GENERIC_BITOPS_H */
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
#ifndef _ASM_GENERIC_BITOPS_MINIX_LE_H_
|
||||
#define _ASM_GENERIC_BITOPS_MINIX_LE_H_
|
||||
|
||||
#define minix_test_and_set_bit(nr,addr) \
|
||||
__test_and_set_bit_le((nr), (unsigned long *)(addr))
|
||||
#define minix_set_bit(nr,addr) \
|
||||
__set_bit_le((nr), (unsigned long *)(addr))
|
||||
#define minix_test_and_clear_bit(nr,addr) \
|
||||
__test_and_clear_bit_le((nr), (unsigned long *)(addr))
|
||||
#define minix_test_bit(nr,addr) \
|
||||
test_bit_le((nr), (unsigned long *)(addr))
|
||||
#define minix_find_first_zero_bit(addr,size) \
|
||||
find_first_zero_bit_le((unsigned long *)(addr), (size))
|
||||
|
||||
#endif /* _ASM_GENERIC_BITOPS_MINIX_LE_H_ */
|
|
@ -1,15 +0,0 @@
|
|||
#ifndef _ASM_GENERIC_BITOPS_MINIX_H_
|
||||
#define _ASM_GENERIC_BITOPS_MINIX_H_
|
||||
|
||||
#define minix_test_and_set_bit(nr,addr) \
|
||||
__test_and_set_bit((nr),(unsigned long *)(addr))
|
||||
#define minix_set_bit(nr,addr) \
|
||||
__set_bit((nr),(unsigned long *)(addr))
|
||||
#define minix_test_and_clear_bit(nr,addr) \
|
||||
__test_and_clear_bit((nr),(unsigned long *)(addr))
|
||||
#define minix_test_bit(nr,addr) \
|
||||
test_bit((nr),(unsigned long *)(addr))
|
||||
#define minix_find_first_zero_bit(addr,size) \
|
||||
find_first_zero_bit((unsigned long *)(addr),(size))
|
||||
|
||||
#endif /* _ASM_GENERIC_BITOPS_MINIX_H_ */
|
Загрузка…
Ссылка в новой задаче