Commit 25cd480e447eba47b8bdad1c9f95cadc074abc75
1 parent
260d819e3a
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
tools: Remove bitops/hweight usage of bits in tools/perf
We need to use lib/hweight.c for that, just like we do for lib/rbtree.c, so tools need to link hweight.o. For now do it directly, but we need to have a tools/lib/lk.a or .so that collects these goodies... Reported-by: Jan Beulich <JBeulich@suse.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: David Ahern <dsahern@gmail.com> Cc: Don Zickus <dzickus@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-a1e91dx3apzqw5kbdt7ut21s@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Showing 10 changed files with 30 additions and 42 deletions Side-by-side Diff
- tools/include/asm-generic/bitops.h
- tools/include/asm-generic/bitops/arch_hweight.h
- tools/include/asm-generic/bitops/const_hweight.h
- tools/include/asm-generic/bitops/hweight.h
- tools/include/linux/bitops.h
- tools/perf/MANIFEST
- tools/perf/Makefile.perf
- tools/perf/util/hweight.c
- tools/perf/util/include/asm/hweight.h
- tools/perf/util/python-ext-sources
tools/include/asm-generic/bitops.h
tools/include/asm-generic/bitops/arch_hweight.h
1 | +#include "../../../../include/asm-generic/bitops/arch_hweight.h" |
tools/include/asm-generic/bitops/const_hweight.h
1 | +#include "../../../../include/asm-generic/bitops/const_hweight.h" |
tools/include/asm-generic/bitops/hweight.h
tools/include/linux/bitops.h
1 | 1 | #ifndef _TOOLS_LINUX_BITOPS_H_ |
2 | 2 | #define _TOOLS_LINUX_BITOPS_H_ |
3 | 3 | |
4 | +#include <asm/types.h> | |
4 | 5 | #include <linux/kernel.h> |
5 | 6 | #include <linux/compiler.h> |
6 | -#include <asm/hweight.h> | |
7 | 7 | |
8 | 8 | #ifndef __WORDSIZE |
9 | 9 | #define __WORDSIZE (__SIZEOF_LONG__ * 8) |
... | ... | @@ -18,6 +18,11 @@ |
18 | 18 | #define BITS_TO_U64(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u64)) |
19 | 19 | #define BITS_TO_U32(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(u32)) |
20 | 20 | #define BITS_TO_BYTES(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE) |
21 | + | |
22 | +extern unsigned int __sw_hweight8(unsigned int w); | |
23 | +extern unsigned int __sw_hweight16(unsigned int w); | |
24 | +extern unsigned int __sw_hweight32(unsigned int w); | |
25 | +extern unsigned long __sw_hweight64(__u64 w); | |
21 | 26 | |
22 | 27 | /* |
23 | 28 | * Include this here because some architectures need generic_ffs/fls in |
tools/perf/MANIFEST
... | ... | @@ -6,12 +6,15 @@ |
6 | 6 | tools/lib/symbol/kallsyms.h |
7 | 7 | tools/lib/util/find_next_bit.c |
8 | 8 | tools/include/asm/bug.h |
9 | +tools/include/asm-generic/bitops/arch_hweight.h | |
9 | 10 | tools/include/asm-generic/bitops/atomic.h |
11 | +tools/include/asm-generic/bitops/const_hweight.h | |
10 | 12 | tools/include/asm-generic/bitops/__ffs.h |
11 | 13 | tools/include/asm-generic/bitops/__fls.h |
12 | 14 | tools/include/asm-generic/bitops/find.h |
13 | 15 | tools/include/asm-generic/bitops/fls64.h |
14 | 16 | tools/include/asm-generic/bitops/fls.h |
17 | +tools/include/asm-generic/bitops/hweight.h | |
15 | 18 | tools/include/asm-generic/bitops.h |
16 | 19 | tools/include/linux/bitops.h |
17 | 20 | tools/include/linux/compiler.h |
... | ... | @@ -19,6 +22,8 @@ |
19 | 22 | tools/include/linux/hash.h |
20 | 23 | tools/include/linux/log2.h |
21 | 24 | tools/include/linux/types.h |
25 | +include/asm-generic/bitops/arch_hweight.h | |
26 | +include/asm-generic/bitops/const_hweight.h | |
22 | 27 | include/asm-generic/bitops/fls64.h |
23 | 28 | include/asm-generic/bitops/__fls.h |
24 | 29 | include/asm-generic/bitops/fls.h |
... | ... | @@ -29,6 +34,7 @@ |
29 | 34 | include/linux/hash.h |
30 | 35 | include/linux/stringify.h |
31 | 36 | lib/find_next_bit.c |
37 | +lib/hweight.c | |
32 | 38 | lib/rbtree.c |
33 | 39 | include/linux/swab.h |
34 | 40 | arch/*/include/asm/unistd*.h |
tools/perf/Makefile.perf
... | ... | @@ -232,12 +232,15 @@ |
232 | 232 | LIB_H += ../../include/linux/stringify.h |
233 | 233 | LIB_H += util/include/linux/bitmap.h |
234 | 234 | LIB_H += ../include/linux/bitops.h |
235 | +LIB_H += ../include/asm-generic/bitops/arch_hweight.h | |
235 | 236 | LIB_H += ../include/asm-generic/bitops/atomic.h |
237 | +LIB_H += ../include/asm-generic/bitops/const_hweight.h | |
236 | 238 | LIB_H += ../include/asm-generic/bitops/find.h |
237 | 239 | LIB_H += ../include/asm-generic/bitops/fls64.h |
238 | 240 | LIB_H += ../include/asm-generic/bitops/fls.h |
239 | 241 | LIB_H += ../include/asm-generic/bitops/__ffs.h |
240 | 242 | LIB_H += ../include/asm-generic/bitops/__fls.h |
243 | +LIB_H += ../include/asm-generic/bitops/hweight.h | |
241 | 244 | LIB_H += ../include/asm-generic/bitops.h |
242 | 245 | LIB_H += ../include/linux/compiler.h |
243 | 246 | LIB_H += ../include/linux/log2.h |
... | ... | @@ -255,7 +258,6 @@ |
255 | 258 | LIB_H += util/include/asm/asm-offsets.h |
256 | 259 | LIB_H += ../include/asm/bug.h |
257 | 260 | LIB_H += util/include/asm/byteorder.h |
258 | -LIB_H += util/include/asm/hweight.h | |
259 | 261 | LIB_H += util/include/asm/swab.h |
260 | 262 | LIB_H += util/include/asm/system.h |
261 | 263 | LIB_H += util/include/asm/uaccess.h |
... | ... | @@ -743,6 +745,9 @@ |
743 | 745 | $(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) $< |
744 | 746 | |
745 | 747 | $(OUTPUT)util/rbtree.o: ../../lib/rbtree.c $(OUTPUT)PERF-CFLAGS |
748 | + $(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -Wno-unused-parameter -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $< | |
749 | + | |
750 | +$(OUTPUT)util/hweight.o: ../../lib/hweight.c $(OUTPUT)PERF-CFLAGS | |
746 | 751 | $(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) -Wno-unused-parameter -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $< |
747 | 752 | |
748 | 753 | $(OUTPUT)util/find_next_bit.o: ../lib/util/find_next_bit.c $(OUTPUT)PERF-CFLAGS |
tools/perf/util/hweight.c
1 | -#include <linux/bitops.h> | |
2 | - | |
3 | -/** | |
4 | - * hweightN - returns the hamming weight of a N-bit word | |
5 | - * @x: the word to weigh | |
6 | - * | |
7 | - * The Hamming Weight of a number is the total number of bits set in it. | |
8 | - */ | |
9 | - | |
10 | -unsigned int hweight32(unsigned int w) | |
11 | -{ | |
12 | - unsigned int res = w - ((w >> 1) & 0x55555555); | |
13 | - res = (res & 0x33333333) + ((res >> 2) & 0x33333333); | |
14 | - res = (res + (res >> 4)) & 0x0F0F0F0F; | |
15 | - res = res + (res >> 8); | |
16 | - return (res + (res >> 16)) & 0x000000FF; | |
17 | -} | |
18 | - | |
19 | -unsigned long hweight64(__u64 w) | |
20 | -{ | |
21 | -#if BITS_PER_LONG == 32 | |
22 | - return hweight32((unsigned int)(w >> 32)) + hweight32((unsigned int)w); | |
23 | -#elif BITS_PER_LONG == 64 | |
24 | - __u64 res = w - ((w >> 1) & 0x5555555555555555ul); | |
25 | - res = (res & 0x3333333333333333ul) + ((res >> 2) & 0x3333333333333333ul); | |
26 | - res = (res + (res >> 4)) & 0x0F0F0F0F0F0F0F0Ful; | |
27 | - res = res + (res >> 8); | |
28 | - res = res + (res >> 16); | |
29 | - return (res + (res >> 32)) & 0x00000000000000FFul; | |
30 | -#endif | |
31 | -} |
tools/perf/util/include/asm/hweight.h