Re: [PATCH v2] KVM: selftests: Replace ulong with unsigned long

David Matlack <[email protected]>
Newsgroups org.kernel.vger.kvm,org.kernel.vger.linux-kselftest
Message-ID <CALzav=fs4bqMM7BXNPXqhtbqGzA+LW5fgx2-1Q5=sTN5+krYhw@mail.gmail.com>
On Tue, Aug 18, 2026 at 2:03 PM Hisam Mehboob <[email protected]> wrote:
>
> On 8/19/26 00:28, Sean Christopherson wrote:
> > +David for the VFIO thing
> >
> > On Tue, Aug 18, 2026, Hisam Mehboob wrote:
> >> On 8/18/26 21:27, Sean Christopherson wrote:
> >>
> >>> Oh, so on top of "https://github.com/kvm-x86/linux.git next", this *is* the last
> >>> blocker?  If so, then I'll grab this for 7.3.
> >>
> >> Not quite -- I tested kvm-x86/next + this patch with musl-gcc, and the
> >> build still fails. On top of the steal_time fix already in your tree,
> >> two more musl blockers remain, both from code that is only in
> >> kvm-x86/next so far:
> >>
> >> 1. hardware_disable_test.c, from 496779b54943 ("Pre-set threads affinity
> >>     in hardware disable test when possible"):
> >>
> >>       hardware_disable_test.c:75: error: implicit declaration of function
> >>       'pthread_attr_setaffinity_np'
> >>
> >>     The call sits under #ifdef _GNU_SOURCE, but lib.mk defines _GNU_SOURCE
> >>     unconditionally, so the path is always taken and musl (which lacks the
> >>     function) breaks.
> >
> > Heh, Sashiko flagged that as problematic, and I was trying to figure out which
> > macro to key off of[*], but was (obviously) unsuccessful.  I don't suppose you
> > know the canonical way for checking for support of glibc-only functionality of
> > this nature?
> >
> > [*] https://lore.kernel.org/all/[email protected]
> >
>
> __GLIBC__ is the pragmatic in-tree answer.
> _GNU_SOURCE is a request macro (input to the libc headers), not an
> availability indicator -- lib.mk defines it unconditionally, so it
> cannot detect anything. __USE_GNU works but is glibc-internal.
> __GLIBC__ is defined by glibc's <features.h>, which any libc header
> pulls in, and is the established idiom in selftests already:
> kvm/lib/assert.c uses "#ifdef __GLIBC__" for execinfo.h, as do
> bpf/test_progs.c and nolibc. musl deliberately provides no __MUSL__ --
> its FAQ's stance is "test for properties, don't assume them", which
> strictly implies a compile test (autoconf-style); with no configure
> step in selftests, __GLIBC__ is the established in-tree idiom. For
> hardware_disable_test.c that is s/_GNU_SOURCE/__GLIBC__/ in the three
> spots; build-tested with musl-gcc, passes.
>
> >>
> >> 2. The libvfio wiring from a262fc49e0aa ("Build and link
> >>     selftests/vfio/lib into KVM selftests"):
> >>
> >>       vfio_pci_device.c:25: fatal error: uuid/uuid.h: No such file or
> >> directory
> >>       sysfs.c:31: error: implicit declaration of function 'basename'
> >>
> >>     The former adds a hard libuuid dependency (its headers aren't visible
> >>     to musl-gcc here);
> >
> > Can you elaborate on what you mean by "its headers aren't visible to musl-gcc"?
>
> musl-gcc searches only its own include directories
> (here: /usr/include/x86_64-linux-musl and gcc's internal dir) and
> deliberately not /usr/include, to avoid mixing glibc-oriented headers
> with musl. uuid/uuid.h comes from libuuid (util-linux) and is installed
> at /usr/include/uuid/uuid.h for the glibc toolchain, so glibc builds
> find it and musl builds cannot. I see 2f0c30d0d1 already limits the
> libvfio link to x86; the remaining gap on x86 is that libuuid is now a
> hard dependency of the KVM selftests build (libvfio.mk adds -luuid),
> and for musl-x86 the header is not visible at all without a
> musl-targeted libuuid install. A uuid.h compile check to skip the vfio
> pieces would keep it optional; otherwise the new dependency is probably
> worth documenting.

libuuid is required to build libvfio, which VFIO and KVM selftests
both depend on.

How is this problem solved for other libraries, like -lpthread?

> >
> >>     the latter because musl declares basename only in
> >>     <libgen.h>, while glibc exposes it via <string.h> under _GNU_SOURCE.
> >
> > IIUC, sysfs.c just needs to explicitly include libgen.h?
>
> Yes, adding <libgen.h> suffices. One nuance: there are two
> flavors -- glibc under _GNU_SOURCE provides the GNU variant via
> <string.h> (char *basename(const char *), non-modifying), while
> <libgen.h> provides the POSIX variant (char *basename(char *), may
> modify) and takes precedence on glibc as well. Safe at this call site:
> rl_path is a writable buffer filled by readlink() (no trailing
> slashes), used once by sscanf(). Verified with compile tests on both
> libcs, and with <libgen.h> added, uuid/uuid.h is the only remaining
> musl failure in the whole build.

Feel free to send a patch, or I can if you prefer.


>
> >> The rseq __GNUC_PREREQ failure is already covered by my patch in
> >> linux-next. With the above sorted, the musl build passes.
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.