lkml.org 
[lkml]   [2004]   [Jan]   [16]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateFri, 16 Jan 2004 00:35:20 -0800
FromAndrew Morton <>
SubjectRe: seperator error in __mask_snprintf_len
Andi Kleen <ak@muc.de> wrote:
>
> Andrew Morton <akpm@osdl.org> writes:
> 
> > +void bitmap_complement(unsigned long *bitmap, int bits)
> > +{
> > +	int k;
> > +
> > +	for (k = 0; k < BITS_TO_LONGS(bits); ++k)
> > +		bitmap[k] = ~bitmap[k];
> > +}
> > +EXPORT_SYMBOL(bitmap_complement);
> 
> I actually had to change that one in my NUMA API patchkit (which uses
> bitmap functions for its node maps), because gcc 3.2 miscompiled the
> loop.
>
> Please add something like that (looks silly, but makes a big 
> difference):
> 
>  static inline void bitmap_complement(unsigned long *bitmap, int bits)
>  {
>         int k;
> +       int max = BITS_TO_LONGS(bits);
> 
> -       for (k = 0; k < BITS_TO_LONGS(bits); ++k)
> +       for (k = 0; k < max; ++k)
>                 bitmap[k] = ~bitmap[k];

OK.  bitmap_and() and bitmap_or() were converted to this form a while back
because they too were hitting the bug.  On ia32.  It might no longer
happen now they're uninlined but whatever - you don't have to look
at the code and think "gee, I hope the compiler moves that arith out
of the loop".




-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:00    [from the cache]
©2003-2008