lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 4 Aug 2020 20:10:33 -0400 From: Sasha Levin <sashal@...nel.org> To: torvalds@...ux-foundation.org Cc: mingo@...nel.org, peterz@...radead.org, linux-kernel@...r.kernel.org, Sasha Levin <sashal@...nel.org> Subject: [PATCH v4 04/14] tools bitmap: add bitmap_andnot definition Add definition of bitmap_andnot() and wire tools/lib/bitmap.c into liblockdep. This is needed as a result of de4643a77356 ("locking/lockdep: Reuse lock chains that have been freed"). Signed-off-by: Sasha Levin <sashal@...nel.org> --- tools/include/linux/bitmap.h | 10 ++++++++++ tools/lib/bitmap.c | 15 +++++++++++++++ tools/lib/lockdep/Build | 2 +- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/tools/include/linux/bitmap.h b/tools/include/linux/bitmap.h index 477a1cae513f2..ab5df035f8eda 100644 --- a/tools/include/linux/bitmap.h +++ b/tools/include/linux/bitmap.h @@ -18,6 +18,8 @@ int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, int __bitmap_equal(const unsigned long *bitmap1, const unsigned long *bitmap2, unsigned int bits); void bitmap_clear(unsigned long *map, unsigned int start, int len); +int __bitmap_andnot(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))) @@ -178,4 +180,12 @@ static inline int bitmap_equal(const unsigned long *src1, return __bitmap_equal(src1, src2, nbits); } +static inline int bitmap_andnot(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_andnot(dst, src1, src2, nbits); +} + #endif /* _PERF_BITOPS_H */ diff --git a/tools/lib/bitmap.c b/tools/lib/bitmap.c index 5043747ef6c5f..b6bc037623fc1 100644 --- a/tools/lib/bitmap.c +++ b/tools/lib/bitmap.c @@ -86,3 +86,18 @@ int __bitmap_equal(const unsigned long *bitmap1, return 1; } + +int __bitmap_andnot(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; +} diff --git a/tools/lib/lockdep/Build b/tools/lib/lockdep/Build index 6f667355b0687..219a9e2d9e0ba 100644 --- a/tools/lib/lockdep/Build +++ b/tools/lib/lockdep/Build @@ -1 +1 @@ -liblockdep-y += common.o lockdep.o preload.o rbtree.o +liblockdep-y += common.o lockdep.o preload.o rbtree.o ../../lib/bitmap.o -- 2.25.1
Powered by blists - more mailing lists