hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/tools/include/linux/bitmap.h
....@@ -15,6 +15,9 @@
1515 const unsigned long *bitmap2, int bits);
1616 int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1,
1717 const unsigned long *bitmap2, unsigned int bits);
18
+int __bitmap_equal(const unsigned long *bitmap1,
19
+ const unsigned long *bitmap2, unsigned int bits);
20
+void bitmap_clear(unsigned long *map, unsigned int start, int len);
1821
1922 #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1)))
2023
....@@ -123,6 +126,15 @@
123126 }
124127
125128 /*
129
+ * bitmap_free - Free bitmap
130
+ * @bitmap: pointer to bitmap
131
+ */
132
+static inline void bitmap_free(unsigned long *bitmap)
133
+{
134
+ free(bitmap);
135
+}
136
+
137
+/*
126138 * bitmap_scnprintf - print bitmap list into buffer
127139 * @bitmap: bitmap
128140 * @nbits: size of bitmap
....@@ -147,4 +159,23 @@
147159 return __bitmap_and(dst, src1, src2, nbits);
148160 }
149161
162
+#ifdef __LITTLE_ENDIAN
163
+#define BITMAP_MEM_ALIGNMENT 8
164
+#else
165
+#define BITMAP_MEM_ALIGNMENT (8 * sizeof(unsigned long))
166
+#endif
167
+#define BITMAP_MEM_MASK (BITMAP_MEM_ALIGNMENT - 1)
168
+#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0)
169
+
170
+static inline int bitmap_equal(const unsigned long *src1,
171
+ const unsigned long *src2, unsigned int nbits)
172
+{
173
+ if (small_const_nbits(nbits))
174
+ return !((*src1 ^ *src2) & BITMAP_LAST_WORD_MASK(nbits));
175
+ if (__builtin_constant_p(nbits & BITMAP_MEM_MASK) &&
176
+ IS_ALIGNED(nbits, BITMAP_MEM_ALIGNMENT))
177
+ return !memcmp(src1, src2, nbits / 8);
178
+ return __bitmap_equal(src1, src2, nbits);
179
+}
180
+
150181 #endif /* _PERF_BITOPS_H */