LinuxKPI: Add bitmap_to_arr32() to <linux/bitmap.h>

bitmap_to_arr32() copies contents of bitmap to a uint32_t array of bits

Required by:	drm-kmod 5.15-lts
Reviewed by:	manu
Differential Revision:	https://reviews.freebsd.org/D39552
This commit is contained in:
Vladimir Kondratyev 2023-04-22 11:29:29 +03:00
parent b14c03f808
commit e5cf9deb61

View File

@ -288,6 +288,26 @@ bitmap_copy(unsigned long *dst, const unsigned long *src,
dst[i] = src[i];
}
static inline void
bitmap_to_arr32(uint32_t *dst, const unsigned long *src, unsigned int size)
{
const unsigned int end = howmany(size, 32);
#ifdef __LP64__
unsigned int i = 0;
while (i < end) {
dst[i++] = (uint32_t)(*src & UINT_MAX);
if (i < end)
dst[i++] = (uint32_t)(*src >> 32);
src++;
}
#else
bitmap_copy(dst, src, size);
#endif
if ((size % 32) != 0) /* Linux uses BITS_PER_LONG. Seems to be a bug */
dst[end - 1] &= (uint32_t)(UINT_MAX >> (32 - (size % 32)));
}
static inline void
bitmap_or(unsigned long *dst, const unsigned long *src1,
const unsigned long *src2, const unsigned int size)