diff options
author | Jiri Olsa <jolsa@kernel.org> | 2016-08-01 14:02:31 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-08-02 15:33:27 -0400 |
commit | 741c74f55e8a66f3bc5bbc29dc162c952759e47b (patch) | |
tree | cac565727d5c11ee0e6044e16f51d53b2351e251 /tools/include | |
parent | 820d12b70f91a19eb4a3152b9dd4ea9aee194a36 (diff) |
tools lib: Add bitmap_and function
Add support to perform logical and on bitmaps. Code taken from kernel's
include/linux/bitmap.h.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1470074555-24889-4-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/include')
-rw-r--r-- | tools/include/linux/bitmap.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/tools/include/linux/bitmap.h b/tools/include/linux/bitmap.h index 1cdded0041a8..43c1c5021e4b 100644 --- a/tools/include/linux/bitmap.h +++ b/tools/include/linux/bitmap.h | |||
@@ -11,6 +11,8 @@ | |||
11 | int __bitmap_weight(const unsigned long *bitmap, int bits); | 11 | int __bitmap_weight(const unsigned long *bitmap, int bits); |
12 | void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, | 12 | void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, |
13 | const unsigned long *bitmap2, int bits); | 13 | const unsigned long *bitmap2, int bits); |
14 | int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, | ||
15 | const unsigned long *bitmap2, unsigned int bits); | ||
14 | 16 | ||
15 | #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) | 17 | #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) |
16 | 18 | ||
@@ -85,4 +87,19 @@ static inline unsigned long *bitmap_alloc(int nbits) | |||
85 | size_t bitmap_scnprintf(unsigned long *bitmap, int nbits, | 87 | size_t bitmap_scnprintf(unsigned long *bitmap, int nbits, |
86 | char *buf, size_t size); | 88 | char *buf, size_t size); |
87 | 89 | ||
90 | /** | ||
91 | * bitmap_and - Do logical and on bitmaps | ||
92 | * @dst: resulting bitmap | ||
93 | * @src1: operand 1 | ||
94 | * @src2: operand 2 | ||
95 | * @nbits: size of bitmap | ||
96 | */ | ||
97 | static inline int bitmap_and(unsigned long *dst, const unsigned long *src1, | ||
98 | const unsigned long *src2, unsigned int nbits) | ||
99 | { | ||
100 | if (small_const_nbits(nbits)) | ||
101 | return (*dst = *src1 & *src2 & BITMAP_LAST_WORD_MASK(nbits)) != 0; | ||
102 | return __bitmap_and(dst, src1, src2, nbits); | ||
103 | } | ||
104 | |||
88 | #endif /* _PERF_BITOPS_H */ | 105 | #endif /* _PERF_BITOPS_H */ |