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];
|
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
|
static inline void
|
||||||
bitmap_or(unsigned long *dst, const unsigned long *src1,
|
bitmap_or(unsigned long *dst, const unsigned long *src1,
|
||||||
const unsigned long *src2, const unsigned int size)
|
const unsigned long *src2, const unsigned int size)
|
||||||
|
Loading…
Reference in New Issue
Block a user