Commit | Line | Data |
---|---|---|
58d6ea30 MW |
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 | } |