From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933442AbcHDJSZ (ORCPT ); Thu, 4 Aug 2016 05:18:25 -0400 Received: from terminus.zytor.com ([198.137.202.10]:51484 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754482AbcHDJOm (ORCPT ); Thu, 4 Aug 2016 05:14:42 -0400 Date: Thu, 4 Aug 2016 02:11:58 -0700 From: tip-bot for Jiri Olsa Message-ID: Cc: mingo@kernel.org, hpa@zytor.com, dsahern@gmail.com, linux-kernel@vger.kernel.org, a.p.zijlstra@chello.nl, jolsa@kernel.org, namhyung@kernel.org, tglx@linutronix.de, acme@redhat.com Reply-To: a.p.zijlstra@chello.nl, linux-kernel@vger.kernel.org, mingo@kernel.org, hpa@zytor.com, dsahern@gmail.com, acme@redhat.com, namhyung@kernel.org, tglx@linutronix.de, jolsa@kernel.org In-Reply-To: <1470074555-24889-4-git-send-email-jolsa@kernel.org> References: <1470074555-24889-4-git-send-email-jolsa@kernel.org> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/urgent] tools lib: Add bitmap_and function Git-Commit-ID: 741c74f55e8a66f3bc5bbc29dc162c952759e47b X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 741c74f55e8a66f3bc5bbc29dc162c952759e47b Gitweb: http://git.kernel.org/tip/741c74f55e8a66f3bc5bbc29dc162c952759e47b Author: Jiri Olsa AuthorDate: Mon, 1 Aug 2016 20:02:31 +0200 Committer: Arnaldo Carvalho de Melo CommitDate: Tue, 2 Aug 2016 16:33:27 -0300 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 Cc: David Ahern Cc: Namhyung Kim Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1470074555-24889-4-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/include/linux/bitmap.h | 17 +++++++++++++++++ tools/lib/bitmap.c | 15 +++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/tools/include/linux/bitmap.h b/tools/include/linux/bitmap.h index 1cdded0..43c1c50 100644 --- a/tools/include/linux/bitmap.h +++ b/tools/include/linux/bitmap.h @@ -11,6 +11,8 @@ int __bitmap_weight(const unsigned long *bitmap, int bits); void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, const unsigned long *bitmap2, int bits); +int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, + const unsigned long *bitmap2, unsigned int bits); #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) @@ -85,4 +87,19 @@ static inline unsigned long *bitmap_alloc(int nbits) size_t bitmap_scnprintf(unsigned long *bitmap, int nbits, char *buf, size_t size); +/** + * bitmap_and - Do logical and on bitmaps + * @dst: resulting bitmap + * @src1: operand 1 + * @src2: operand 2 + * @nbits: size of bitmap + */ +static inline int bitmap_and(unsigned long *dst, const unsigned long *src1, + const unsigned long *src2, unsigned int nbits) +{ + if (small_const_nbits(nbits)) + return (*dst = *src1 & *src2 & BITMAP_LAST_WORD_MASK(nbits)) != 0; + return __bitmap_and(dst, src1, src2, nbits); +} + #endif /* _PERF_BITOPS_H */ diff --git a/tools/lib/bitmap.c b/tools/lib/bitmap.c index 5c7e318..38748b0 100644 --- a/tools/lib/bitmap.c +++ b/tools/lib/bitmap.c @@ -58,3 +58,18 @@ size_t bitmap_scnprintf(unsigned long *bitmap, int nbits, } return ret; } + +int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, + const unsigned long *bitmap2, unsigned int bits) +{ + unsigned int k; + unsigned int lim = bits/BITS_PER_LONG; + unsigned long result = 0; + + for (k = 0; k < lim; k++) + result |= (dst[k] = bitmap1[k] & bitmap2[k]); + if (bits % BITS_PER_LONG) + result |= (dst[k] = bitmap1[k] & bitmap2[k] & + BITMAP_LAST_WORD_MASK(bits)); + return result != 0; +}