Re: [PATCH] tools/include/linux/bitops.h: undef PAGE_SIZE after including limits.h
From: Sean Christopherson
Date: Tue Sep 29 2026 - 09:59:55 EST
On Fri, May 08, 2026, Hisam Mehboob wrote:
> musl libc defines PAGE_SIZE as a signed int in <limits.h>
> under _GNU_SOURCE, conflicting with kernel headers that
> require an unsigned 64-bit definition:
>
> include/x86/processor.h:372:9: warning: 'PAGE_SIZE' redefined
> /usr/include/x86_64-linux-musl/limits.h:97:9: note: this is the
> location of the previous definition
>
> Undefine PAGE_SIZE immediately after the #include <limits.h> to
> prevent musl's definition from leaking into kernel headers. This
> is a no-op on glibc, which does not define PAGE_SIZE in <limits.h>.
Sorry, but I don't like this option either, as it only works if whatever defines
PAGE_SIZE is included after <limits.h>, and obviously doesn't help if something
includes <limits.h> directly without including bitops.h. Which might not happen
in the current code base, but given that building against musl is obviously not
very common, it's not hard to imagine such an issue "sneaking" in.
What if we explicity force an include+undef in the KVM selftests header that has
the requirement that PAGE_SIZE is a 64-bit unsigned value? The downside is that
it would hide bugs if something other than musl pre-defines PAGE_SIZE, but that's
unlikely to be fatal, and I don't think would lead to a game of whack-a-mole.
diff --git a/tools/testing/selftests/kvm/include/x86/processor.h b/tools/testing/selftests/kvm/include/x86/processor.h
index 7579e692bc2b..ee8186e75552 100644
--- a/tools/testing/selftests/kvm/include/x86/processor.h
+++ b/tools/testing/selftests/kvm/include/x86/processor.h
@@ -6,6 +6,14 @@
#ifndef SELFTEST_KVM_PROCESSOR_H
#define SELFTEST_KVM_PROCESSOR_H
+/*
+ * Explicitly include the system's limit.h and undefine PAGE_SIZE to workaround
+ * an incompatibility where musl defines PAGE_SIZE as a signed integer, whereas
+ * KVM selftests expect it to be a 64-bit unsigned value.
+ */
+#include <limits.h>
+#undef PAGE_SIZE
+
#include <assert.h>
#include <stdint.h>
#include <syscall.h>
> Reported-by: Aqib Faruqui <aqibaf@xxxxxxxxxx>
> Link: https://lore.kernel.org/kvm/aL8e0MMa4U2-nstQ@xxxxxxxxxx/
> Signed-off-by: Hisam Mehboob <hisamshar@xxxxxxxxx>
> ---
> tools/include/linux/bitops.h | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/tools/include/linux/bitops.h b/tools/include/linux/bitops.h
> index b4e4cd071f8c..62117a77ceb5 100644
> --- a/tools/include/linux/bitops.h
> +++ b/tools/include/linux/bitops.h
> @@ -4,6 +4,7 @@
>
> #include <asm/types.h>
> #include <limits.h>
> +#undef PAGE_SIZE
> #ifndef __WORDSIZE
> #define __WORDSIZE (__SIZEOF_LONG__ * 8)
> #endif
> --
> 2.51.0
>
>