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