|
@@ -319,6 +319,9 @@ static __always_inline void bitmap_set(unsigned long *map, unsigned int start,
|
|
|
{
|
|
|
if (__builtin_constant_p(nbits) && nbits == 1)
|
|
|
__set_bit(start, map);
|
|
|
+ else if (__builtin_constant_p(start & 7) && IS_ALIGNED(start, 8) &&
|
|
|
+ __builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8))
|
|
|
+ memset((char *)map + start / 8, 0xff, nbits / 8);
|
|
|
else
|
|
|
__bitmap_set(map, start, nbits);
|
|
|
}
|
|
@@ -328,6 +331,9 @@ static __always_inline void bitmap_clear(unsigned long *map, unsigned int start,
|
|
|
{
|
|
|
if (__builtin_constant_p(nbits) && nbits == 1)
|
|
|
__clear_bit(start, map);
|
|
|
+ else if (__builtin_constant_p(start & 7) && IS_ALIGNED(start, 8) &&
|
|
|
+ __builtin_constant_p(nbits & 7) && IS_ALIGNED(nbits, 8))
|
|
|
+ memset((char *)map + start / 8, 0, nbits / 8);
|
|
|
else
|
|
|
__bitmap_clear(map, start, nbits);
|
|
|
}
|