On Thu, Apr 28, 2022 at 01:51:13PM -0700, Yury Norov wrote: > Manipulating 64-bit arrays with bitmap functions is potentially dangerous > because on 32-bit BE machines the order of halfwords doesn't match. > Another issue is that compiler may throw a warning about out-of-boundary > access. > > This patch adds bitmap_{from,to}_arr64 functions in addition to existing > bitmap_{from,to}_arr32. ... > + bitmap_copy_clear_tail((unsigned long *) (bitmap), \ > + (const unsigned long *) (buf), (nbits)) Drop spaces after castings. Besides that it might be placed on a single line. ... > + bitmap_copy_clear_tail((unsigned long *) (buf), \ > + (const unsigned long *) (bitmap), (nbits)) Ditto. ... > +void bitmap_to_arr64(u64 *buf, const unsigned long *bitmap, unsigned int nbits) > +{ > + const unsigned long *end = bitmap + BITS_TO_LONGS(nbits); > + > + while (bitmap < end) { > + *buf = *bitmap++; > + if (bitmap < end) > + *buf |= (u64)(*bitmap++) << 32; > + buf++; > + } > > + /* Clear tail bits in last element of array beyond nbits. */ > + if (nbits % 64) > + buf[-1] &= GENMASK_ULL(nbits, 0); Hmm... if nbits is > 0 and < 64, wouldn't be this problematic, since end == bitmap? Or did I miss something? > +} -- With Best Regards, Andy Shevchenko