[PATCH] LOG2: Implement a general integer log2 facility in the kernel
This facility provides three entry points: ilog2() Log base 2 of unsigned long ilog2_u32() Log base 2 of u32 ilog2_u64() Log base 2 of u64 These facilities can either be used inside functions on dynamic data: int do_something(long q) { ...; y = ilog2(x) ...; } Or can be used to statically initialise global variables with constant values: unsigned n = ilog2(27); When performing static initialisation, the compiler will report "error: initializer element is not constant" if asked to take a log of zero or of something not reducible to a constant. They treat negative numbers as unsigned. When not dealing with a constant, they fall back to using fls() which permits them to use arch-specific log calculation instructions - such as BSR on x86/x86_64 or SCAN on FRV - if available. [akpm@osdl.org: MMC fix] Signed-off-by:David Howells <dhowells@redhat.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: David Howells <dhowells@redhat.com> Cc: Wojtek Kaniewski <wojtekka@toxygen.net> Signed-off-by:
Andrew Morton <akpm@osdl.org> Signed-off-by:
Linus Torvalds <torvalds@osdl.org>
Showing
- arch/alpha/Kconfig 8 additions, 0 deletionsarch/alpha/Kconfig
- arch/arm/Kconfig 8 additions, 0 deletionsarch/arm/Kconfig
- arch/arm26/Kconfig 8 additions, 0 deletionsarch/arm26/Kconfig
- arch/avr32/Kconfig 8 additions, 0 deletionsarch/avr32/Kconfig
- arch/cris/Kconfig 8 additions, 0 deletionsarch/cris/Kconfig
- arch/frv/Kconfig 8 additions, 0 deletionsarch/frv/Kconfig
- arch/h8300/Kconfig 8 additions, 0 deletionsarch/h8300/Kconfig
- arch/i386/Kconfig.cpu 8 additions, 0 deletionsarch/i386/Kconfig.cpu
- arch/ia64/Kconfig 8 additions, 0 deletionsarch/ia64/Kconfig
- arch/m32r/Kconfig 8 additions, 0 deletionsarch/m32r/Kconfig
- arch/m68k/Kconfig 8 additions, 0 deletionsarch/m68k/Kconfig
- arch/m68knommu/Kconfig 8 additions, 0 deletionsarch/m68knommu/Kconfig
- arch/mips/Kconfig 8 additions, 0 deletionsarch/mips/Kconfig
- arch/parisc/Kconfig 8 additions, 0 deletionsarch/parisc/Kconfig
- arch/powerpc/Kconfig 8 additions, 0 deletionsarch/powerpc/Kconfig
- arch/ppc/Kconfig 8 additions, 0 deletionsarch/ppc/Kconfig
- arch/s390/Kconfig 8 additions, 0 deletionsarch/s390/Kconfig
- arch/sh/Kconfig 8 additions, 0 deletionsarch/sh/Kconfig
- arch/sh64/Kconfig 8 additions, 0 deletionsarch/sh64/Kconfig
- arch/sparc/Kconfig 8 additions, 0 deletionsarch/sparc/Kconfig
Loading
Please register or sign in to comment