diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-04-30 18:31:12 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2010-05-02 11:00:44 -0400 |
commit | fb72014d98afd51e85aab9c061344ef32d615606 (patch) | |
tree | 18713d4d1084870c604b512396b893944a2bbdab /tools/perf/util/include | |
parent | bc4b473f1aa2ef785ccfd890a24a1de5a6660f98 (diff) |
perf tools: Don't use code surrounded by __KERNEL__
We need to refactor code to be explicitely shared by the kernel and at
least the tools/ userspace programs, so, till we do that, copy the bare
minimum bitmap/bitops code needed by tools/perf.
Reported-by: "H. Peter Anvin" <hpa@zytor.com>
Cc: Frédéric Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/include')
-rw-r--r-- | tools/perf/util/include/asm/bitops.h | 18 | ||||
-rw-r--r-- | tools/perf/util/include/asm/hweight.h | 8 | ||||
-rw-r--r-- | tools/perf/util/include/linux/bitmap.h | 38 | ||||
-rw-r--r-- | tools/perf/util/include/linux/bitops.h | 20 |
4 files changed, 52 insertions, 32 deletions
diff --git a/tools/perf/util/include/asm/bitops.h b/tools/perf/util/include/asm/bitops.h deleted file mode 100644 index 58e9817ffae0..000000000000 --- a/tools/perf/util/include/asm/bitops.h +++ /dev/null | |||
@@ -1,18 +0,0 @@ | |||
1 | #ifndef _PERF_ASM_BITOPS_H_ | ||
2 | #define _PERF_ASM_BITOPS_H_ | ||
3 | |||
4 | #include <sys/types.h> | ||
5 | #include "../../types.h" | ||
6 | #include <linux/compiler.h> | ||
7 | |||
8 | /* CHECKME: Not sure both always match */ | ||
9 | #define BITS_PER_LONG __WORDSIZE | ||
10 | |||
11 | #include "../../../../include/asm-generic/bitops/__fls.h" | ||
12 | #include "../../../../include/asm-generic/bitops/fls.h" | ||
13 | #include "../../../../include/asm-generic/bitops/fls64.h" | ||
14 | #include "../../../../include/asm-generic/bitops/__ffs.h" | ||
15 | #include "../../../../include/asm-generic/bitops/ffz.h" | ||
16 | #include "../../../../include/asm-generic/bitops/hweight.h" | ||
17 | |||
18 | #endif | ||
diff --git a/tools/perf/util/include/asm/hweight.h b/tools/perf/util/include/asm/hweight.h new file mode 100644 index 000000000000..36cf26d434a5 --- /dev/null +++ b/tools/perf/util/include/asm/hweight.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef PERF_HWEIGHT_H | ||
2 | #define PERF_HWEIGHT_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | unsigned int hweight32(unsigned int w); | ||
6 | unsigned long hweight64(__u64 w); | ||
7 | |||
8 | #endif /* PERF_HWEIGHT_H */ | ||
diff --git a/tools/perf/util/include/linux/bitmap.h b/tools/perf/util/include/linux/bitmap.h index 94507639a8c4..eda4416efa0a 100644 --- a/tools/perf/util/include/linux/bitmap.h +++ b/tools/perf/util/include/linux/bitmap.h | |||
@@ -1,3 +1,35 @@ | |||
1 | #include "../../../../include/linux/bitmap.h" | 1 | #ifndef _PERF_BITOPS_H |
2 | #include "../../../../include/asm-generic/bitops/find.h" | 2 | #define _PERF_BITOPS_H |
3 | #include <linux/errno.h> | 3 | |
4 | #include <string.h> | ||
5 | #include <linux/bitops.h> | ||
6 | |||
7 | int __bitmap_weight(const unsigned long *bitmap, int bits); | ||
8 | |||
9 | #define BITMAP_LAST_WORD_MASK(nbits) \ | ||
10 | ( \ | ||
11 | ((nbits) % BITS_PER_LONG) ? \ | ||
12 | (1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \ | ||
13 | ) | ||
14 | |||
15 | #define small_const_nbits(nbits) \ | ||
16 | (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) | ||
17 | |||
18 | static inline void bitmap_zero(unsigned long *dst, int nbits) | ||
19 | { | ||
20 | if (small_const_nbits(nbits)) | ||
21 | *dst = 0UL; | ||
22 | else { | ||
23 | int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); | ||
24 | memset(dst, 0, len); | ||
25 | } | ||
26 | } | ||
27 | |||
28 | static inline int bitmap_weight(const unsigned long *src, int nbits) | ||
29 | { | ||
30 | if (small_const_nbits(nbits)) | ||
31 | return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits)); | ||
32 | return __bitmap_weight(src, nbits); | ||
33 | } | ||
34 | |||
35 | #endif /* _PERF_BITOPS_H */ | ||
diff --git a/tools/perf/util/include/linux/bitops.h b/tools/perf/util/include/linux/bitops.h index 8d63116e9435..bb4ac2e05385 100644 --- a/tools/perf/util/include/linux/bitops.h +++ b/tools/perf/util/include/linux/bitops.h | |||
@@ -1,13 +1,12 @@ | |||
1 | #ifndef _PERF_LINUX_BITOPS_H_ | 1 | #ifndef _PERF_LINUX_BITOPS_H_ |
2 | #define _PERF_LINUX_BITOPS_H_ | 2 | #define _PERF_LINUX_BITOPS_H_ |
3 | 3 | ||
4 | #define __KERNEL__ | 4 | #include <linux/kernel.h> |
5 | #include <asm/hweight.h> | ||
5 | 6 | ||
6 | #define CONFIG_GENERIC_FIND_NEXT_BIT | 7 | #define BITS_PER_LONG __WORDSIZE |
7 | #define CONFIG_GENERIC_FIND_FIRST_BIT | 8 | #define BITS_PER_BYTE 8 |
8 | #include "../../../../include/linux/bitops.h" | 9 | #define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) |
9 | |||
10 | #undef __KERNEL__ | ||
11 | 10 | ||
12 | static inline void set_bit(int nr, unsigned long *addr) | 11 | static inline void set_bit(int nr, unsigned long *addr) |
13 | { | 12 | { |
@@ -20,10 +19,9 @@ static __always_inline int test_bit(unsigned int nr, const unsigned long *addr) | |||
20 | (((unsigned long *)addr)[nr / BITS_PER_LONG])) != 0; | 19 | (((unsigned long *)addr)[nr / BITS_PER_LONG])) != 0; |
21 | } | 20 | } |
22 | 21 | ||
23 | unsigned long generic_find_next_zero_le_bit(const unsigned long *addr, unsigned | 22 | static inline unsigned long hweight_long(unsigned long w) |
24 | long size, unsigned long offset); | 23 | { |
25 | 24 | return sizeof(w) == 4 ? hweight32(w) : hweight64(w); | |
26 | unsigned long generic_find_next_le_bit(const unsigned long *addr, unsigned | 25 | } |
27 | long size, unsigned long offset); | ||
28 | 26 | ||
29 | #endif | 27 | #endif |