
Hi Simon,
On Tuesday 15 September 2009 22:34:43 Wolfgang Denk wrote:
Dear Simon Kagstrom,
In message 20090824091012.0df5bbff@marrow.netinsight.se you wrote:
Define ffs/fls for all architectures
UBIFS requires fls(), which is not defined for arm (and some other architectures) and this patch adds it. The implementation is taken from Linux and is generic. ffs() is also defined for those that miss it.
Signed-off-by: Simon Kagstrom simon.kagstrom@netinsight.net
ChangeLog: v2: Unify code style (empty line between ffs/fls) v3: Move the definition to generic code (Mike Frysinger)
include/asm-i386/bitops.h | 1 + include/asm-m68k/bitops.h | 1 + include/asm-nios/bitops.h | 1 + include/asm-nios2/bitops.h | 1 + include/asm-ppc/bitops.h | 2 + include/asm-sh/bitops.h | 2 + include/linux/bitops.h | 45 ++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 53 insertions(+), 0 deletions(-)
Applied, thanks.
I'm seeing strange problem on some PPC4xx platforms (CFI FLASH driver on Sequoia) with recent U-Boot. Bisecting lead me to this patch. And looking at the PPC implementation, I can see that this can't work:
include/asm-ppc/bitops.h: @@ -230,6 +231,7 @@ extern __inline__ int ffs(int x) { return __ilog2(x & -x) + 1; } +#define ffs
So after "ffs()" is define as an inline function, you define it to nothing. I understand that you need a flag for include/linux/bitops.h, to decide if the platform version of this function should be used or the generic version:
include/linux/bitops.h: +#ifndef ffs +# define ffs generic_ffs +#endif
But this only works for platforms which don't supply a platform specific ffs function. One way to solve this would be something like this:
include/asm-ppc/bitops.h: @@ -230,6 +231,7 @@ extern __inline__ int ffs(int x) { return __ilog2(x & -x) + 1; } +#define PLATFORM_FFS
include/linux/bitops.h: +#ifndef PLATFORM_FFS +# define ffs generic_ffs +#endif
Perhaps there is an more elegant way to solve this problem. Patches welcome ;)
Thanks.
Cheers, Stefan
-- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office@denx.de