Messages in this thread | | | From | Rasmus Villemoes <> | Date | Tue, 14 Nov 2017 08:23:44 +0100 | Subject | Re: [PATCH] lib: Avoid redundant sizeof checking in __bitmap_weight() calculation. |
| |
On 14 November 2017 at 07:57, Rakib Mullick <rakib.mullick@gmail.com> wrote: > Currently, during __bitmap_weight() calculation hweight_long() is used. > Inside a hweight_long() a check has been made to figure out whether a > hweight32() or hweight64() version to use. > > diff --git a/lib/bitmap.c b/lib/bitmap.c > index d8f0c09..552096f 100644 > --- a/lib/bitmap.c > +++ b/lib/bitmap.c > @@ -241,10 +241,15 @@ EXPORT_SYMBOL(__bitmap_subset); > int __bitmap_weight(const unsigned long *bitmap, unsigned int bits) > { > unsigned int k, lim = bits/BITS_PER_LONG; > - int w = 0; > - > - for (k = 0; k < lim; k++) > - w += hweight_long(bitmap[k]); > + int w = 0, is32 = sizeof(bitmap[0]) ? 1 : 0; > +
hint: sizeof() very rarely evaluates to zero... So this is the same as "is32 = 1". So the patch as-is is broken (and may explain the 1-byte delta in vmlinux). But even if this condition is fixed, the patch doesn't change anything, since the sizeof() evaluation is done at compile-time, regardless of whether it happens inside the inlined hweight_long or outside. So it is certainly not worth it to duplicate the loop.
Rasmus
| |