88,32 → 88,32 |
* lib/bitmap.c provides these functions: |
*/ |
|
extern int __bitmap_empty(const unsigned long *bitmap, int bits); |
extern int __bitmap_full(const unsigned long *bitmap, int bits); |
extern int __bitmap_empty(const unsigned long *bitmap, unsigned int nbits); |
extern int __bitmap_full(const unsigned long *bitmap, unsigned int nbits); |
extern int __bitmap_equal(const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits); |
const unsigned long *bitmap2, unsigned int nbits); |
extern void __bitmap_complement(unsigned long *dst, const unsigned long *src, |
int bits); |
unsigned int nbits); |
extern void __bitmap_shift_right(unsigned long *dst, |
const unsigned long *src, int shift, int bits); |
extern void __bitmap_shift_left(unsigned long *dst, |
const unsigned long *src, int shift, int bits); |
extern int __bitmap_and(unsigned long *dst, const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits); |
const unsigned long *bitmap2, unsigned int nbits); |
extern void __bitmap_or(unsigned long *dst, const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits); |
const unsigned long *bitmap2, unsigned int nbits); |
extern void __bitmap_xor(unsigned long *dst, const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits); |
const unsigned long *bitmap2, unsigned int nbits); |
extern int __bitmap_andnot(unsigned long *dst, const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits); |
const unsigned long *bitmap2, unsigned int nbits); |
extern int __bitmap_intersects(const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits); |
const unsigned long *bitmap2, unsigned int nbits); |
extern int __bitmap_subset(const unsigned long *bitmap1, |
const unsigned long *bitmap2, int bits); |
extern int __bitmap_weight(const unsigned long *bitmap, int bits); |
const unsigned long *bitmap2, unsigned int nbits); |
extern int __bitmap_weight(const unsigned long *bitmap, unsigned int nbits); |
|
extern void bitmap_set(unsigned long *map, int i, int len); |
extern void bitmap_clear(unsigned long *map, int start, int nr); |
extern void bitmap_set(unsigned long *map, unsigned int start, int len); |
extern void bitmap_clear(unsigned long *map, unsigned int start, int len); |
extern unsigned long bitmap_find_next_zero_area(unsigned long *map, |
unsigned long size, |
unsigned long start, |
140,9 → 140,9 |
const unsigned long *relmap, int bits); |
extern void bitmap_fold(unsigned long *dst, const unsigned long *orig, |
int sz, int bits); |
extern int bitmap_find_free_region(unsigned long *bitmap, int bits, int order); |
extern void bitmap_release_region(unsigned long *bitmap, int pos, int order); |
extern int bitmap_allocate_region(unsigned long *bitmap, int pos, int order); |
extern int bitmap_find_free_region(unsigned long *bitmap, unsigned int bits, int order); |
extern void bitmap_release_region(unsigned long *bitmap, unsigned int pos, int order); |
extern int bitmap_allocate_region(unsigned long *bitmap, unsigned int pos, int order); |
extern void bitmap_copy_le(void *dst, const unsigned long *src, int nbits); |
extern int bitmap_ord_to_pos(const unsigned long *bitmap, int n, int bits); |
|
188,15 → 188,15 |
} |
|
static inline int bitmap_and(unsigned long *dst, const unsigned long *src1, |
const unsigned long *src2, int nbits) |
const unsigned long *src2, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
return (*dst = *src1 & *src2) != 0; |
return (*dst = *src1 & *src2 & BITMAP_LAST_WORD_MASK(nbits)) != 0; |
return __bitmap_and(dst, src1, src2, nbits); |
} |
|
static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, |
const unsigned long *src2, int nbits) |
const unsigned long *src2, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
*dst = *src1 | *src2; |
205,7 → 205,7 |
} |
|
static inline void bitmap_xor(unsigned long *dst, const unsigned long *src1, |
const unsigned long *src2, int nbits) |
const unsigned long *src2, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
*dst = *src1 ^ *src2; |
214,24 → 214,24 |
} |
|
static inline int bitmap_andnot(unsigned long *dst, const unsigned long *src1, |
const unsigned long *src2, int nbits) |
const unsigned long *src2, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
return (*dst = *src1 & ~(*src2)) != 0; |
return (*dst = *src1 & ~(*src2) & BITMAP_LAST_WORD_MASK(nbits)) != 0; |
return __bitmap_andnot(dst, src1, src2, nbits); |
} |
|
static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, |
int nbits) |
unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
*dst = ~(*src) & BITMAP_LAST_WORD_MASK(nbits); |
*dst = ~(*src); |
else |
__bitmap_complement(dst, src, nbits); |
} |
|
static inline int bitmap_equal(const unsigned long *src1, |
const unsigned long *src2, int nbits) |
const unsigned long *src2, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
return ! ((*src1 ^ *src2) & BITMAP_LAST_WORD_MASK(nbits)); |
240,7 → 240,7 |
} |
|
static inline int bitmap_intersects(const unsigned long *src1, |
const unsigned long *src2, int nbits) |
const unsigned long *src2, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
return ((*src1 & *src2) & BITMAP_LAST_WORD_MASK(nbits)) != 0; |
249,7 → 249,7 |
} |
|
static inline int bitmap_subset(const unsigned long *src1, |
const unsigned long *src2, int nbits) |
const unsigned long *src2, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
return ! ((*src1 & ~(*src2)) & BITMAP_LAST_WORD_MASK(nbits)); |
257,7 → 257,7 |
return __bitmap_subset(src1, src2, nbits); |
} |
|
static inline int bitmap_empty(const unsigned long *src, int nbits) |
static inline int bitmap_empty(const unsigned long *src, unsigned nbits) |
{ |
if (small_const_nbits(nbits)) |
return ! (*src & BITMAP_LAST_WORD_MASK(nbits)); |
265,7 → 265,7 |
return __bitmap_empty(src, nbits); |
} |
|
static inline int bitmap_full(const unsigned long *src, int nbits) |
static inline int bitmap_full(const unsigned long *src, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
return ! (~(*src) & BITMAP_LAST_WORD_MASK(nbits)); |
273,7 → 273,7 |
return __bitmap_full(src, nbits); |
} |
|
static inline int bitmap_weight(const unsigned long *src, int nbits) |
static inline int bitmap_weight(const unsigned long *src, unsigned int nbits) |
{ |
if (small_const_nbits(nbits)) |
return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits)); |
284,7 → 284,7 |
const unsigned long *src, int n, int nbits) |
{ |
if (small_const_nbits(nbits)) |
*dst = *src >> n; |
*dst = (*src & BITMAP_LAST_WORD_MASK(nbits)) >> n; |
else |
__bitmap_shift_right(dst, src, n, nbits); |
} |