Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tools: Copy lib/hweight.c from the kernel sources

Instead of accessing it directly, as it uses EXPORT_SYMBOL, that has
no meaning in tools/perf and because we removed the stubs for it, i.e.
we removed the tools/include/linux/export.h file.

This fixes the build for the detached tarball sources cases and removes
one more source of entanglement with the kernel sources.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-oyqx541o7apa2cskjhcxi6nx@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+65 -3
+62
tools/lib/hweight.c
··· 1 + #include <linux/bitops.h> 2 + #include <asm/types.h> 3 + 4 + /** 5 + * hweightN - returns the hamming weight of a N-bit word 6 + * @x: the word to weigh 7 + * 8 + * The Hamming Weight of a number is the total number of bits set in it. 9 + */ 10 + 11 + unsigned int __sw_hweight32(unsigned int w) 12 + { 13 + #ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER 14 + w -= (w >> 1) & 0x55555555; 15 + w = (w & 0x33333333) + ((w >> 2) & 0x33333333); 16 + w = (w + (w >> 4)) & 0x0f0f0f0f; 17 + return (w * 0x01010101) >> 24; 18 + #else 19 + unsigned int res = w - ((w >> 1) & 0x55555555); 20 + res = (res & 0x33333333) + ((res >> 2) & 0x33333333); 21 + res = (res + (res >> 4)) & 0x0F0F0F0F; 22 + res = res + (res >> 8); 23 + return (res + (res >> 16)) & 0x000000FF; 24 + #endif 25 + } 26 + 27 + unsigned int __sw_hweight16(unsigned int w) 28 + { 29 + unsigned int res = w - ((w >> 1) & 0x5555); 30 + res = (res & 0x3333) + ((res >> 2) & 0x3333); 31 + res = (res + (res >> 4)) & 0x0F0F; 32 + return (res + (res >> 8)) & 0x00FF; 33 + } 34 + 35 + unsigned int __sw_hweight8(unsigned int w) 36 + { 37 + unsigned int res = w - ((w >> 1) & 0x55); 38 + res = (res & 0x33) + ((res >> 2) & 0x33); 39 + return (res + (res >> 4)) & 0x0F; 40 + } 41 + 42 + unsigned long __sw_hweight64(__u64 w) 43 + { 44 + #if BITS_PER_LONG == 32 45 + return __sw_hweight32((unsigned int)(w >> 32)) + 46 + __sw_hweight32((unsigned int)w); 47 + #elif BITS_PER_LONG == 64 48 + #ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER 49 + w -= (w >> 1) & 0x5555555555555555ul; 50 + w = (w & 0x3333333333333333ul) + ((w >> 2) & 0x3333333333333333ul); 51 + w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0ful; 52 + return (w * 0x0101010101010101ul) >> 56; 53 + #else 54 + __u64 res = w - ((w >> 1) & 0x5555555555555555ul); 55 + res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul); 56 + res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful; 57 + res = res + (res >> 8); 58 + res = res + (res >> 16); 59 + return (res + (res >> 32)) & 0x00000000000000FFul; 60 + #endif 61 + #endif 62 + }
+1 -1
tools/perf/MANIFEST
··· 18 18 tools/arch/x86/include/asm/rmwcc.h 19 19 tools/lib/traceevent 20 20 tools/lib/api 21 + tools/lib/hweight.c 21 22 tools/lib/rbtree.c 22 23 tools/lib/symbol/kallsyms.c 23 24 tools/lib/symbol/kallsyms.h ··· 58 57 include/linux/list.h 59 58 include/linux/hash.h 60 59 include/linux/stringify.h 61 - lib/hweight.c 62 60 include/linux/swab.h 63 61 arch/*/include/asm/unistd*.h 64 62 arch/*/include/uapi/asm/unistd*.h
+1 -1
tools/perf/util/Build
··· 143 143 $(call rule_mkdir) 144 144 $(call if_changed_dep,cc_o_c) 145 145 146 - $(OUTPUT)util/hweight.o: ../../lib/hweight.c FORCE 146 + $(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE 147 147 $(call rule_mkdir) 148 148 $(call if_changed_dep,cc_o_c)
+1 -1
tools/perf/util/python-ext-sources
··· 10 10 util/evlist.c 11 11 util/evsel.c 12 12 util/cpumap.c 13 - ../../lib/hweight.c 13 + ../lib/hweight.c 14 14 util/thread_map.c 15 15 util/util.c 16 16 util/xyarray.c