* [PATCH v2 03/22] s390: introduce little-endian bitops
[not found] ` <20101021144058.QEfMhOh7svsODcdx4tOLVi0C4h2HCh7FKc1ZTp__VTg@z>
@ 2010-10-21 14:40 ` Akinobu Mita
2010-10-21 15:08 ` Arnd Bergmann
0 siblings, 1 reply; 7+ messages in thread
From: Akinobu Mita @ 2010-10-21 14:40 UTC (permalink / raw)
To: linux-kernel, linux-arch, Arnd Bergmann, Christoph Hellwig,
Andrew Morton
Cc: Akinobu Mita, Martin Schwidefsky, Heiko Carstens, linux390,
linux-s390
Introduce little-endian bit operations by renaming native ext2 bit
operations. The ext2 bit operations are kept as wrapper macros using
little-endian bit operations to maintain bisectability until the
conversions are finished.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: linux390@de.ibm.com
Cc: linux-s390@vger.kernel.org
---
Change from v1: fix argument of test_and_{set,clear}_le_bit()
arch/s390/include/asm/bitops.h | 59 +++++++++++++++++++++++++++------------
1 files changed, 41 insertions(+), 18 deletions(-)
diff --git a/arch/s390/include/asm/bitops.h b/arch/s390/include/asm/bitops.h
index 2e05972..e10b81e 100644
--- a/arch/s390/include/asm/bitops.h
+++ b/arch/s390/include/asm/bitops.h
@@ -742,18 +742,22 @@ static inline int sched_find_first_bit(unsigned long *b)
* 23 22 21 20 19 18 17 16 31 30 29 28 27 26 25 24
*/
-#define ext2_set_bit(nr, addr) \
- __test_and_set_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
-#define ext2_set_bit_atomic(lock, nr, addr) \
- test_and_set_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
-#define ext2_clear_bit(nr, addr) \
- __test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
-#define ext2_clear_bit_atomic(lock, nr, addr) \
- test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
-#define ext2_test_bit(nr, addr) \
- test_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
-
-static inline int ext2_find_first_zero_bit(void *vaddr, unsigned int size)
+#define __set_le_bit(nr, addr) \
+ __set_bit((nr)^(__BITOPS_WORDSIZE - 8), (addr))
+#define __clear_le_bit(nr, addr) \
+ __clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (addr))
+#define __test_and_set_le_bit(nr, addr) \
+ __test_and_set_bit((nr)^(__BITOPS_WORDSIZE - 8), (addr))
+#define test_and_set_le_bit(nr, addr) \
+ test_and_set_bit((nr)^(__BITOPS_WORDSIZE - 8), (addr))
+#define __test_and_clear_le_bit(nr, addr) \
+ __test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (addr))
+#define test_and_clear_le_bit(nr, addr) \
+ test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (addr))
+#define test_le_bit(nr, addr) \
+ test_bit((nr)^(__BITOPS_WORDSIZE - 8), (addr))
+
+static inline int find_first_zero_le_bit(void *vaddr, unsigned int size)
{
unsigned long bytes, bits;
@@ -764,7 +768,7 @@ static inline int ext2_find_first_zero_bit(void *vaddr, unsigned int size)
return (bits < size) ? bits : size;
}
-static inline int ext2_find_next_zero_bit(void *vaddr, unsigned long size,
+static inline int find_next_zero_le_bit(void *vaddr, unsigned long size,
unsigned long offset)
{
unsigned long *addr = vaddr, *p;
@@ -790,11 +794,10 @@ static inline int ext2_find_next_zero_bit(void *vaddr, unsigned long size,
size -= __BITOPS_WORDSIZE;
p++;
}
- return offset + ext2_find_first_zero_bit(p, size);
+ return offset + find_first_zero_le_bit(p, size);
}
-static inline unsigned long ext2_find_first_bit(void *vaddr,
- unsigned long size)
+static inline unsigned long find_first_le_bit(void *vaddr, unsigned long size)
{
unsigned long bytes, bits;
@@ -805,7 +808,7 @@ static inline unsigned long ext2_find_first_bit(void *vaddr,
return (bits < size) ? bits : size;
}
-static inline int ext2_find_next_bit(void *vaddr, unsigned long size,
+static inline int find_next_le_bit(void *vaddr, unsigned long size,
unsigned long offset)
{
unsigned long *addr = vaddr, *p;
@@ -831,9 +834,29 @@ static inline int ext2_find_next_bit(void *vaddr, unsigned long size,
size -= __BITOPS_WORDSIZE;
p++;
}
- return offset + ext2_find_first_bit(p, size);
+ return offset + find_first_le_bit(p, size);
}
+#define ext2_set_bit(nr, addr) \
+ __test_and_set_le_bit((nr), (unsigned long *)(addr))
+#define ext2_set_bit_atomic(lock, nr, addr) \
+ test_and_set_le_bit((nr), (unsigned long *)(addr))
+#define ext2_clear_bit(nr, addr) \
+ __test_and_clear_le_bit((nr), (unsigned long *)(addr))
+#define ext2_clear_bit_atomic(lock, nr, addr) \
+ test_and_clear_le_bit((nr), (unsigned long *)(addr))
+#define ext2_test_bit(nr, addr) \
+ test_le_bit((nr), (unsigned long *)(addr))
+
+#define ext2_find_first_zero_bit(vaddr, size) \
+ find_first_zero_le_bit((unsigned long *)(vaddr), (size))
+#define ext2_find_next_zero_bit(vaddr, size, offset) \
+ find_next_zero_le_bit((unsigned long *)(vaddr), (size), (offset))
+#define ext2_find_first_bit(vaddr, size) \
+ find_first_le_bit((unsigned long *)(vaddr), (size))
+#define ext2_find_next_bit(vaddr, size, offset) \
+ find_next_le_bit((unsigned long *)(vaddr), (size), (offset))
+
#include <asm-generic/bitops/minix.h>
#endif /* __KERNEL__ */
--
1.7.1.231.gd0b16
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h
[not found] ` <20101021144117.7U1Ll_n2efR3tVADo01ivvtZgqY1QUc-ACObmTqhIkE@z>
@ 2010-10-21 14:41 ` Akinobu Mita
2010-10-21 15:10 ` Arnd Bergmann
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Akinobu Mita @ 2010-10-21 14:41 UTC (permalink / raw)
To: linux-kernel, linux-arch, Arnd Bergmann, Christoph Hellwig,
Andrew Morton
Cc: Akinobu Mita, Greg Ungerer, Geert Uytterhoeven, Roman Zippel,
Andreas Schwab, linux-m68k, Martin Schwidefsky, Heiko Carstens,
linux390, linux-s390, Yoshinori Sato, Michal Simek,
microblaze-uclinux, David S. Miller, sparclinux, Hirokazu Takata,
linux-m32r, Ralf Baechle, linux-mips, Paul Mundt, linux-sh,
Chris Zankel
minix bit operations are only used by minix filesystem and useless
by other modules. Because byte order of inode and block bitmaps is
defferent 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 file system, 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>
Cc: 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: linux-m68k@lists.linux-m68k.org
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: linux390@de.ibm.com
Cc: linux-s390@vger.kernel.org
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Michal Simek <monstr@monstr.eu>
Cc: microblaze-uclinux@itee.uq.edu.au
Cc: "David S. Miller" <davem@davemloft.net>
Cc: sparclinux@vger.kernel.org
Cc: Hirokazu Takata <takata@linux-m32r.org>
Cc: linux-m32r@ml.linux-m32r.org
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: linux-sh@vger.kernel.org
Cc: Chris Zankel <chris@zankel.net>
---
Mostly rewritten since previous submission
arch/alpha/include/asm/bitops.h | 2 -
arch/arm/include/asm/bitops.h | 14 ------
arch/avr32/include/asm/bitops.h | 1 -
arch/blackfin/include/asm/bitops.h | 1 -
arch/cris/include/asm/bitops.h | 1 -
arch/frv/include/asm/bitops.h | 2 -
arch/h8300/include/asm/bitops.h | 1 -
arch/ia64/include/asm/bitops.h | 1 -
arch/m32r/include/asm/bitops.h | 1 -
arch/m68k/include/asm/bitops_mm.h | 30 ------------
arch/mips/include/asm/bitops.h | 1 -
arch/mn10300/include/asm/bitops.h | 1 -
arch/parisc/include/asm/bitops.h | 2 -
arch/powerpc/include/asm/bitops.h | 14 ------
arch/s390/include/asm/bitops.h | 1 -
arch/sh/include/asm/bitops.h | 1 -
arch/sparc/include/asm/bitops_32.h | 1 -
arch/sparc/include/asm/bitops_64.h | 2 -
arch/tile/include/asm/bitops.h | 1 -
arch/x86/include/asm/bitops.h | 2 -
arch/xtensa/include/asm/bitops.h | 1 -
fs/minix/Kconfig | 8 +++
fs/minix/minix.h | 79 +++++++++++++++++++++++++++++++++
include/asm-generic/bitops.h | 1 -
include/asm-generic/bitops/minix-le.h | 15 ------
include/asm-generic/bitops/minix.h | 15 ------
26 files changed, 87 insertions(+), 112 deletions(-)
delete mode 100644 include/asm-generic/bitops/minix-le.h
delete mode 100644 include/asm-generic/bitops/minix.h
diff --git a/arch/alpha/include/asm/bitops.h b/arch/alpha/include/asm/bitops.h
index 822433a..85b8152 100644
--- a/arch/alpha/include/asm/bitops.h
+++ b/arch/alpha/include/asm/bitops.h
@@ -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 */
diff --git a/arch/arm/include/asm/bitops.h b/arch/arm/include/asm/bitops.h
index ac2edb4..59a2a2b 100644
--- a/arch/arm/include/asm/bitops.h
+++ b/arch/arm/include/asm/bitops.h
@@ -332,20 +332,6 @@ static inline int fls(int x)
#define ext2_clear_bit_atomic(lock,nr,p) \
test_and_clear_le_bit(nr, (unsigned long *)(p))
-/*
- * Minix is defined to use little-endian byte ordering.
- * These do not need to be atomic.
- */
-#define minix_set_bit(nr,p) \
- __set_le_bit(nr, (unsigned long *)(p))
-#define minix_test_bit(nr,p) \
- test_le_bit(nr, (unsigned long *)(p))
-#define minix_test_and_set_bit(nr,p) \
- __test_and_set_le_bit(nr, (unsigned long *)(p))
-#define minix_test_and_clear_bit(nr,p) \
- __test_and_clear_le_bit(nr, (unsigned long *)(p))
-#define minix_find_first_zero_bit(p,sz) \
- find_first_zero_le_bit((unsigned long *)(p), sz)
#endif /* __KERNEL__ */
diff --git a/arch/avr32/include/asm/bitops.h b/arch/avr32/include/asm/bitops.h
index 73a163a..72444d9 100644
--- a/arch/avr32/include/asm/bitops.h
+++ b/arch/avr32/include/asm/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 */
diff --git a/arch/blackfin/include/asm/bitops.h b/arch/blackfin/include/asm/bitops.h
index 2c549f7..68843fa 100644
--- a/arch/blackfin/include/asm/bitops.h
+++ b/arch/blackfin/include/asm/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>
diff --git a/arch/cris/include/asm/bitops.h b/arch/cris/include/asm/bitops.h
index 71bea40..310e0de 100644
--- a/arch/cris/include/asm/bitops.h
+++ b/arch/cris/include/asm/bitops.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__ */
diff --git a/arch/frv/include/asm/bitops.h b/arch/frv/include/asm/bitops.h
index e3ea644..a1d00b0 100644
--- a/arch/frv/include/asm/bitops.h
+++ b/arch/frv/include/asm/bitops.h
@@ -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 */
diff --git a/arch/h8300/include/asm/bitops.h b/arch/h8300/include/asm/bitops.h
index 23cea66..e856c1b 100644
--- a/arch/h8300/include/asm/bitops.h
+++ b/arch/h8300/include/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__ */
diff --git a/arch/ia64/include/asm/bitops.h b/arch/ia64/include/asm/bitops.h
index 336984a..b76f7e0 100644
--- a/arch/ia64/include/asm/bitops.h
+++ b/arch/ia64/include/asm/bitops.h
@@ -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__ */
diff --git a/arch/m32r/include/asm/bitops.h b/arch/m32r/include/asm/bitops.h
index cdfb4c8..6300f22 100644
--- a/arch/m32r/include/asm/bitops.h
+++ b/arch/m32r/include/asm/bitops.h
@@ -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__ */
diff --git a/arch/m68k/include/asm/bitops_mm.h b/arch/m68k/include/asm/bitops_mm.h
index f31ed5a..5f06275 100644
--- a/arch/m68k/include/asm/bitops_mm.h
+++ b/arch/m68k/include/asm/bitops_mm.h
@@ -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 little endian. */
#define __set_le_bit(nr, addr) \
diff --git a/arch/mips/include/asm/bitops.h b/arch/mips/include/asm/bitops.h
index 07ce5aa..6a2202c 100644
--- a/arch/mips/include/asm/bitops.h
+++ b/arch/mips/include/asm/bitops.h
@@ -706,7 +706,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__ */
diff --git a/arch/mn10300/include/asm/bitops.h b/arch/mn10300/include/asm/bitops.h
index e1a9768..94ee844 100644
--- a/arch/mn10300/include/asm/bitops.h
+++ b/arch/mn10300/include/asm/bitops.h
@@ -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 */
diff --git a/arch/parisc/include/asm/bitops.h b/arch/parisc/include/asm/bitops.h
index 919d7ed..43c516f 100644
--- a/arch/parisc/include/asm/bitops.h
+++ b/arch/parisc/include/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 */
diff --git a/arch/powerpc/include/asm/bitops.h b/arch/powerpc/include/asm/bitops.h
index eb9ce7f..bf5ccfc 100644
--- a/arch/powerpc/include/asm/bitops.h
+++ b/arch/powerpc/include/asm/bitops.h
@@ -308,20 +308,6 @@ unsigned long find_next_le_bit(const unsigned long *addr,
#define ext2_clear_bit_atomic(lock, nr, addr) \
test_and_clear_le_bit((nr), (unsigned long*)addr)
-/* Bitmap functions for the minix filesystem. */
-
-#define minix_test_and_set_bit(nr,addr) \
- __test_and_set_le_bit(nr, (unsigned long *)addr)
-#define minix_set_bit(nr,addr) \
- __set_le_bit(nr, (unsigned long *)addr)
-#define minix_test_and_clear_bit(nr,addr) \
- __test_and_clear_le_bit(nr, (unsigned long *)addr)
-#define minix_test_bit(nr,addr) \
- test_le_bit(nr, (unsigned long *)addr)
-
-#define minix_find_first_zero_bit(addr,size) \
- find_first_zero_le_bit((unsigned long *)addr, size)
-
#include <asm-generic/bitops/sched.h>
#endif /* __KERNEL__ */
diff --git a/arch/s390/include/asm/bitops.h b/arch/s390/include/asm/bitops.h
index 1bd1e11..e537613 100644
--- a/arch/s390/include/asm/bitops.h
+++ b/arch/s390/include/asm/bitops.h
@@ -842,7 +842,6 @@ static inline int find_next_le_bit(void *vaddr, unsigned long size,
#define ext2_clear_bit_atomic(lock, nr, addr) \
test_and_clear_le_bit((nr), (unsigned long *)(addr))
-#include <asm-generic/bitops/minix.h>
#endif /* __KERNEL__ */
diff --git a/arch/sh/include/asm/bitops.h b/arch/sh/include/asm/bitops.h
index fc5cd5b..90fa3e4 100644
--- a/arch/sh/include/asm/bitops.h
+++ b/arch/sh/include/asm/bitops.h
@@ -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>
diff --git a/arch/sparc/include/asm/bitops_32.h b/arch/sparc/include/asm/bitops_32.h
index 75da6f8..25a6766 100644
--- a/arch/sparc/include/asm/bitops_32.h
+++ b/arch/sparc/include/asm/bitops_32.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__ */
diff --git a/arch/sparc/include/asm/bitops_64.h b/arch/sparc/include/asm/bitops_64.h
index 66db28e..38e9aa1 100644
--- a/arch/sparc/include/asm/bitops_64.h
+++ b/arch/sparc/include/asm/bitops_64.h
@@ -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) */
diff --git a/arch/tile/include/asm/bitops.h b/arch/tile/include/asm/bitops.h
index 5447add..132e6bb 100644
--- a/arch/tile/include/asm/bitops.h
+++ b/arch/tile/include/asm/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 */
diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h
index 3c95e07..69d5813 100644
--- a/arch/x86/include/asm/bitops.h
+++ b/arch/x86/include/asm/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 */
diff --git a/arch/xtensa/include/asm/bitops.h b/arch/xtensa/include/asm/bitops.h
index a56b7b5..c8fac8d 100644
--- a/arch/xtensa/include/asm/bitops.h
+++ b/arch/xtensa/include/asm/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__ */
diff --git a/fs/minix/Kconfig b/fs/minix/Kconfig
index 0fd7ca9..6624684 100644
--- a/fs/minix/Kconfig
+++ b/fs/minix/Kconfig
@@ -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
diff --git a/fs/minix/minix.h b/fs/minix/minix.h
index 407b1c8..9dfd62c 100644
--- a/fs/minix/minix.h
+++ b/fs/minix/minix.h
@@ -88,4 +88,83 @@ 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(nr, addr) \
+ __test_and_set_le_bit((nr), (unsigned long *)(addr))
+#define minix_set_bit(nr, addr) \
+ __set_le_bit((nr), (unsigned long *)(addr))
+#define minix_test_and_clear_bit(nr, addr) \
+ __test_and_clear_le_bit((nr), (unsigned long *)(addr))
+#define minix_test_bit(nr, addr) \
+ test_le_bit((nr), (unsigned long *)(addr))
+#define minix_find_first_zero_bit(addr, size) \
+ find_first_zero_le_bit((unsigned long *)(addr), (size))
+
+#endif
+
#endif /* FS_MINIX_H */
diff --git a/include/asm-generic/bitops.h b/include/asm-generic/bitops.h
index dd7c014..280ca7a 100644
--- a/include/asm-generic/bitops.h
+++ b/include/asm-generic/bitops.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 */
diff --git a/include/asm-generic/bitops/minix-le.h b/include/asm-generic/bitops/minix-le.h
deleted file mode 100644
index f366cfa..0000000
--- a/include/asm-generic/bitops/minix-le.h
+++ /dev/null
@@ -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_le_bit((nr), (unsigned long *)(addr))
-#define minix_set_bit(nr,addr) \
- __set_le_bit((nr), (unsigned long *)(addr))
-#define minix_test_and_clear_bit(nr,addr) \
- __test_and_clear_le_bit((nr), (unsigned long *)(addr))
-#define minix_test_bit(nr,addr) \
- test_le_bit((nr), (unsigned long *)(addr))
-#define minix_find_first_zero_bit(addr,size) \
- find_first_zero_le_bit((unsigned long *)(addr), (size))
-
-#endif /* _ASM_GENERIC_BITOPS_MINIX_LE_H_ */
diff --git a/include/asm-generic/bitops/minix.h b/include/asm-generic/bitops/minix.h
deleted file mode 100644
index 91f42e8..0000000
--- a/include/asm-generic/bitops/minix.h
+++ /dev/null
@@ -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_ */
--
1.7.1.231.gd0b16
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 03/22] s390: introduce little-endian bitops
2010-10-21 14:40 ` [PATCH v2 03/22] s390: introduce little-endian bitops Akinobu Mita
@ 2010-10-21 15:08 ` Arnd Bergmann
0 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2010-10-21 15:08 UTC (permalink / raw)
To: Akinobu Mita
Cc: linux-kernel, linux-arch, Christoph Hellwig, Andrew Morton,
Martin Schwidefsky, Heiko Carstens, linux390, linux-s390
On Thursday 21 October 2010, Akinobu Mita wrote:
> Introduce little-endian bit operations by renaming native ext2 bit
> operations. The ext2 bit operations are kept as wrapper macros using
> little-endian bit operations to maintain bisectability until the
> conversions are finished.
>
> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
> Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
> Cc: linux390@de.ibm.com
> Cc: linux-s390@vger.kernel.org
Acked-by: Arnd Bergmann <arnd@arndb.de>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h
2010-10-21 14:41 ` [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h Akinobu Mita
@ 2010-10-21 15:10 ` Arnd Bergmann
2010-10-21 23:19 ` Michal Simek
2010-10-22 5:40 ` Greg Ungerer
2 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2010-10-21 15:10 UTC (permalink / raw)
To: Akinobu Mita
Cc: linux-kernel, linux-arch, Christoph Hellwig, Andrew Morton,
Greg Ungerer, Geert Uytterhoeven, Roman Zippel, Andreas Schwab,
linux-m68k, Martin Schwidefsky, Heiko Carstens, linux390,
linux-s390, Yoshinori Sato, Michal Simek, microblaze-uclinux,
David S. Miller, sparclinux, Hirokazu Takata, linux-m32r,
Ralf Baechle
On Thursday 21 October 2010, Akinobu Mita wrote:
> minix bit operations are only used by minix filesystem and useless
> by other modules. Because byte order of inode and block bitmaps is
> defferent 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 file system, 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>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h
2010-10-21 14:41 ` [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h Akinobu Mita
2010-10-21 15:10 ` Arnd Bergmann
@ 2010-10-21 23:19 ` Michal Simek
2010-10-22 7:55 ` Akinobu Mita
2010-10-22 5:40 ` Greg Ungerer
2 siblings, 1 reply; 7+ messages in thread
From: Michal Simek @ 2010-10-21 23:19 UTC (permalink / raw)
To: Akinobu Mita
Cc: linux-kernel, linux-arch, Arnd Bergmann, Christoph Hellwig,
Andrew Morton, Greg Ungerer, Geert Uytterhoeven, Roman Zippel,
Andreas Schwab, linux-m68k, Martin Schwidefsky, Heiko Carstens,
linux390, linux-s390, Yoshinori Sato, microblaze-uclinux,
David S. Miller, sparclinux, Hirokazu Takata, linux-m32r,
Ralf Baechle, linux-mips, Paul Mundt, linux-sh, Chris Zankel
Akinobu Mita wrote:
> minix bit operations are only used by minix filesystem and useless
> by other modules. Because byte order of inode and block bitmaps is
> defferent on each architecture like below:
>
> m68k:
> big-endian 16bit indexed bitmaps
>
> h8300, microblaze, s390, sparc, m68knommu:
> big-endian 32 or 64bit indexed bitmaps
Just one small fix microblaze little endian support is ready for merging
to mainline which means that microblaze is
big-endian 32bit and little-endian 32bit
>
> 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 file system, 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.
I haven't created any Kconfig option for little/big endian microblaze
but there should be a little bit different handling for MINIX_FS_NATIVE_ENDIAN
as you are describing above.
Anyway I think you don't need to reflect this in your patch because
we are not using that filesystem and I will write it to my to-do list and
will fix it later.
Thanks,
Michal
--
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h
2010-10-21 14:41 ` [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h Akinobu Mita
2010-10-21 15:10 ` Arnd Bergmann
2010-10-21 23:19 ` Michal Simek
@ 2010-10-22 5:40 ` Greg Ungerer
2 siblings, 0 replies; 7+ messages in thread
From: Greg Ungerer @ 2010-10-22 5:40 UTC (permalink / raw)
To: Akinobu Mita
Cc: linux-kernel, linux-arch, Arnd Bergmann, Christoph Hellwig,
Andrew Morton, Greg Ungerer, Geert Uytterhoeven, Roman Zippel,
Andreas Schwab, linux-m68k, Martin Schwidefsky, Heiko Carstens,
linux390, linux-s390, Yoshinori Sato, Michal Simek,
microblaze-uclinux, David S. Miller, sparclinux, Hirokazu Takata,
linux-m32r, Ralf Baechle, linux-mips, Paul Mundt, linux-sh
On 22/10/10 00:41, Akinobu Mita wrote:
> minix bit operations are only used by minix filesystem and useless
> by other modules. Because byte order of inode and block bitmaps is
> defferent 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 file system, 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>
> Cc: Greg Ungerer<gerg@uclinux.org>
I have no problems with the m68k part.
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: linux-m68k@lists.linux-m68k.org
> Cc: Martin Schwidefsky<schwidefsky@de.ibm.com>
> Cc: Heiko Carstens<heiko.carstens@de.ibm.com>
> Cc: linux390@de.ibm.com
> Cc: linux-s390@vger.kernel.org
> Cc: Yoshinori Sato<ysato@users.sourceforge.jp>
> Cc: Michal Simek<monstr@monstr.eu>
> Cc: microblaze-uclinux@itee.uq.edu.au
> Cc: "David S. Miller"<davem@davemloft.net>
> Cc: sparclinux@vger.kernel.org
> Cc: Hirokazu Takata<takata@linux-m32r.org>
> Cc: linux-m32r@ml.linux-m32r.org
> Cc: Ralf Baechle<ralf@linux-mips.org>
> Cc: linux-mips@linux-mips.org
> Cc: Paul Mundt<lethal@linux-sh.org>
> Cc: linux-sh@vger.kernel.org
> Cc: Chris Zankel<chris@zankel.net>
> ---
> Mostly rewritten since previous submission
>
> arch/alpha/include/asm/bitops.h | 2 -
> arch/arm/include/asm/bitops.h | 14 ------
> arch/avr32/include/asm/bitops.h | 1 -
> arch/blackfin/include/asm/bitops.h | 1 -
> arch/cris/include/asm/bitops.h | 1 -
> arch/frv/include/asm/bitops.h | 2 -
> arch/h8300/include/asm/bitops.h | 1 -
> arch/ia64/include/asm/bitops.h | 1 -
> arch/m32r/include/asm/bitops.h | 1 -
> arch/m68k/include/asm/bitops_mm.h | 30 ------------
> arch/mips/include/asm/bitops.h | 1 -
> arch/mn10300/include/asm/bitops.h | 1 -
> arch/parisc/include/asm/bitops.h | 2 -
> arch/powerpc/include/asm/bitops.h | 14 ------
> arch/s390/include/asm/bitops.h | 1 -
> arch/sh/include/asm/bitops.h | 1 -
> arch/sparc/include/asm/bitops_32.h | 1 -
> arch/sparc/include/asm/bitops_64.h | 2 -
> arch/tile/include/asm/bitops.h | 1 -
> arch/x86/include/asm/bitops.h | 2 -
> arch/xtensa/include/asm/bitops.h | 1 -
> fs/minix/Kconfig | 8 +++
> fs/minix/minix.h | 79 +++++++++++++++++++++++++++++++++
> include/asm-generic/bitops.h | 1 -
> include/asm-generic/bitops/minix-le.h | 15 ------
> include/asm-generic/bitops/minix.h | 15 ------
> 26 files changed, 87 insertions(+), 112 deletions(-)
> delete mode 100644 include/asm-generic/bitops/minix-le.h
> delete mode 100644 include/asm-generic/bitops/minix.h
>
> diff --git a/arch/alpha/include/asm/bitops.h b/arch/alpha/include/asm/bitops.h
> index 822433a..85b8152 100644
> --- a/arch/alpha/include/asm/bitops.h
> +++ b/arch/alpha/include/asm/bitops.h
> @@ -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 */
> diff --git a/arch/arm/include/asm/bitops.h b/arch/arm/include/asm/bitops.h
> index ac2edb4..59a2a2b 100644
> --- a/arch/arm/include/asm/bitops.h
> +++ b/arch/arm/include/asm/bitops.h
> @@ -332,20 +332,6 @@ static inline int fls(int x)
> #define ext2_clear_bit_atomic(lock,nr,p) \
> test_and_clear_le_bit(nr, (unsigned long *)(p))
>
> -/*
> - * Minix is defined to use little-endian byte ordering.
> - * These do not need to be atomic.
> - */
> -#define minix_set_bit(nr,p) \
> - __set_le_bit(nr, (unsigned long *)(p))
> -#define minix_test_bit(nr,p) \
> - test_le_bit(nr, (unsigned long *)(p))
> -#define minix_test_and_set_bit(nr,p) \
> - __test_and_set_le_bit(nr, (unsigned long *)(p))
> -#define minix_test_and_clear_bit(nr,p) \
> - __test_and_clear_le_bit(nr, (unsigned long *)(p))
> -#define minix_find_first_zero_bit(p,sz) \
> - find_first_zero_le_bit((unsigned long *)(p), sz)
>
> #endif /* __KERNEL__ */
>
> diff --git a/arch/avr32/include/asm/bitops.h b/arch/avr32/include/asm/bitops.h
> index 73a163a..72444d9 100644
> --- a/arch/avr32/include/asm/bitops.h
> +++ b/arch/avr32/include/asm/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 */
> diff --git a/arch/blackfin/include/asm/bitops.h b/arch/blackfin/include/asm/bitops.h
> index 2c549f7..68843fa 100644
> --- a/arch/blackfin/include/asm/bitops.h
> +++ b/arch/blackfin/include/asm/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>
> diff --git a/arch/cris/include/asm/bitops.h b/arch/cris/include/asm/bitops.h
> index 71bea40..310e0de 100644
> --- a/arch/cris/include/asm/bitops.h
> +++ b/arch/cris/include/asm/bitops.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__ */
> diff --git a/arch/frv/include/asm/bitops.h b/arch/frv/include/asm/bitops.h
> index e3ea644..a1d00b0 100644
> --- a/arch/frv/include/asm/bitops.h
> +++ b/arch/frv/include/asm/bitops.h
> @@ -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 */
> diff --git a/arch/h8300/include/asm/bitops.h b/arch/h8300/include/asm/bitops.h
> index 23cea66..e856c1b 100644
> --- a/arch/h8300/include/asm/bitops.h
> +++ b/arch/h8300/include/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__ */
>
> diff --git a/arch/ia64/include/asm/bitops.h b/arch/ia64/include/asm/bitops.h
> index 336984a..b76f7e0 100644
> --- a/arch/ia64/include/asm/bitops.h
> +++ b/arch/ia64/include/asm/bitops.h
> @@ -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__ */
> diff --git a/arch/m32r/include/asm/bitops.h b/arch/m32r/include/asm/bitops.h
> index cdfb4c8..6300f22 100644
> --- a/arch/m32r/include/asm/bitops.h
> +++ b/arch/m32r/include/asm/bitops.h
> @@ -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__ */
>
> diff --git a/arch/m68k/include/asm/bitops_mm.h b/arch/m68k/include/asm/bitops_mm.h
> index f31ed5a..5f06275 100644
> --- a/arch/m68k/include/asm/bitops_mm.h
> +++ b/arch/m68k/include/asm/bitops_mm.h
> @@ -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 little endian. */
>
> #define __set_le_bit(nr, addr) \
> diff --git a/arch/mips/include/asm/bitops.h b/arch/mips/include/asm/bitops.h
> index 07ce5aa..6a2202c 100644
> --- a/arch/mips/include/asm/bitops.h
> +++ b/arch/mips/include/asm/bitops.h
> @@ -706,7 +706,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__ */
>
> diff --git a/arch/mn10300/include/asm/bitops.h b/arch/mn10300/include/asm/bitops.h
> index e1a9768..94ee844 100644
> --- a/arch/mn10300/include/asm/bitops.h
> +++ b/arch/mn10300/include/asm/bitops.h
> @@ -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 */
> diff --git a/arch/parisc/include/asm/bitops.h b/arch/parisc/include/asm/bitops.h
> index 919d7ed..43c516f 100644
> --- a/arch/parisc/include/asm/bitops.h
> +++ b/arch/parisc/include/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 */
> diff --git a/arch/powerpc/include/asm/bitops.h b/arch/powerpc/include/asm/bitops.h
> index eb9ce7f..bf5ccfc 100644
> --- a/arch/powerpc/include/asm/bitops.h
> +++ b/arch/powerpc/include/asm/bitops.h
> @@ -308,20 +308,6 @@ unsigned long find_next_le_bit(const unsigned long *addr,
> #define ext2_clear_bit_atomic(lock, nr, addr) \
> test_and_clear_le_bit((nr), (unsigned long*)addr)
>
> -/* Bitmap functions for the minix filesystem. */
> -
> -#define minix_test_and_set_bit(nr,addr) \
> - __test_and_set_le_bit(nr, (unsigned long *)addr)
> -#define minix_set_bit(nr,addr) \
> - __set_le_bit(nr, (unsigned long *)addr)
> -#define minix_test_and_clear_bit(nr,addr) \
> - __test_and_clear_le_bit(nr, (unsigned long *)addr)
> -#define minix_test_bit(nr,addr) \
> - test_le_bit(nr, (unsigned long *)addr)
> -
> -#define minix_find_first_zero_bit(addr,size) \
> - find_first_zero_le_bit((unsigned long *)addr, size)
> -
> #include<asm-generic/bitops/sched.h>
>
> #endif /* __KERNEL__ */
> diff --git a/arch/s390/include/asm/bitops.h b/arch/s390/include/asm/bitops.h
> index 1bd1e11..e537613 100644
> --- a/arch/s390/include/asm/bitops.h
> +++ b/arch/s390/include/asm/bitops.h
> @@ -842,7 +842,6 @@ static inline int find_next_le_bit(void *vaddr, unsigned long size,
> #define ext2_clear_bit_atomic(lock, nr, addr) \
> test_and_clear_le_bit((nr), (unsigned long *)(addr))
>
> -#include<asm-generic/bitops/minix.h>
>
> #endif /* __KERNEL__ */
>
> diff --git a/arch/sh/include/asm/bitops.h b/arch/sh/include/asm/bitops.h
> index fc5cd5b..90fa3e4 100644
> --- a/arch/sh/include/asm/bitops.h
> +++ b/arch/sh/include/asm/bitops.h
> @@ -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>
> diff --git a/arch/sparc/include/asm/bitops_32.h b/arch/sparc/include/asm/bitops_32.h
> index 75da6f8..25a6766 100644
> --- a/arch/sparc/include/asm/bitops_32.h
> +++ b/arch/sparc/include/asm/bitops_32.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__ */
>
> diff --git a/arch/sparc/include/asm/bitops_64.h b/arch/sparc/include/asm/bitops_64.h
> index 66db28e..38e9aa1 100644
> --- a/arch/sparc/include/asm/bitops_64.h
> +++ b/arch/sparc/include/asm/bitops_64.h
> @@ -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) */
> diff --git a/arch/tile/include/asm/bitops.h b/arch/tile/include/asm/bitops.h
> index 5447add..132e6bb 100644
> --- a/arch/tile/include/asm/bitops.h
> +++ b/arch/tile/include/asm/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 */
> diff --git a/arch/x86/include/asm/bitops.h b/arch/x86/include/asm/bitops.h
> index 3c95e07..69d5813 100644
> --- a/arch/x86/include/asm/bitops.h
> +++ b/arch/x86/include/asm/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 */
> diff --git a/arch/xtensa/include/asm/bitops.h b/arch/xtensa/include/asm/bitops.h
> index a56b7b5..c8fac8d 100644
> --- a/arch/xtensa/include/asm/bitops.h
> +++ b/arch/xtensa/include/asm/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__ */
>
> diff --git a/fs/minix/Kconfig b/fs/minix/Kconfig
> index 0fd7ca9..6624684 100644
> --- a/fs/minix/Kconfig
> +++ b/fs/minix/Kconfig
> @@ -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
> diff --git a/fs/minix/minix.h b/fs/minix/minix.h
> index 407b1c8..9dfd62c 100644
> --- a/fs/minix/minix.h
> +++ b/fs/minix/minix.h
> @@ -88,4 +88,83 @@ 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(nr, addr) \
> + __test_and_set_le_bit((nr), (unsigned long *)(addr))
> +#define minix_set_bit(nr, addr) \
> + __set_le_bit((nr), (unsigned long *)(addr))
> +#define minix_test_and_clear_bit(nr, addr) \
> + __test_and_clear_le_bit((nr), (unsigned long *)(addr))
> +#define minix_test_bit(nr, addr) \
> + test_le_bit((nr), (unsigned long *)(addr))
> +#define minix_find_first_zero_bit(addr, size) \
> + find_first_zero_le_bit((unsigned long *)(addr), (size))
> +
> +#endif
> +
> #endif /* FS_MINIX_H */
> diff --git a/include/asm-generic/bitops.h b/include/asm-generic/bitops.h
> index dd7c014..280ca7a 100644
> --- a/include/asm-generic/bitops.h
> +++ b/include/asm-generic/bitops.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 */
> diff --git a/include/asm-generic/bitops/minix-le.h b/include/asm-generic/bitops/minix-le.h
> deleted file mode 100644
> index f366cfa..0000000
> --- a/include/asm-generic/bitops/minix-le.h
> +++ /dev/null
> @@ -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_le_bit((nr), (unsigned long *)(addr))
> -#define minix_set_bit(nr,addr) \
> - __set_le_bit((nr), (unsigned long *)(addr))
> -#define minix_test_and_clear_bit(nr,addr) \
> - __test_and_clear_le_bit((nr), (unsigned long *)(addr))
> -#define minix_test_bit(nr,addr) \
> - test_le_bit((nr), (unsigned long *)(addr))
> -#define minix_find_first_zero_bit(addr,size) \
> - find_first_zero_le_bit((unsigned long *)(addr), (size))
> -
> -#endif /* _ASM_GENERIC_BITOPS_MINIX_LE_H_ */
> diff --git a/include/asm-generic/bitops/minix.h b/include/asm-generic/bitops/minix.h
> deleted file mode 100644
> index 91f42e8..0000000
> --- a/include/asm-generic/bitops/minix.h
> +++ /dev/null
> @@ -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_ */
--
------------------------------------------------------------------------
Greg Ungerer -- Principal Engineer EMAIL: gerg@snapgear.com
SnapGear Group, McAfee PHONE: +61 7 3435 2888
8 Gardner Close FAX: +61 7 3217 5323
Milton, QLD, 4064, Australia WEB: http://www.SnapGear.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h
2010-10-21 23:19 ` Michal Simek
@ 2010-10-22 7:55 ` Akinobu Mita
0 siblings, 0 replies; 7+ messages in thread
From: Akinobu Mita @ 2010-10-22 7:55 UTC (permalink / raw)
To: monstr
Cc: linux-kernel, linux-arch, Arnd Bergmann, Christoph Hellwig,
Andrew Morton, Greg Ungerer, Geert Uytterhoeven, Roman Zippel,
Andreas Schwab, linux-m68k, Martin Schwidefsky, Heiko Carstens,
linux390, linux-s390, Yoshinori Sato, microblaze-uclinux,
David S. Miller, sparclinux, Hirokazu Takata, linux-m32r,
Ralf Baechle, linux-mips, Paul Mundt, linux-sh, Chris Zankel
2010/10/22 Michal Simek <monstr@monstr.eu>:
> Akinobu Mita wrote:
>> minix bit operations are only used by minix filesystem and useless
>> by other modules. Because byte order of inode and block bitmaps is
>> defferent on each architecture like below:
>>
>> m68k:
>> big-endian 16bit indexed bitmaps
>>
>> h8300, microblaze, s390, sparc, m68knommu:
>> big-endian 32 or 64bit indexed bitmaps
>
> Just one small fix microblaze little endian support is ready for merging
> to mainline which means that microblaze is
> big-endian 32bit and little-endian 32bit
>
>>
>> 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 file system, 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.
>
> I haven't created any Kconfig option for little/big endian microblaze
> but there should be a little bit different handling for MINIX_FS_NATIVE_ENDIAN
> as you are describing above.
> Anyway I think you don't need to reflect this in your patch because
> we are not using that filesystem and I will write it to my to-do list and
> will fix it later.
If upcomming microblade little-endian mode will use little-endian
bitmaps for minixfs, microblade can continue to select
CONFIG_MINIX_FS_NATIVE_ENDIAN and you don't need to change it.
But if it will use big-endian bitmaps, it may need some extra work
to support it. Becuase there is no little-endian architecture
which uses bit-endian bitmaps for minixfs.
--
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-10-22 7:55 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1287672077-5797-1-git-send-email-akinobu.mita@gmail.com>
[not found] ` <20101021144058.QEfMhOh7svsODcdx4tOLVi0C4h2HCh7FKc1ZTp__VTg@z>
2010-10-21 14:40 ` [PATCH v2 03/22] s390: introduce little-endian bitops Akinobu Mita
2010-10-21 15:08 ` Arnd Bergmann
[not found] ` <20101021144117.7U1Ll_n2efR3tVADo01ivvtZgqY1QUc-ACObmTqhIkE@z>
2010-10-21 14:41 ` [PATCH v2 22/22] bitops: remove minix bitops from asm/bitops.h Akinobu Mita
2010-10-21 15:10 ` Arnd Bergmann
2010-10-21 23:19 ` Michal Simek
2010-10-22 7:55 ` Akinobu Mita
2010-10-22 5:40 ` Greg Ungerer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).