Macros like BITS_TO_LONGS defined in <linux/bitops.h> expand to DIV_ROUND_UP, which isn't defined in the same file. We can't easily include <linux/math.h> however as this leads to a recursive file inclusion: In file included from ./include/asm-generic/div64.h:53, from ./include/linux/math64.h:7, from ./include/linux/math.h:6, from ./include/linux/bitops.h:9, from ./include/clock.h:7, from ./include/console.h:15, from ./include/stdio.h:6, from ./include/common.h:10, from ./common/partitions/dos.c:15: ./include/linux/log2.h: In function '__ilog2_u32': ./include/linux/log2.h:28:16: error: implicit declaration of function 'fls' [-Wimplicit-function-declaration] 28 | return fls(n) - 1; Fix this by doing it like Linux does and use the UAPI __KERNEL_DIV_ROUND_UP definition instead. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- include/linux/bitops.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/include/linux/bitops.h b/include/linux/bitops.h index 7646e1563478..44602ad5af84 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h @@ -7,12 +7,14 @@ #include <linux/const.h> #include <linux/bits.h> +#include <uapi/linux/kernel.h> + #ifdef __KERNEL__ #define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE) -#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(long)) -#define BITS_TO_U64(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(u64)) -#define BITS_TO_U32(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(u32)) -#define BITS_TO_BYTES(nr) DIV_ROUND_UP(nr, BITS_PER_TYPE(char)) +#define BITS_TO_LONGS(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(long)) +#define BITS_TO_U64(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u64)) +#define BITS_TO_U32(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(u32)) +#define BITS_TO_BYTES(nr) __KERNEL_DIV_ROUND_UP(nr, BITS_PER_TYPE(char)) #define BYTES_TO_BITS(nb) (((BITS_PER_LONG * (nb)) / sizeof(long))) #endif -- 2.39.5