X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=include%2Flinux%2Fbitmap.h;fp=include%2Flinux%2Fbitmap.h;h=a1460b5fc7b126055dffbdbb84cfa44eb32b86c5;hb=16c70f8c1b54b61c3b951b6fb220df250fe09b32;hp=cff80436fcb78aa87d5af90748b05fcc0c0c15e3;hpb=4e76c8a9fa413ccc09d3f7f664183dcce3555d57;p=linux-2.6.git diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index cff80436f..a1460b5fc 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h @@ -24,6 +24,9 @@ * The available bitmap operations and their rough meaning in the * case that the bitmap is a single unsigned long are thus: * + * Note that nbits should be always a compile time evaluable constant. + * Otherwise many inlines will generate horrible code. + * * bitmap_zero(dst, nbits) *dst = 0UL * bitmap_fill(dst, nbits) *dst = ~0UL * bitmap_copy(dst, src, nbits) *dst = *src @@ -244,6 +247,8 @@ static inline int __must_check bitmap_full(const unsigned long *src, int nbits) static inline int __must_check bitmap_weight(const unsigned long *src, int nbits) { + if (nbits <= BITS_PER_LONG) + return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits)); return __bitmap_weight(src, nbits); }