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:
parent
b14c03f808
commit
e5cf9deb61
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user