| .. | .. |
|---|
| 15 | 15 | const unsigned long *bitmap2, int bits); |
|---|
| 16 | 16 | int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, |
|---|
| 17 | 17 | 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); |
|---|
| 18 | 21 | |
|---|
| 19 | 22 | #define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) & (BITS_PER_LONG - 1))) |
|---|
| 20 | 23 | |
|---|
| .. | .. |
|---|
| 123 | 126 | } |
|---|
| 124 | 127 | |
|---|
| 125 | 128 | /* |
|---|
| 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 | +/* |
|---|
| 126 | 138 | * bitmap_scnprintf - print bitmap list into buffer |
|---|
| 127 | 139 | * @bitmap: bitmap |
|---|
| 128 | 140 | * @nbits: size of bitmap |
|---|
| .. | .. |
|---|
| 147 | 159 | return __bitmap_and(dst, src1, src2, nbits); |
|---|
| 148 | 160 | } |
|---|
| 149 | 161 | |
|---|
| 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 | + |
|---|
| 150 | 181 | #endif /* _PERF_BITOPS_H */ |
|---|