git: e5cf9deb61fd - main - LinuxKPI: Add bitmap_to_arr32() to <linux/bitmap.h>
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 22 Apr 2023 08:30:40 UTC
The branch main has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=e5cf9deb61fdc52c7647f4669a64d3fae126db94 commit e5cf9deb61fdc52c7647f4669a64d3fae126db94 Author: Vladimir Kondratyev <wulf@FreeBSD.org> AuthorDate: 2023-04-22 08:29:29 +0000 Commit: Vladimir Kondratyev <wulf@FreeBSD.org> CommitDate: 2023-04-22 08:29:29 +0000 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 --- sys/compat/linuxkpi/common/include/linux/bitmap.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/sys/compat/linuxkpi/common/include/linux/bitmap.h b/sys/compat/linuxkpi/common/include/linux/bitmap.h index 1ae6078966a4..4e156377cdaf 100644 --- a/sys/compat/linuxkpi/common/include/linux/bitmap.h +++ b/sys/compat/linuxkpi/common/include/linux/bitmap.h @@ -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)