Hi Alan,

On Fri Apr 10, 2026 at 7:06 AM -03, Alan Maguire wrote:
> On 06/04/2026 19:22, Ricardo B. Marlière wrote:
>> Currently the BPF selftests can only be built by using the minimum kernel
>> configuration defined in tools/testing/selftests/bpf/config*. This poses a
>> problem in distribution kernels that may have some of the flags disabled or
>> set as module. For example, we have been running the tests regularly in
>> openSUSE Tumbleweed [1] [2] but to work around this fact we created a
>> special package [3] that build the tests against an auxiliary vmlinux with
>> the BPF Kconfig. We keep a list of known issues that may happen due to,
>> amongst other things, configuration mismatches [4] [5].
>> 
>> The maintenance of this package is far from ideal, especially for
>> enterprise kernels. The goal of this series is to enable the common usecase
>> of running the following in any system:
>> 
>> ```sh
>> make -C tools/testing/selftests install \
>>         SKIP_TARGETS= \
>>         TARGETS=bpf \
>>         O=/lib/modules/$(uname -r)/build
>> ```
>> 
>> As an example, the following script targeting a minimal config can be used
>> for testing:
>> 
>> ```sh
>> make defconfig
>> scripts/config --file .config \
>>                --enable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT \
>>                --enable DEBUG_INFO_BTF \
>>                --enable BPF_SYSCALL \
>>                --enable BPF_JIT
>> make olddefconfig
>> make -j$(nproc)
>> make -j$(nproc) -C tools/testing/selftests SKIP_TARGETS= TARGETS=bpf install
>> ```
>> 
>> This produces a test_progs binary with 579 subtests, against the total of
>> 708. Many of them will still fail or be skipped at runtime due to lack of
>> symbols, but at least there will be a clear way of building the tests.
>>
>
> hi Ricardo, I've been looking at this series and one concern I had was if
> tolerating failures to build with incomplete config would create problems
> in detecting failures when the config is complete, i.e. in BPF CI. So for
> example if say a BPF skeleton didn't compile when it really should due to 
> an introduced bug, we wouldn't want to drive on in all cases.

Agreed.

>
> However, from what I can see, CI held up well with these changes in place [1].
>
> That said it might be nice to preserve a "strict" mode which fails when
> we hit compilation issues etc, failing as we do today; I couldn't find any 
> existing 
> general kselftest concept that fits with that but it would be valuable I think
> if possible. Perhaps we could default to non-strict mode when a make -C is 
> initiated
> or something like that, and continue to operate strictly when building 
> directly
> in tools/testing/selftests/bpf?
>
> I ran the changes through the usual workflow I use - build bpf selftests at
> tools/testing/selftests/bpf level and run ./test_progs ; no regressions were
> observed, so feel free to add for the series
>
> Tested-by: Alan Maguire <[email protected]>

Thanks for testing!

>
> There are some comments on sashiko.dev [2] that would be worth looking through
> too, in particular the concern about O= and M= mentioned for patch 1.

I will send v5 with those addressed and possibly a strict-mode switch.

>
> [1] https://github.com/kernel-patches/bpf/actions/runs/24168181680
> [2] 
> https://sashiko.dev/#/patchset/20260406-selftests-bpf_misconfig-v4-0-9914f50efdf7%40suse.com
>  > [1]: https://openqa.opensuse.org/tests/5811715
>> [2]: https://openqa.opensuse.org/tests/5811730
>> [3]: https://src.opensuse.org/rmarliere/kselftests
>> [4]: 
>> https://github.com/openSUSE/kernel-qe/blob/main/kselftests_known_issues.yaml
>> [5]: 
>> https://openqa.opensuse.org/tests/5811730/logfile?filename=run_kselftests-config_mismatches.txt
>> 
>> Assisted-by: {codex,claude}
>> Signed-off-by: Ricardo B. Marlière <[email protected]>
>> ---
>> Changes in v4:
>> - Drop the test_kmods kselftest module flow patch: lib.mk gen_mods_dir
>>   invokes $(MAKE) -C $(TEST_GEN_MODS_DIR) without forwarding
>>   RESOLVE_BTFIDS, breaking ASAN and GCC BPF CI builds (Makefile.modfinal
>>   cannot find resolve_btfids in the kbuild output tree)
>> - Link to v3:
>>   
>> https://patch.msgid.link/[email protected]
>> 
>> Changes in v3:
>> - Split test_kmods patch into two: fix KDIR handling (O= passthrough,
>>   EXTRA_CFLAGS/EXTRA_LDFLAGS clearing) and wire into lib.mk via
>>   TEST_GEN_MODS_DIR
>> - Pass O= through to the kernel module build so artifacts land in the
>>   output tree, not the source tree
>> - Clear EXTRA_CFLAGS and EXTRA_LDFLAGS when invoking the kernel build to
>>   prevent host flags (e.g. -static) leaking into module compilation
>> - Replace the bespoke test_kmods pattern rule with lib.mk module
>>   infrastructure (TEST_GEN_MODS_DIR); lib.mk now drives build and clean
>>   lifecycle
>> - Make the .ko copy step resilient: emit SKIP instead of failing when a
>>   module is absent
>> - Expand the uprobe weak stub comment in bpf_cookie.c to explain why
>>   noinline is required
>> - Link to v2:
>>   
>> https://patch.msgid.link/[email protected]
>> 
>> Changes in v2:
>> - Skip test_kmods build/clean when KDIR directory does not exist
>> - Use `Module.symvers` instead of `.config` for in-tree detection
>> - Fix skeleton order-only prereqs commit message
>> - Guard BTFIDS step when .test.o is absent
>> - Add `__weak stack_mprotect()` stubs in `bpf_cookie.c` and `iters.c`
>> - Link to v1:
>>   
>> https://patch.msgid.link/[email protected]
>> 
>> ---
>> Ricardo B. Marlière (10):
>>       selftests/bpf: Fix test_kmods KDIR to honor O= and distro kernels
>>       selftests/bpf: Tolerate BPF and skeleton generation failures
>>       selftests/bpf: Avoid rebuilds when running emit_tests
>>       selftests/bpf: Make skeleton headers order-only prerequisites of 
>> .test.d
>>       selftests/bpf: Tolerate test file compilation failures
>>       selftests/bpf: Allow test_progs to link with a partial object set
>>       selftests/bpf: Tolerate benchmark build failures
>>       selftests/bpf: Provide weak definitions for cross-test functions
>>       selftests/bpf: Skip tests whose objects were not built
>>       selftests/bpf: Tolerate missing files during install
>> 
>>  tools/testing/selftests/bpf/Makefile               | 113 
>> ++++++++++++++-------
>>  .../testing/selftests/bpf/prog_tests/bpf_cookie.c  |  24 ++++-
>>  tools/testing/selftests/bpf/prog_tests/iters.c     |  10 +-
>>  tools/testing/selftests/bpf/test_kmods/Makefile    |  15 ++-
>>  tools/testing/selftests/bpf/test_progs.c           |   7 +-
>>  5 files changed, 120 insertions(+), 49 deletions(-)
>> ---
>> base-commit: a1aa9ef47c299c5bbc30594d3c2f0589edf908e6
>> change-id: 20260401-selftests-bpf_misconfig-4c33ef5c56da
>> 
>> Best regards,
>> --  
>> Ricardo B. Marlière <[email protected]>
>> 
>> 


Reply via email to