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 */ |
