-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'perf-urgent-for-mingo-2' of git://git.kernel.org/pub/scm/l…
…inux/kernel/git/acme/linux into perf/urgent Pull perf/urgent fixes from Arnaldo Carvalho de Melo: - Fix 'perf top -u username', where not enough memory per thread_map entry was being allocated nor was being initialized, causing a segfault (Arnaldo Carvalho de Melo) - Fix locking lockup using 32-bit compat vdso (Adrian Hunter) - Fix shadow declaration of 'close' with older build environments (Jiri Olsa) - Make the 'clean' target do a better job, removing some more temp files (Riku Voipio) - The python binding also has a MANIFEST like file where we list the files that need to be built and linked to form the resulting python shared object module file. And it has an entry for rbtree.c that still pointed to the one in the kernel sources, fix it by also removing one level of indirection so that it uses the tools/lib/rbtree.c copy. (Arnaldo Carvalho de Melo) - For the same reasons as for rbtree.c, copy the kernel lib/hweight.c file to tools/lib/, sanitizing it in the process to remove kernel specific stuff like EXPORT_SYMBOL() lines and the linux/export.h include reference, as that file doesn't exist anymore in tools/include/linux. (Arnaldo Carvalho de Melo) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
- Loading branch information
Showing
9 changed files
with
74 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
#include <linux/bitops.h> | ||
#include <asm/types.h> | ||
|
||
/** | ||
* hweightN - returns the hamming weight of a N-bit word | ||
* @x: the word to weigh | ||
* | ||
* The Hamming Weight of a number is the total number of bits set in it. | ||
*/ | ||
|
||
unsigned int __sw_hweight32(unsigned int w) | ||
{ | ||
#ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER | ||
w -= (w >> 1) & 0x55555555; | ||
w = (w & 0x33333333) + ((w >> 2) & 0x33333333); | ||
w = (w + (w >> 4)) & 0x0f0f0f0f; | ||
return (w * 0x01010101) >> 24; | ||
#else | ||
unsigned int res = w - ((w >> 1) & 0x55555555); | ||
res = (res & 0x33333333) + ((res >> 2) & 0x33333333); | ||
res = (res + (res >> 4)) & 0x0F0F0F0F; | ||
res = res + (res >> 8); | ||
return (res + (res >> 16)) & 0x000000FF; | ||
#endif | ||
} | ||
|
||
unsigned int __sw_hweight16(unsigned int w) | ||
{ | ||
unsigned int res = w - ((w >> 1) & 0x5555); | ||
res = (res & 0x3333) + ((res >> 2) & 0x3333); | ||
res = (res + (res >> 4)) & 0x0F0F; | ||
return (res + (res >> 8)) & 0x00FF; | ||
} | ||
|
||
unsigned int __sw_hweight8(unsigned int w) | ||
{ | ||
unsigned int res = w - ((w >> 1) & 0x55); | ||
res = (res & 0x33) + ((res >> 2) & 0x33); | ||
return (res + (res >> 4)) & 0x0F; | ||
} | ||
|
||
unsigned long __sw_hweight64(__u64 w) | ||
{ | ||
#if BITS_PER_LONG == 32 | ||
return __sw_hweight32((unsigned int)(w >> 32)) + | ||
__sw_hweight32((unsigned int)w); | ||
#elif BITS_PER_LONG == 64 | ||
#ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER | ||
w -= (w >> 1) & 0x5555555555555555ul; | ||
w = (w & 0x3333333333333333ul) + ((w >> 2) & 0x3333333333333333ul); | ||
w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0ful; | ||
return (w * 0x0101010101010101ul) >> 56; | ||
#else | ||
__u64 res = w - ((w >> 1) & 0x5555555555555555ul); | ||
res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul); | ||
res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful; | ||
res = res + (res >> 8); | ||
res = res + (res >> 16); | ||
return (res + (res >> 32)) & 0x00000000000000FFul; | ||
#endif | ||
#endif | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters