On Mon, Nov 17, 2025 at 07:06:57AM -0800, Sean Christopherson wrote:
That means your build is picking up stale kernel headers (likely the ones installed system-wide). The "#include <asm/kvm.h>" in kvm_util.h is what pulls in the kernel uAPI headers.
Selftests uapi headers are a bit of a mess. In the past, selftests would automatically do "make headers_install" as part of the build, but commit 3bb267a36185 ("selftests: drop khdr make target") yanked that out because there are scenarios where it broke the build.
So the "right" way to build selftest is to first do "make headers_install", and then build selftests.
Note, if you build KVM selftests directly, tools/testing/selftests/lib.mk will define the includes to be relative to the source directory, i.e. expects the headers to be installed in the source.
ifeq ($(KHDR_INCLUDES),) KHDR_INCLUDES := -isystem $(top_srcdir)/usr/include endif
You can explicitly set KHDR_INCLUDES when building if you install headers somewhere else. E.g. my build invocation looks something like this, where "$output" is an out-of-tree directory.
KHDR_INCLUDES="-isystem $output/usr/include" EXTRA_CFLAGS="-static -Werror -gdwarf-4" make \ INSTALL_HDR_PATH="$output/usr" OUTPUT=$output
Hi Sean, Thanks for pointing it out, i am not aware of these details. Will take care of this now onwards
Thank you -- Ankit