The patch titled Implement __fls on all 64-bit archs has been added to the -mm tree. Its filename is implement-__fls-on-all-64-bit-archs.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: Implement __fls on all 64-bit archs From: Alexander van Heukelum <heukelum@xxxxxxxxxxxxx> Implement __fls on all 64-bit archs: alpha has an implementation of fls64. Added __fls(x) = fls64(x) - 1. ia64 has fls, but not __fls. Added __fls based on code of fls. mips and powerpc have __ilog2, which is the same as __fls. Added __fls = __ilog2. parisc, s390, sh and sparc64: Include generic __fls. x86_64 already has __fls. Signed-off-by: Alexander van Heukelum <heukelum@xxxxxxxxxxx> Cc: Richard Henderson <rth@xxxxxxxxxxx> Cc: Ivan Kokshaysky <ink@xxxxxxxxxxxxxxxxxxxx> Cc: "Luck, Tony" <tony.luck@xxxxxxxxx> Cc: Ralf Baechle <ralf@xxxxxxxxxxxxxx> Cc: Kyle McMartin <kyle@xxxxxxxxxxx> Cc: Grant Grundler <grundler@xxxxxxxxxxxxxxxx> Cc: Matthew Wilcox <matthew@xxxxxx> Cc: Paul Mackerras <paulus@xxxxxxxxx> Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> Cc: Heiko Carstens <heiko.carstens@xxxxxxxxxx> Cc: Martin Schwidefsky <schwidefsky@xxxxxxxxxx> Cc: Paul Mundt <lethal@xxxxxxxxxxxx> Cc: "David S. Miller" <davem@xxxxxxxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/asm-alpha/bitops.h | 5 +++++ include/asm-ia64/bitops.h | 16 ++++++++++++++++ include/asm-mips/bitops.h | 5 +++++ include/asm-parisc/bitops.h | 1 + include/asm-powerpc/bitops.h | 5 +++++ include/asm-s390/bitops.h | 1 + include/asm-sh/bitops.h | 1 + include/asm-sparc64/bitops.h | 1 + 8 files changed, 35 insertions(+) diff -puN include/asm-alpha/bitops.h~implement-__fls-on-all-64-bit-archs include/asm-alpha/bitops.h --- a/include/asm-alpha/bitops.h~implement-__fls-on-all-64-bit-archs +++ a/include/asm-alpha/bitops.h @@ -388,6 +388,11 @@ static inline int fls64(unsigned long x) } #endif +static inline unsigned long __fls(unsigned long x) +{ + return fls64(x) - 1; +} + static inline int fls(int x) { return fls64((unsigned int) x); diff -puN include/asm-ia64/bitops.h~implement-__fls-on-all-64-bit-archs include/asm-ia64/bitops.h --- a/include/asm-ia64/bitops.h~implement-__fls-on-all-64-bit-archs +++ a/include/asm-ia64/bitops.h @@ -407,6 +407,22 @@ fls (int t) return ia64_popcnt(x); } +/* + * Find the last (most significant) bit set. Undefined for x==0. + * Bits are numbered from 0..63 (e.g., __fls(9) == 3). + */ +static inline unsigned long +__fls (unsigned long x) +{ + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + x |= x >> 32; + return ia64_popcnt(x) - 1; +} + #include <asm-generic/bitops/fls64.h> /* diff -puN include/asm-mips/bitops.h~implement-__fls-on-all-64-bit-archs include/asm-mips/bitops.h --- a/include/asm-mips/bitops.h~implement-__fls-on-all-64-bit-archs +++ a/include/asm-mips/bitops.h @@ -591,6 +591,11 @@ static inline int __ilog2(unsigned long return 63 - lz; } +static inline unsigned long __fls(unsigned long x) +{ + return __ilog2(x); +} + #if defined(CONFIG_CPU_MIPS32) || defined(CONFIG_CPU_MIPS64) /* diff -puN include/asm-parisc/bitops.h~implement-__fls-on-all-64-bit-archs include/asm-parisc/bitops.h --- a/include/asm-parisc/bitops.h~implement-__fls-on-all-64-bit-archs +++ a/include/asm-parisc/bitops.h @@ -210,6 +210,7 @@ static __inline__ int fls(int x) return ret; } +#include <asm-generic/bitops/__fls.h> #include <asm-generic/bitops/fls64.h> #include <asm-generic/bitops/hweight.h> #include <asm-generic/bitops/lock.h> diff -puN include/asm-powerpc/bitops.h~implement-__fls-on-all-64-bit-archs include/asm-powerpc/bitops.h --- a/include/asm-powerpc/bitops.h~implement-__fls-on-all-64-bit-archs +++ a/include/asm-powerpc/bitops.h @@ -312,6 +312,11 @@ static __inline__ int fls(unsigned int x asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x)); return 32 - lz; } + +static __inline__ unsigned long __fls(unsigned long x) +{ + return __ilog2(x); +} #include <asm-generic/bitops/fls64.h> #include <asm-generic/bitops/hweight.h> diff -puN include/asm-s390/bitops.h~implement-__fls-on-all-64-bit-archs include/asm-s390/bitops.h --- a/include/asm-s390/bitops.h~implement-__fls-on-all-64-bit-archs +++ a/include/asm-s390/bitops.h @@ -769,6 +769,7 @@ static inline int sched_find_first_bit(u } #include <asm-generic/bitops/fls.h> +#include <asm-generic/bitops/__fls.h> #include <asm-generic/bitops/fls64.h> #include <asm-generic/bitops/hweight.h> diff -puN include/asm-sh/bitops.h~implement-__fls-on-all-64-bit-archs include/asm-sh/bitops.h --- a/include/asm-sh/bitops.h~implement-__fls-on-all-64-bit-archs +++ a/include/asm-sh/bitops.h @@ -95,6 +95,7 @@ static inline unsigned long ffz(unsigned #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> #endif /* __KERNEL__ */ diff -puN include/asm-sparc64/bitops.h~implement-__fls-on-all-64-bit-archs include/asm-sparc64/bitops.h --- a/include/asm-sparc64/bitops.h~implement-__fls-on-all-64-bit-archs +++ a/include/asm-sparc64/bitops.h @@ -34,6 +34,7 @@ extern void change_bit(unsigned long nr, #include <asm-generic/bitops/ffz.h> #include <asm-generic/bitops/__ffs.h> #include <asm-generic/bitops/fls.h> +#include <asm-generic/bitops/__fls.h> #include <asm-generic/bitops/fls64.h> #ifdef __KERNEL__ _ Patches currently in -mm which might be from heukelum@xxxxxxxxxxxxx are git-x86.patch introduce-a-generic-__fls-implementation.patch implement-__fls-on-all-64-bit-archs.patch use-__fls-for-fls64-on-64-bit-archs.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html