1 | /* lib/bitmap.c pulls in at least two other files. */ |
---|---|
2 | |
3 | #include <linux/bitmap.h> |
4 | |
5 | void bitmap_clear(unsigned long *map, unsigned int start, int len) |
6 | { |
7 | unsigned long *p = map + BIT_WORD(start); |
8 | const unsigned int size = start + len; |
9 | int bits_to_clear = BITS_PER_LONG - (start % BITS_PER_LONG); |
10 | unsigned long mask_to_clear = BITMAP_FIRST_WORD_MASK(start); |
11 | |
12 | while (len - bits_to_clear >= 0) { |
13 | *p &= ~mask_to_clear; |
14 | len -= bits_to_clear; |
15 | bits_to_clear = BITS_PER_LONG; |
16 | mask_to_clear = ~0UL; |
17 | p++; |
18 | } |
19 | if (len) { |
20 | mask_to_clear &= BITMAP_LAST_WORD_MASK(size); |
21 | *p &= ~mask_to_clear; |
22 | } |
23 | } |
24 |