diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-26 16:07:55 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-09-26 16:07:55 -0400 |
commit | b278240839e20fa9384ea430df463b367b90e04e (patch) | |
tree | f99f0c8cdd4cc7f177cd75440e6bd181cded7fb3 /lib | |
parent | dd77a4ee0f3981693d4229aa1d57cea9e526ff47 (diff) | |
parent | 3f75f42d7733e73aca5c78326489efd4189e0111 (diff) |
Merge branch 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6
* 'for-linus' of git://one.firstfloor.org/home/andi/git/linux-2.6: (225 commits)
[PATCH] Don't set calgary iommu as default y
[PATCH] i386/x86-64: New Intel feature flags
[PATCH] x86: Add a cumulative thermal throttle event counter.
[PATCH] i386: Make the jiffies compares use the 64bit safe macros.
[PATCH] x86: Refactor thermal throttle processing
[PATCH] Add 64bit jiffies compares (for use with get_jiffies_64)
[PATCH] Fix unwinder warning in traps.c
[PATCH] x86: Allow disabling early pci scans with pci=noearly or disallowing conf1
[PATCH] x86: Move direct PCI scanning functions out of line
[PATCH] i386/x86-64: Make all early PCI scans dependent on CONFIG_PCI
[PATCH] Don't leak NT bit into next task
[PATCH] i386/x86-64: Work around gcc bug with noreturn functions in unwinder
[PATCH] Fix some broken white space in ia32_signal.c
[PATCH] Initialize argument registers for 32bit signal handlers.
[PATCH] Remove all traces of signal number conversion
[PATCH] Don't synchronize time reading on single core AMD systems
[PATCH] Remove outdated comment in x86-64 mmconfig code
[PATCH] Use string instructions for Core2 copy/clear
[PATCH] x86: - restore i8259A eoi status on resume
[PATCH] i386: Split multi-line printk in oops output.
...
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig.debug | 2 | ||||
-rw-r--r-- | lib/hweight.c | 10 |
2 files changed, 9 insertions, 3 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 2869307ca3e..f1ac3184dc0 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -225,7 +225,7 @@ config LOCKDEP | |||
225 | bool | 225 | bool |
226 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT | 226 | depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT |
227 | select STACKTRACE | 227 | select STACKTRACE |
228 | select FRAME_POINTER | 228 | select FRAME_POINTER if !X86 |
229 | select KALLSYMS | 229 | select KALLSYMS |
230 | select KALLSYMS_ALL | 230 | select KALLSYMS_ALL |
231 | 231 | ||
diff --git a/lib/hweight.c b/lib/hweight.c index 43825767170..360556a7803 100644 --- a/lib/hweight.c +++ b/lib/hweight.c | |||
@@ -1,5 +1,6 @@ | |||
1 | #include <linux/module.h> | 1 | #include <linux/module.h> |
2 | #include <asm/types.h> | 2 | #include <asm/types.h> |
3 | #include <asm/bitops.h> | ||
3 | 4 | ||
4 | /** | 5 | /** |
5 | * hweightN - returns the hamming weight of a N-bit word | 6 | * hweightN - returns the hamming weight of a N-bit word |
@@ -40,14 +41,19 @@ unsigned long hweight64(__u64 w) | |||
40 | #if BITS_PER_LONG == 32 | 41 | #if BITS_PER_LONG == 32 |
41 | return hweight32((unsigned int)(w >> 32)) + hweight32((unsigned int)w); | 42 | return hweight32((unsigned int)(w >> 32)) + hweight32((unsigned int)w); |
42 | #elif BITS_PER_LONG == 64 | 43 | #elif BITS_PER_LONG == 64 |
44 | #ifdef ARCH_HAS_FAST_MULTIPLIER | ||
45 | w -= (w >> 1) & 0x5555555555555555ul; | ||
46 | w = (w & 0x3333333333333333ul) + ((w >> 2) & 0x3333333333333333ul); | ||
47 | w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0ful; | ||
48 | return (w * 0x0101010101010101ul) >> 56; | ||
49 | #else | ||
43 | __u64 res = w - ((w >> 1) & 0x5555555555555555ul); | 50 | __u64 res = w - ((w >> 1) & 0x5555555555555555ul); |
44 | res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul); | 51 | res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul); |
45 | res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful; | 52 | res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful; |
46 | res = res + (res >> 8); | 53 | res = res + (res >> 8); |
47 | res = res + (res >> 16); | 54 | res = res + (res >> 16); |
48 | return (res + (res >> 32)) & 0x00000000000000FFul; | 55 | return (res + (res >> 32)) & 0x00000000000000FFul; |
49 | #else | 56 | #endif |
50 | #error BITS_PER_LONG not defined | ||
51 | #endif | 57 | #endif |
52 | } | 58 | } |
53 | EXPORT_SYMBOL(hweight64); | 59 | EXPORT_SYMBOL(hweight64); |