Commit 0664996b authored by Akinobu Mita's avatar Akinobu Mita Committed by Linus Torvalds

bitops: introduce CONFIG_GENERIC_FIND_BIT_LE

This introduces CONFIG_GENERIC_FIND_BIT_LE to tell whether to use generic
implementation of find_*_bit_le() in lib/find_next_bit.c or not.

For now we select CONFIG_GENERIC_FIND_BIT_LE for all architectures which
enable CONFIG_GENERIC_FIND_NEXT_BIT.

But m68knommu wants to define own faster find_next_zero_bit_le() and
continues using generic find_next_{,zero_}bit().
(CONFIG_GENERIC_FIND_NEXT_BIT and !CONFIG_GENERIC_FIND_BIT_LE)
Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
Cc: Greg Ungerer <gerg@uclinux.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 3f5527fe
...@@ -22,6 +22,10 @@ config GENERIC_FIND_NEXT_BIT ...@@ -22,6 +22,10 @@ config GENERIC_FIND_NEXT_BIT
bool bool
default y default y
config GENERIC_FIND_BIT_LE
bool
default y
config GENERIC_HWEIGHT config GENERIC_HWEIGHT
bool bool
default y default y
......
...@@ -45,6 +45,10 @@ config GENERIC_FIND_NEXT_BIT ...@@ -45,6 +45,10 @@ config GENERIC_FIND_NEXT_BIT
bool bool
default y default y
config GENERIC_FIND_BIT_LE
bool
default y
config GENERIC_HWEIGHT config GENERIC_HWEIGHT
bool bool
default y default y
......
...@@ -260,6 +260,10 @@ config GENERIC_FIND_NEXT_BIT ...@@ -260,6 +260,10 @@ config GENERIC_FIND_NEXT_BIT
bool bool
default y default y
config GENERIC_FIND_BIT_LE
bool
default y
config GENERIC_HWEIGHT config GENERIC_HWEIGHT
bool bool
default y default y
......
...@@ -42,6 +42,10 @@ config GENERIC_FIND_NEXT_BIT ...@@ -42,6 +42,10 @@ config GENERIC_FIND_NEXT_BIT
bool bool
default y default y
config GENERIC_FIND_BIT_LE
bool
default y
config GENERIC_GPIO config GENERIC_GPIO
bool bool
default n default n
......
...@@ -37,6 +37,9 @@ config ARCH_HAS_ILOG2_U64 ...@@ -37,6 +37,9 @@ config ARCH_HAS_ILOG2_U64
config GENERIC_FIND_NEXT_BIT config GENERIC_FIND_NEXT_BIT
def_bool y def_bool y
config GENERIC_FIND_BIT_LE
def_bool y
config GENERIC_HWEIGHT config GENERIC_HWEIGHT
def_bool y def_bool y
......
...@@ -777,6 +777,10 @@ config GENERIC_FIND_NEXT_BIT ...@@ -777,6 +777,10 @@ config GENERIC_FIND_NEXT_BIT
bool bool
default y default y
config GENERIC_FIND_BIT_LE
bool
default y
config GENERIC_HWEIGHT config GENERIC_HWEIGHT
bool bool
default y default y
......
...@@ -52,6 +52,10 @@ config GENERIC_FIND_NEXT_BIT ...@@ -52,6 +52,10 @@ config GENERIC_FIND_NEXT_BIT
bool bool
default y default y
config GENERIC_FIND_BIT_LE
bool
default y
config GENERIC_BUG config GENERIC_BUG
bool bool
default y default y
......
...@@ -95,6 +95,10 @@ config GENERIC_FIND_NEXT_BIT ...@@ -95,6 +95,10 @@ config GENERIC_FIND_NEXT_BIT
bool bool
default y default y
config GENERIC_FIND_BIT_LE
bool
default y
config GENERIC_GPIO config GENERIC_GPIO
bool bool
help help
......
...@@ -75,6 +75,9 @@ config GENERIC_CSUM ...@@ -75,6 +75,9 @@ config GENERIC_CSUM
config GENERIC_FIND_NEXT_BIT config GENERIC_FIND_NEXT_BIT
def_bool y def_bool y
config GENERIC_FIND_BIT_LE
def_bool y
config GENERIC_HWEIGHT config GENERIC_HWEIGHT
def_bool y def_bool y
......
...@@ -192,6 +192,10 @@ config GENERIC_FIND_NEXT_BIT ...@@ -192,6 +192,10 @@ config GENERIC_FIND_NEXT_BIT
bool bool
default y default y
config GENERIC_FIND_BIT_LE
bool
default y
config GENERIC_HWEIGHT config GENERIC_HWEIGHT
bool bool
default y if !ULTRA_HAS_POPULATION_COUNT default y if !ULTRA_HAS_POPULATION_COUNT
......
...@@ -21,6 +21,9 @@ config RWSEM_XCHGADD_ALGORITHM ...@@ -21,6 +21,9 @@ config RWSEM_XCHGADD_ALGORITHM
config GENERIC_FIND_NEXT_BIT config GENERIC_FIND_NEXT_BIT
def_bool y def_bool y
config GENERIC_FIND_BIT_LE
def_bool y
config GENERIC_HWEIGHT config GENERIC_HWEIGHT
def_bool y def_bool y
......
...@@ -22,6 +22,9 @@ config GENERIC_FIND_FIRST_BIT ...@@ -22,6 +22,9 @@ config GENERIC_FIND_FIRST_BIT
config GENERIC_FIND_NEXT_BIT config GENERIC_FIND_NEXT_BIT
bool bool
config GENERIC_FIND_BIT_LE
bool
config GENERIC_FIND_LAST_BIT config GENERIC_FIND_LAST_BIT
bool bool
default y default y
......
...@@ -40,6 +40,7 @@ lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o ...@@ -40,6 +40,7 @@ lib-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o lib-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
lib-$(CONFIG_GENERIC_FIND_FIRST_BIT) += find_next_bit.o lib-$(CONFIG_GENERIC_FIND_FIRST_BIT) += find_next_bit.o
lib-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o lib-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o
lib-$(CONFIG_GENERIC_FIND_BIT_LE) += find_next_bit.o
obj-$(CONFIG_GENERIC_FIND_LAST_BIT) += find_last_bit.o obj-$(CONFIG_GENERIC_FIND_LAST_BIT) += find_last_bit.o
CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS)) CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS))
......
...@@ -160,6 +160,7 @@ EXPORT_SYMBOL(find_first_zero_bit); ...@@ -160,6 +160,7 @@ EXPORT_SYMBOL(find_first_zero_bit);
#endif /* CONFIG_GENERIC_FIND_FIRST_BIT */ #endif /* CONFIG_GENERIC_FIND_FIRST_BIT */
#ifdef __BIG_ENDIAN #ifdef __BIG_ENDIAN
#ifdef CONFIG_GENERIC_FIND_BIT_LE
/* include/linux/byteorder does not support "unsigned long" type */ /* include/linux/byteorder does not support "unsigned long" type */
static inline unsigned long ext2_swabp(const unsigned long * x) static inline unsigned long ext2_swabp(const unsigned long * x)
...@@ -273,4 +274,6 @@ unsigned long find_next_bit_le(const void *addr, unsigned ...@@ -273,4 +274,6 @@ unsigned long find_next_bit_le(const void *addr, unsigned
return result + __ffs(ext2_swab(tmp)); return result + __ffs(ext2_swab(tmp));
} }
EXPORT_SYMBOL(find_next_bit_le); EXPORT_SYMBOL(find_next_bit_le);
#endif /* CONFIG_GENERIC_FIND_BIT_LE */
#endif /* __BIG_ENDIAN */ #endif /* __BIG_ENDIAN */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment