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