| 10 | #define BIT_ALIGN_UP(n) BIT_ALIGN_DOWN((n) + BITMAP_WORD_BITS - 1) |
| 11 | |
| 12 | void bitmap_zero_range(bitmap *b, unsigned long n, unsigned long m) |
| 13 | { |
| 14 | unsigned long an = BIT_ALIGN_UP(n); |
| 15 | unsigned long am = BIT_ALIGN_DOWN(m); |
| 16 | bitmap_word headmask = BITMAP_WORD_1 >> (n % BITMAP_WORD_BITS); |
| 17 | bitmap_word tailmask = ~(BITMAP_WORD_1 >> (m % BITMAP_WORD_BITS)); |
| 18 | |
| 19 | assert(m >= n); |
| 20 | |
| 21 | if (am < an) { |
| 22 | BITMAP_WORD(b, n) &= ~bitmap_bswap(headmask & tailmask); |
| 23 | return; |
| 24 | } |
| 25 | |
| 26 | if (an > n) |
| 27 | BITMAP_WORD(b, n) &= ~bitmap_bswap(headmask); |
| 28 | |
| 29 | if (am > an) |
| 30 | memset(&BITMAP_WORD(b, an), 0, |
| 31 | (am - an) / BITMAP_WORD_BITS * sizeof(bitmap_word)); |
| 32 | |
| 33 | if (m > am) |
| 34 | BITMAP_WORD(b, m) &= ~bitmap_bswap(tailmask); |
| 35 | } |
| 36 | |
| 37 | void bitmap_fill_range(bitmap *b, unsigned long n, unsigned long m) |
| 38 | { |