On 11/11/24 11:52, Toke Høiland-Jørgensen wrote: > The selftests build four kernel modules which use copy-pasted Makefile > targets. This is a bit messy, and doesn't scale so well when we add more > modules, so let's consolidate these rules into a single rule generated > for each module name, and move the module sources into a single > directory. > > To avoid parallel builds of the different modules stepping on each > other's toes during the 'modpost' phase of the Kbuild 'make modules', we > annotate the module copy target as .NOTPARALLEL, which makes all > its *dependencies* execute sequentially regardless of whether make is > doing parallel builds or not. This means the recursive make calls into > the test_kmods directory will be serialised, and when the first one > actually builds all four modules in the subdirectory, make will > correctly skip the three other calls, so we end up with just one build > of the subdir modules. > > Signed-off-by: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> Acked-by: Viktor Malik <vmalik@xxxxxxxxxx> Viktor > --- > Changes in v3: > - Use .NOTPARALLEL annotation instead of creating a modules.built file > - Link to v2: https://lore.kernel.org/r/20241107-bpf-selftests-mod-compile-v2-1-ef781fe9ca95@xxxxxxxxxx > > Changes in v2: > - Rebase on bpf-next, incorporating Viktor's EXTRA_CFLAGS patch > - A few small adjustments to the module Makefile recipe > - Link to v1: https://lore.kernel.org/r/20241031-bpf-selftests-mod-compile-v1-1-1a63af2385f1@xxxxxxxxxx > --- > tools/testing/selftests/bpf/Makefile | 63 +++++++--------------- > .../selftests/bpf/bpf_test_modorder_x/Makefile | 19 ------- > .../selftests/bpf/bpf_test_modorder_y/Makefile | 19 ------- > .../testing/selftests/bpf/bpf_test_no_cfi/Makefile | 19 ------- > tools/testing/selftests/bpf/bpf_testmod/Makefile | 20 ------- > .../testing/selftests/bpf/prog_tests/core_reloc.c | 2 +- > tools/testing/selftests/bpf/progs/bad_struct_ops.c | 2 +- > tools/testing/selftests/bpf/progs/cb_refs.c | 2 +- > tools/testing/selftests/bpf/progs/epilogue_exit.c | 4 +- > .../selftests/bpf/progs/epilogue_tailcall.c | 4 +- > tools/testing/selftests/bpf/progs/iters_testmod.c | 2 +- > tools/testing/selftests/bpf/progs/jit_probe_mem.c | 2 +- > .../selftests/bpf/progs/kfunc_call_destructive.c | 2 +- > .../testing/selftests/bpf/progs/kfunc_call_fail.c | 2 +- > .../testing/selftests/bpf/progs/kfunc_call_race.c | 2 +- > .../testing/selftests/bpf/progs/kfunc_call_test.c | 2 +- > .../selftests/bpf/progs/kfunc_call_test_subprog.c | 2 +- > .../testing/selftests/bpf/progs/local_kptr_stash.c | 2 +- > tools/testing/selftests/bpf/progs/map_kptr.c | 2 +- > tools/testing/selftests/bpf/progs/map_kptr_fail.c | 2 +- > tools/testing/selftests/bpf/progs/missed_kprobe.c | 2 +- > .../selftests/bpf/progs/missed_kprobe_recursion.c | 2 +- > tools/testing/selftests/bpf/progs/nested_acquire.c | 2 +- > tools/testing/selftests/bpf/progs/pro_epilogue.c | 4 +- > .../selftests/bpf/progs/pro_epilogue_goto_start.c | 4 +- > tools/testing/selftests/bpf/progs/sock_addr_kern.c | 2 +- > .../selftests/bpf/progs/struct_ops_detach.c | 2 +- > .../selftests/bpf/progs/struct_ops_forgotten_cb.c | 2 +- > .../selftests/bpf/progs/struct_ops_maybe_null.c | 2 +- > .../bpf/progs/struct_ops_maybe_null_fail.c | 2 +- > .../selftests/bpf/progs/struct_ops_module.c | 2 +- > .../selftests/bpf/progs/struct_ops_multi_pages.c | 2 +- > .../selftests/bpf/progs/struct_ops_nulled_out_cb.c | 2 +- > .../bpf/progs/test_kfunc_param_nullable.c | 2 +- > .../selftests/bpf/progs/test_module_attach.c | 2 +- > .../selftests/bpf/progs/test_tp_btf_nullable.c | 2 +- > .../testing/selftests/bpf/progs/unsupported_ops.c | 2 +- > tools/testing/selftests/bpf/progs/wq.c | 2 +- > tools/testing/selftests/bpf/progs/wq_failures.c | 2 +- > .../bpf/{bpf_testmod => test_kmods}/.gitignore | 0 > tools/testing/selftests/bpf/test_kmods/Makefile | 21 ++++++++ > .../bpf_test_modorder_x.c | 0 > .../bpf_test_modorder_y.c | 0 > .../bpf_test_no_cfi.c | 0 > .../bpf_testmod-events.h | 0 > .../bpf/{bpf_testmod => test_kmods}/bpf_testmod.c | 0 > .../bpf/{bpf_testmod => test_kmods}/bpf_testmod.h | 0 > .../bpf_testmod_kfunc.h | 0 > 48 files changed, 79 insertions(+), 158 deletions(-) > > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile > index edef5df08cb2536260f8910b2ebd2b89dbd0ebd2..66c2f95b61ca5d0dcf5b8007bf09e5e4f0870780 100644 > --- a/tools/testing/selftests/bpf/Makefile > +++ b/tools/testing/selftests/bpf/Makefile > @@ -152,13 +152,15 @@ TEST_PROGS_EXTENDED := with_addr.sh \ > with_tunnels.sh ima_setup.sh verify_sig_setup.sh \ > test_xdp_vlan.sh test_bpftool.py > > +TEST_KMODS := bpf_testmod.ko bpf_test_no_cfi.ko bpf_test_modorder_x.ko \ > + bpf_test_modorder_y.ko > +TEST_KMOD_TARGETS = $(addprefix $(OUTPUT)/,$(TEST_KMODS)) > + > # Compile but not part of 'make run_tests' > TEST_GEN_PROGS_EXTENDED = \ > flow_dissector_load test_flow_dissector test_tcp_check_syncookie_user \ > - test_lirc_mode2_user xdping test_cpp runqslower bench bpf_testmod.ko \ > - xskxceiver xdp_redirect_multi xdp_synproxy veristat xdp_hw_metadata \ > - xdp_features bpf_test_no_cfi.ko bpf_test_modorder_x.ko \ > - bpf_test_modorder_y.ko > + test_lirc_mode2_user xdping test_cpp runqslower bench xskxceiver \ > + xdp_redirect_multi xdp_synproxy veristat xdp_hw_metadata xdp_features > > TEST_GEN_FILES += liburandom_read.so urandom_read sign-file uprobe_multi > > @@ -173,8 +175,9 @@ override define CLEAN > $(Q)$(RM) -r $(TEST_GEN_PROGS) > $(Q)$(RM) -r $(TEST_GEN_PROGS_EXTENDED) > $(Q)$(RM) -r $(TEST_GEN_FILES) > + $(Q)$(RM) -r $(TEST_KMODS) > $(Q)$(RM) -r $(EXTRA_CLEAN) > - $(Q)$(MAKE) -C bpf_testmod clean > + $(Q)$(MAKE) -C test_kmods clean > $(Q)$(MAKE) docs-clean > endef > > @@ -240,7 +243,7 @@ endif > # to build individual tests. > # NOTE: Semicolon at the end is critical to override lib.mk's default static > # rule for binaries. > -$(notdir $(TEST_GEN_PROGS) \ > +$(notdir $(TEST_GEN_PROGS) $(TEST_KMODS) \ > $(TEST_GEN_PROGS_EXTENDED)): %: $(OUTPUT)/% ; > > # sort removes libbpf duplicates when not cross-building > @@ -294,37 +297,16 @@ $(OUTPUT)/sign-file: ../../../../scripts/sign-file.c > $< -o $@ \ > $(shell $(PKG_CONFIG) --libs libcrypto 2> /dev/null || echo -lcrypto) > > -$(OUTPUT)/bpf_testmod.ko: $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard bpf_testmod/Makefile bpf_testmod/*.[ch]) > - $(call msg,MOD,,$@) > - $(Q)$(RM) bpf_testmod/bpf_testmod.ko # force re-compilation > - $(Q)$(MAKE) $(submake_extras) -C bpf_testmod \ > - RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ > +$(addprefix test_kmods/,$(TEST_KMODS)): $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard test_kmods/Makefile test_kmods/*.[ch]) > + $(Q)$(RM) test_kmods/*.ko test_kmods/*.mod.o # force re-compilation > + $(Q)$(MAKE) $(submake_extras) -C test_kmods \ > + RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ > EXTRA_CFLAGS='' EXTRA_LDFLAGS='' > - $(Q)cp bpf_testmod/bpf_testmod.ko $@ > > -$(OUTPUT)/bpf_test_no_cfi.ko: $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard bpf_test_no_cfi/Makefile bpf_test_no_cfi/*.[ch]) > +.NOTPARALLEL: $(TEST_KMOD_TARGETS) > +$(TEST_KMOD_TARGETS): $(addprefix test_kmods/,$(TEST_KMODS)) > $(call msg,MOD,,$@) > - $(Q)$(RM) bpf_test_no_cfi/bpf_test_no_cfi.ko # force re-compilation > - $(Q)$(MAKE) $(submake_extras) -C bpf_test_no_cfi \ > - RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ > - EXTRA_CFLAGS='' EXTRA_LDFLAGS='' > - $(Q)cp bpf_test_no_cfi/bpf_test_no_cfi.ko $@ > - > -$(OUTPUT)/bpf_test_modorder_x.ko: $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard bpf_test_modorder_x/Makefile bpf_test_modorder_x/*.[ch]) > - $(call msg,MOD,,$@) > - $(Q)$(RM) bpf_test_modorder_x/bpf_test_modorder_x.ko # force re-compilation > - $(Q)$(MAKE) $(submake_extras) -C bpf_test_modorder_x \ > - RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ > - EXTRA_CFLAGS='' EXTRA_LDFLAGS='' > - $(Q)cp bpf_test_modorder_x/bpf_test_modorder_x.ko $@ > - > -$(OUTPUT)/bpf_test_modorder_y.ko: $(VMLINUX_BTF) $(RESOLVE_BTFIDS) $(wildcard bpf_test_modorder_y/Makefile bpf_test_modorder_y/*.[ch]) > - $(call msg,MOD,,$@) > - $(Q)$(RM) bpf_test_modorder_y/bpf_test_modorder_y.ko # force re-compilation > - $(Q)$(MAKE) $(submake_extras) -C bpf_test_modorder_y \ > - RESOLVE_BTFIDS=$(RESOLVE_BTFIDS) \ > - EXTRA_CFLAGS='' EXTRA_LDFLAGS='' > - $(Q)cp bpf_test_modorder_y/bpf_test_modorder_y.ko $@ > + $(Q)cp test_kmods/$(@F) $@ > > > DEFAULT_BPFTOOL := $(HOST_SCRATCH_DIR)/sbin/bpftool > @@ -749,14 +731,12 @@ TRUNNER_EXTRA_SOURCES := test_progs.c \ > json_writer.c \ > flow_dissector_load.h \ > ip_check_defrag_frags.h > -TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ > - $(OUTPUT)/bpf_test_no_cfi.ko \ > - $(OUTPUT)/bpf_test_modorder_x.ko \ > - $(OUTPUT)/bpf_test_modorder_y.ko \ > +TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read \ > $(OUTPUT)/liburandom_read.so \ > $(OUTPUT)/xdp_synproxy \ > $(OUTPUT)/sign-file \ > $(OUTPUT)/uprobe_multi \ > + $(TEST_KMOD_TARGETS) \ > ima_setup.sh \ > verify_sig_setup.sh \ > $(wildcard progs/btf_dump_test_case_*.c) \ > @@ -883,12 +863,9 @@ $(OUTPUT)/uprobe_multi: uprobe_multi.c uprobe_multi.ld > > EXTRA_CLEAN := $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \ > prog_tests/tests.h map_tests/tests.h verifier/tests.h \ > - feature bpftool \ > + feature bpftool $(TEST_KMOD_TARGETS) \ > $(addprefix $(OUTPUT)/,*.o *.d *.skel.h *.lskel.h *.subskel.h \ > - no_alu32 cpuv4 bpf_gcc bpf_testmod.ko \ > - bpf_test_no_cfi.ko \ > - bpf_test_modorder_x.ko \ > - bpf_test_modorder_y.ko \ > + no_alu32 cpuv4 bpf_gcc \ > liburandom_read.so) \ > $(OUTPUT)/FEATURE-DUMP.selftests > > diff --git a/tools/testing/selftests/bpf/bpf_test_modorder_x/Makefile b/tools/testing/selftests/bpf/bpf_test_modorder_x/Makefile > deleted file mode 100644 > index 40b25b98ad1b622c6a5c3c00d0625595349bb677..0000000000000000000000000000000000000000 > --- a/tools/testing/selftests/bpf/bpf_test_modorder_x/Makefile > +++ /dev/null > @@ -1,19 +0,0 @@ > -BPF_TESTMOD_DIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))) > -KDIR ?= $(abspath $(BPF_TESTMOD_DIR)/../../../../..) > - > -ifeq ($(V),1) > -Q = > -else > -Q = @ > -endif > - > -MODULES = bpf_test_modorder_x.ko > - > -obj-m += bpf_test_modorder_x.o > - > -all: > - +$(Q)make -C $(KDIR) M=$(BPF_TESTMOD_DIR) modules > - > -clean: > - +$(Q)make -C $(KDIR) M=$(BPF_TESTMOD_DIR) clean > - > diff --git a/tools/testing/selftests/bpf/bpf_test_modorder_y/Makefile b/tools/testing/selftests/bpf/bpf_test_modorder_y/Makefile > deleted file mode 100644 > index 52c3ab9d84e29c794f57c1f75be03b46d80d4a06..0000000000000000000000000000000000000000 > --- a/tools/testing/selftests/bpf/bpf_test_modorder_y/Makefile > +++ /dev/null > @@ -1,19 +0,0 @@ > -BPF_TESTMOD_DIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))) > -KDIR ?= $(abspath $(BPF_TESTMOD_DIR)/../../../../..) > - > -ifeq ($(V),1) > -Q = > -else > -Q = @ > -endif > - > -MODULES = bpf_test_modorder_y.ko > - > -obj-m += bpf_test_modorder_y.o > - > -all: > - +$(Q)make -C $(KDIR) M=$(BPF_TESTMOD_DIR) modules > - > -clean: > - +$(Q)make -C $(KDIR) M=$(BPF_TESTMOD_DIR) clean > - > diff --git a/tools/testing/selftests/bpf/bpf_test_no_cfi/Makefile b/tools/testing/selftests/bpf/bpf_test_no_cfi/Makefile > deleted file mode 100644 > index ed5143b79edf790b5d4e7213507110e2c6fb4886..0000000000000000000000000000000000000000 > --- a/tools/testing/selftests/bpf/bpf_test_no_cfi/Makefile > +++ /dev/null > @@ -1,19 +0,0 @@ > -BPF_TEST_NO_CFI_DIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))) > -KDIR ?= $(abspath $(BPF_TEST_NO_CFI_DIR)/../../../../..) > - > -ifeq ($(V),1) > -Q = > -else > -Q = @ > -endif > - > -MODULES = bpf_test_no_cfi.ko > - > -obj-m += bpf_test_no_cfi.o > - > -all: > - +$(Q)make -C $(KDIR) M=$(BPF_TEST_NO_CFI_DIR) modules > - > -clean: > - +$(Q)make -C $(KDIR) M=$(BPF_TEST_NO_CFI_DIR) clean > - > diff --git a/tools/testing/selftests/bpf/bpf_testmod/Makefile b/tools/testing/selftests/bpf/bpf_testmod/Makefile > deleted file mode 100644 > index 15cb36c4483ac3b970d93d2e4467cd290917c361..0000000000000000000000000000000000000000 > --- a/tools/testing/selftests/bpf/bpf_testmod/Makefile > +++ /dev/null > @@ -1,20 +0,0 @@ > -BPF_TESTMOD_DIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))) > -KDIR ?= $(abspath $(BPF_TESTMOD_DIR)/../../../../..) > - > -ifeq ($(V),1) > -Q = > -else > -Q = @ > -endif > - > -MODULES = bpf_testmod.ko > - > -obj-m += bpf_testmod.o > -CFLAGS_bpf_testmod.o = -I$(src) > - > -all: > - +$(Q)make -C $(KDIR) M=$(BPF_TESTMOD_DIR) modules > - > -clean: > - +$(Q)make -C $(KDIR) M=$(BPF_TESTMOD_DIR) clean > - > diff --git a/tools/testing/selftests/bpf/prog_tests/core_reloc.c b/tools/testing/selftests/bpf/prog_tests/core_reloc.c > index 1c682550e0e7caa3872970bda26e0a4b3d638a6c..e10ea92c3fe224fc4c7b60c7108e890a524b469a 100644 > --- a/tools/testing/selftests/bpf/prog_tests/core_reloc.c > +++ b/tools/testing/selftests/bpf/prog_tests/core_reloc.c > @@ -2,7 +2,7 @@ > #define _GNU_SOURCE > #include <test_progs.h> > #include "progs/core_reloc_types.h" > -#include "bpf_testmod/bpf_testmod.h" > +#include "test_kmods/bpf_testmod.h" > #include <linux/limits.h> > #include <sys/mman.h> > #include <sys/syscall.h> > diff --git a/tools/testing/selftests/bpf/progs/bad_struct_ops.c b/tools/testing/selftests/bpf/progs/bad_struct_ops.c > index b7e175cd0af0cbc51a16a7d695b52828c40ad0a0..b3f77b4561c8281363b5a083368e5f12dc13d758 100644 > --- a/tools/testing/selftests/bpf/progs/bad_struct_ops.c > +++ b/tools/testing/selftests/bpf/progs/bad_struct_ops.c > @@ -3,7 +3,7 @@ > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/cb_refs.c b/tools/testing/selftests/bpf/progs/cb_refs.c > index 56c764df8196793155d69967ca1c4a28099d2540..5d6fc7f01ebb69e26351f3811ac1551a9e72a414 100644 > --- a/tools/testing/selftests/bpf/progs/cb_refs.c > +++ b/tools/testing/selftests/bpf/progs/cb_refs.c > @@ -2,7 +2,7 @@ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > struct map_value { > struct prog_test_ref_kfunc __kptr *ptr; > diff --git a/tools/testing/selftests/bpf/progs/epilogue_exit.c b/tools/testing/selftests/bpf/progs/epilogue_exit.c > index 33d3a57bee903ea40aa009cef9b69c354fd6e2c2..35fec7c75bef9a59998ee9fe985ab64b63c2e133 100644 > --- a/tools/testing/selftests/bpf/progs/epilogue_exit.c > +++ b/tools/testing/selftests/bpf/progs/epilogue_exit.c > @@ -4,8 +4,8 @@ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/epilogue_tailcall.c b/tools/testing/selftests/bpf/progs/epilogue_tailcall.c > index 7275dd594de0636e7e5d6460bc7813d24539149d..153514691ba4bc5ce24f81f51d23bffdd9773214 100644 > --- a/tools/testing/selftests/bpf/progs/epilogue_tailcall.c > +++ b/tools/testing/selftests/bpf/progs/epilogue_tailcall.c > @@ -4,8 +4,8 @@ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/iters_testmod.c b/tools/testing/selftests/bpf/progs/iters_testmod.c > index df1d3db60b1b12c36c9d56b0ade990f94f95fca6..9e4b45201e692721ddda6a25a866f44ac05fe6a0 100644 > --- a/tools/testing/selftests/bpf/progs/iters_testmod.c > +++ b/tools/testing/selftests/bpf/progs/iters_testmod.c > @@ -4,7 +4,7 @@ > #include "bpf_experimental.h" > #include <bpf/bpf_helpers.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/jit_probe_mem.c b/tools/testing/selftests/bpf/progs/jit_probe_mem.c > index f9789e66829732f174892f4ed85a6db9687f6bf2..82190d79de375642d09416dd971cf2c84ccfcd11 100644 > --- a/tools/testing/selftests/bpf/progs/jit_probe_mem.c > +++ b/tools/testing/selftests/bpf/progs/jit_probe_mem.c > @@ -3,7 +3,7 @@ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > static struct prog_test_ref_kfunc __kptr *v; > long total_sum = -1; > diff --git a/tools/testing/selftests/bpf/progs/kfunc_call_destructive.c b/tools/testing/selftests/bpf/progs/kfunc_call_destructive.c > index 7632d9ecb253ba37d3e85a97cc6a19adc1b08112..b9670e9a6e3df53d1178eb05b437f298ac314fd2 100644 > --- a/tools/testing/selftests/bpf/progs/kfunc_call_destructive.c > +++ b/tools/testing/selftests/bpf/progs/kfunc_call_destructive.c > @@ -1,7 +1,7 @@ > // SPDX-License-Identifier: GPL-2.0 > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > SEC("tc") > int kfunc_destructive_test(void) > diff --git a/tools/testing/selftests/bpf/progs/kfunc_call_fail.c b/tools/testing/selftests/bpf/progs/kfunc_call_fail.c > index 08fae306539c591d89201ec10b9ae7b258eab8a5..a1963497f0bff99a21c305a861ddcc35d16c7d66 100644 > --- a/tools/testing/selftests/bpf/progs/kfunc_call_fail.c > +++ b/tools/testing/selftests/bpf/progs/kfunc_call_fail.c > @@ -2,7 +2,7 @@ > /* Copyright (c) 2021 Facebook */ > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > struct syscall_test_args { > __u8 data[16]; > diff --git a/tools/testing/selftests/bpf/progs/kfunc_call_race.c b/tools/testing/selftests/bpf/progs/kfunc_call_race.c > index d532af07decf954ca168335446daf1a3e34c81b6..48f64827cd934d678ff5ced4369408187df0233e 100644 > --- a/tools/testing/selftests/bpf/progs/kfunc_call_race.c > +++ b/tools/testing/selftests/bpf/progs/kfunc_call_race.c > @@ -1,7 +1,7 @@ > // SPDX-License-Identifier: GPL-2.0 > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > SEC("tc") > int kfunc_call_fail(struct __sk_buff *ctx) > diff --git a/tools/testing/selftests/bpf/progs/kfunc_call_test.c b/tools/testing/selftests/bpf/progs/kfunc_call_test.c > index f502f755f56793d7c0bfa241f0cb79539e1960c4..8b86113a0126162d7ce891ee213927b4e778f612 100644 > --- a/tools/testing/selftests/bpf/progs/kfunc_call_test.c > +++ b/tools/testing/selftests/bpf/progs/kfunc_call_test.c > @@ -2,7 +2,7 @@ > /* Copyright (c) 2021 Facebook */ > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > SEC("tc") > int kfunc_call_test4(struct __sk_buff *skb) > diff --git a/tools/testing/selftests/bpf/progs/kfunc_call_test_subprog.c b/tools/testing/selftests/bpf/progs/kfunc_call_test_subprog.c > index 2380c75e74ce2c8e9914e4304cbddbcdccd54d3c..8e150e85b50d286d34c7e569cfadfc294cc52dd3 100644 > --- a/tools/testing/selftests/bpf/progs/kfunc_call_test_subprog.c > +++ b/tools/testing/selftests/bpf/progs/kfunc_call_test_subprog.c > @@ -1,6 +1,6 @@ > // SPDX-License-Identifier: GPL-2.0 > /* Copyright (c) 2021 Facebook */ > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > extern const int bpf_prog_active __ksym; > int active_res = -1; > diff --git a/tools/testing/selftests/bpf/progs/local_kptr_stash.c b/tools/testing/selftests/bpf/progs/local_kptr_stash.c > index b092a72b2c9df567d8cec37bb9d8645310383670..d736506a4c807feb842dbc749a76c6c51b3270a6 100644 > --- a/tools/testing/selftests/bpf/progs/local_kptr_stash.c > +++ b/tools/testing/selftests/bpf/progs/local_kptr_stash.c > @@ -6,7 +6,7 @@ > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_core_read.h> > #include "../bpf_experimental.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > struct plain_local; > > diff --git a/tools/testing/selftests/bpf/progs/map_kptr.c b/tools/testing/selftests/bpf/progs/map_kptr.c > index ab0ce1d01a4a714c6271e36e8831fc5ffadbb553..edaba481db9d83fb47b255c90369f8dde5448449 100644 > --- a/tools/testing/selftests/bpf/progs/map_kptr.c > +++ b/tools/testing/selftests/bpf/progs/map_kptr.c > @@ -2,7 +2,7 @@ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > struct map_value { > struct prog_test_ref_kfunc __kptr_untrusted *unref_ptr; > diff --git a/tools/testing/selftests/bpf/progs/map_kptr_fail.c b/tools/testing/selftests/bpf/progs/map_kptr_fail.c > index 450bb373b179fc91b028568ee6d787d85147ecbb..c2a6bd392e480e2d32659e94c6904d26ad1ebafe 100644 > --- a/tools/testing/selftests/bpf/progs/map_kptr_fail.c > +++ b/tools/testing/selftests/bpf/progs/map_kptr_fail.c > @@ -4,7 +4,7 @@ > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_core_read.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > struct map_value { > char buf[8]; > diff --git a/tools/testing/selftests/bpf/progs/missed_kprobe.c b/tools/testing/selftests/bpf/progs/missed_kprobe.c > index 7f9ef701f5dee65eb71a4c5236bdf6e570e4ed50..51a4fe64c9175f6aa6f4e0210cb1bbf74b8e4f37 100644 > --- a/tools/testing/selftests/bpf/progs/missed_kprobe.c > +++ b/tools/testing/selftests/bpf/progs/missed_kprobe.c > @@ -2,7 +2,7 @@ > #include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/missed_kprobe_recursion.c b/tools/testing/selftests/bpf/progs/missed_kprobe_recursion.c > index 8ea71cbd6c45160c5c58d61592967489ba9df4ba..c4bf679a987634c711970cf01ce0b041f3f05697 100644 > --- a/tools/testing/selftests/bpf/progs/missed_kprobe_recursion.c > +++ b/tools/testing/selftests/bpf/progs/missed_kprobe_recursion.c > @@ -2,7 +2,7 @@ > #include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/nested_acquire.c b/tools/testing/selftests/bpf/progs/nested_acquire.c > index 8e521a21d995957cd42216418c2607c91c2d5b5f..49ad7b9adf566fc608502649ae5a2885a61f50e6 100644 > --- a/tools/testing/selftests/bpf/progs/nested_acquire.c > +++ b/tools/testing/selftests/bpf/progs/nested_acquire.c > @@ -4,7 +4,7 @@ > #include <bpf/bpf_tracing.h> > #include <bpf/bpf_helpers.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/pro_epilogue.c b/tools/testing/selftests/bpf/progs/pro_epilogue.c > index 44bc3f06b4b612b5520f4cec07c61700beb7949d..d97d6e07ef5c156d1c94c6d7b199c50e3ac293e6 100644 > --- a/tools/testing/selftests/bpf/progs/pro_epilogue.c > +++ b/tools/testing/selftests/bpf/progs/pro_epilogue.c > @@ -4,8 +4,8 @@ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/pro_epilogue_goto_start.c b/tools/testing/selftests/bpf/progs/pro_epilogue_goto_start.c > index 3529e53be35501b19a47626ee5c50895a02e67f1..6048d79be48bfce0555827b8d5ca6678617d3050 100644 > --- a/tools/testing/selftests/bpf/progs/pro_epilogue_goto_start.c > +++ b/tools/testing/selftests/bpf/progs/pro_epilogue_goto_start.c > @@ -4,8 +4,8 @@ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/sock_addr_kern.c b/tools/testing/selftests/bpf/progs/sock_addr_kern.c > index 8386bb15ccdc19728cba21cff5f96403903aff7d..84ad515eafd6c84e2762af06de0e598ede70435b 100644 > --- a/tools/testing/selftests/bpf/progs/sock_addr_kern.c > +++ b/tools/testing/selftests/bpf/progs/sock_addr_kern.c > @@ -2,7 +2,7 @@ > /* Copyright (c) 2024 Google LLC */ > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > SEC("syscall") > int init_sock(struct init_sock_args *args) > diff --git a/tools/testing/selftests/bpf/progs/struct_ops_detach.c b/tools/testing/selftests/bpf/progs/struct_ops_detach.c > index d7fdcabe7d905a439ddfb15a42a92ca29511a706..284a5b008e0c4a6a3eab026f4a366dda7e82a45d 100644 > --- a/tools/testing/selftests/bpf/progs/struct_ops_detach.c > +++ b/tools/testing/selftests/bpf/progs/struct_ops_detach.c > @@ -2,7 +2,7 @@ > /* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/struct_ops_forgotten_cb.c b/tools/testing/selftests/bpf/progs/struct_ops_forgotten_cb.c > index 3c822103bd405b693373824b006c239a85b3a6fa..d8cc99f5c2e2f9832cdc0da18df00a445cc6be40 100644 > --- a/tools/testing/selftests/bpf/progs/struct_ops_forgotten_cb.c > +++ b/tools/testing/selftests/bpf/progs/struct_ops_forgotten_cb.c > @@ -2,7 +2,7 @@ > /* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/struct_ops_maybe_null.c b/tools/testing/selftests/bpf/progs/struct_ops_maybe_null.c > index b450f72e744ad22a78d98bc3b539527abc7e01c6..ccab3935aa425ec8ff9c7d0aa4cb6ce77fc547f7 100644 > --- a/tools/testing/selftests/bpf/progs/struct_ops_maybe_null.c > +++ b/tools/testing/selftests/bpf/progs/struct_ops_maybe_null.c > @@ -2,7 +2,7 @@ > /* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/struct_ops_maybe_null_fail.c b/tools/testing/selftests/bpf/progs/struct_ops_maybe_null_fail.c > index 6283099ec383a38bb11c47c6c8f9d51c6dd220e0..8b5515f4f724e8f12fd8f170acbdcd5fb11cb96b 100644 > --- a/tools/testing/selftests/bpf/progs/struct_ops_maybe_null_fail.c > +++ b/tools/testing/selftests/bpf/progs/struct_ops_maybe_null_fail.c > @@ -2,7 +2,7 @@ > /* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/struct_ops_module.c b/tools/testing/selftests/bpf/progs/struct_ops_module.c > index 4c56d4a9d9f410b42430bd58cd4a0011047e58c7..71c420c3a5a6c7ad8fca16fd3e6432b36027811c 100644 > --- a/tools/testing/selftests/bpf/progs/struct_ops_module.c > +++ b/tools/testing/selftests/bpf/progs/struct_ops_module.c > @@ -3,7 +3,7 @@ > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/struct_ops_multi_pages.c b/tools/testing/selftests/bpf/progs/struct_ops_multi_pages.c > index 9efcc6e4d3566d9814933d0d9a3568a3f10d41b7..5b23ea817f1f90d9db1333e00031bdb669509029 100644 > --- a/tools/testing/selftests/bpf/progs/struct_ops_multi_pages.c > +++ b/tools/testing/selftests/bpf/progs/struct_ops_multi_pages.c > @@ -3,7 +3,7 @@ > #include <vmlinux.h> > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/struct_ops_nulled_out_cb.c b/tools/testing/selftests/bpf/progs/struct_ops_nulled_out_cb.c > index fa2021388485d67192e8b60f29803f206cda7521..5d0937fa07be20face0300cfebacd387f79ac66f 100644 > --- a/tools/testing/selftests/bpf/progs/struct_ops_nulled_out_cb.c > +++ b/tools/testing/selftests/bpf/progs/struct_ops_nulled_out_cb.c > @@ -2,7 +2,7 @@ > /* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/test_kfunc_param_nullable.c b/tools/testing/selftests/bpf/progs/test_kfunc_param_nullable.c > index 7ac7e1de34d811865ca187a200bc6f213d482511..0ad1bf1ede8dc7f83f2e922d918ce40d196b64a4 100644 > --- a/tools/testing/selftests/bpf/progs/test_kfunc_param_nullable.c > +++ b/tools/testing/selftests/bpf/progs/test_kfunc_param_nullable.c > @@ -4,7 +4,7 @@ > #include <bpf/bpf_helpers.h> > #include "bpf_misc.h" > #include "bpf_kfuncs.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > SEC("tc") > int kfunc_dynptr_nullable_test1(struct __sk_buff *skb) > diff --git a/tools/testing/selftests/bpf/progs/test_module_attach.c b/tools/testing/selftests/bpf/progs/test_module_attach.c > index cc1a012d038f1ddca8c982a88b9ef15802f39610..fb07f5773888b05f0c653bc168769c85c99811fb 100644 > --- a/tools/testing/selftests/bpf/progs/test_module_attach.c > +++ b/tools/testing/selftests/bpf/progs/test_module_attach.c > @@ -5,7 +5,7 @@ > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > #include <bpf/bpf_core_read.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > __u32 raw_tp_read_sz = 0; > > diff --git a/tools/testing/selftests/bpf/progs/test_tp_btf_nullable.c b/tools/testing/selftests/bpf/progs/test_tp_btf_nullable.c > index 5aaf2b065f86c25a00936548d3f76eb3e69848b1..3bce838e92d5a1bfd6b4cc1e5a900e4715bf0170 100644 > --- a/tools/testing/selftests/bpf/progs/test_tp_btf_nullable.c > +++ b/tools/testing/selftests/bpf/progs/test_tp_btf_nullable.c > @@ -3,7 +3,7 @@ > #include "vmlinux.h" > #include <bpf/bpf_helpers.h> > #include <bpf/bpf_tracing.h> > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > #include "bpf_misc.h" > > SEC("tp_btf/bpf_testmod_test_nullable_bare") > diff --git a/tools/testing/selftests/bpf/progs/unsupported_ops.c b/tools/testing/selftests/bpf/progs/unsupported_ops.c > index 9180365a3568f8f5d04682704ae08588bcdc2025..8aa2e0dd624e4b8d83a9377ae3b4adfd62bc350b 100644 > --- a/tools/testing/selftests/bpf/progs/unsupported_ops.c > +++ b/tools/testing/selftests/bpf/progs/unsupported_ops.c > @@ -4,7 +4,7 @@ > #include <vmlinux.h> > #include <bpf/bpf_tracing.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod.h" > +#include "../test_kmods/bpf_testmod.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/wq.c b/tools/testing/selftests/bpf/progs/wq.c > index f8d3ae0c29aeb3da58c604f6a2eb6aeb3c90e365..2f1ba08c293e26c48e0866ea00ff73b8517faab3 100644 > --- a/tools/testing/selftests/bpf/progs/wq.c > +++ b/tools/testing/selftests/bpf/progs/wq.c > @@ -5,7 +5,7 @@ > #include "bpf_experimental.h" > #include <bpf/bpf_helpers.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/progs/wq_failures.c b/tools/testing/selftests/bpf/progs/wq_failures.c > index 25b51a72fe0fe6d0f1253e22e204aaf6c1946fc6..4240211a19001fbbe0860da761121917a91049f5 100644 > --- a/tools/testing/selftests/bpf/progs/wq_failures.c > +++ b/tools/testing/selftests/bpf/progs/wq_failures.c > @@ -5,7 +5,7 @@ > #include "bpf_experimental.h" > #include <bpf/bpf_helpers.h> > #include "bpf_misc.h" > -#include "../bpf_testmod/bpf_testmod_kfunc.h" > +#include "../test_kmods/bpf_testmod_kfunc.h" > > char _license[] SEC("license") = "GPL"; > > diff --git a/tools/testing/selftests/bpf/bpf_testmod/.gitignore b/tools/testing/selftests/bpf/test_kmods/.gitignore > similarity index 100% > rename from tools/testing/selftests/bpf/bpf_testmod/.gitignore > rename to tools/testing/selftests/bpf/test_kmods/.gitignore > diff --git a/tools/testing/selftests/bpf/test_kmods/Makefile b/tools/testing/selftests/bpf/test_kmods/Makefile > new file mode 100644 > index 0000000000000000000000000000000000000000..d4e50c4509c93af82de376caa08771ad266c09b3 > --- /dev/null > +++ b/tools/testing/selftests/bpf/test_kmods/Makefile > @@ -0,0 +1,21 @@ > +TEST_KMOD_DIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST))))) > +KDIR ?= $(abspath $(TEST_KMOD_DIR)/../../../../..) > + > +ifeq ($(V),1) > +Q = > +else > +Q = @ > +endif > + > +MODULES = bpf_testmod.ko bpf_test_no_cfi.ko bpf_test_modorder_x.ko \ > + bpf_test_modorder_y.ko > + > +$(foreach m,$(MODULES),$(eval obj-m += $(m:.ko=.o))) > + > +CFLAGS_bpf_testmod.o = -I$(src) > + > +all: > + $(Q)$(MAKE) -C $(KDIR) M=$(TEST_KMOD_DIR) modules > + > +clean: > + $(Q)$(MAKE) -C $(KDIR) M=$(TEST_KMOD_DIR) clean > diff --git a/tools/testing/selftests/bpf/bpf_test_modorder_x/bpf_test_modorder_x.c b/tools/testing/selftests/bpf/test_kmods/bpf_test_modorder_x.c > similarity index 100% > rename from tools/testing/selftests/bpf/bpf_test_modorder_x/bpf_test_modorder_x.c > rename to tools/testing/selftests/bpf/test_kmods/bpf_test_modorder_x.c > diff --git a/tools/testing/selftests/bpf/bpf_test_modorder_y/bpf_test_modorder_y.c b/tools/testing/selftests/bpf/test_kmods/bpf_test_modorder_y.c > similarity index 100% > rename from tools/testing/selftests/bpf/bpf_test_modorder_y/bpf_test_modorder_y.c > rename to tools/testing/selftests/bpf/test_kmods/bpf_test_modorder_y.c > diff --git a/tools/testing/selftests/bpf/bpf_test_no_cfi/bpf_test_no_cfi.c b/tools/testing/selftests/bpf/test_kmods/bpf_test_no_cfi.c > similarity index 100% > rename from tools/testing/selftests/bpf/bpf_test_no_cfi/bpf_test_no_cfi.c > rename to tools/testing/selftests/bpf/test_kmods/bpf_test_no_cfi.c > diff --git a/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod-events.h b/tools/testing/selftests/bpf/test_kmods/bpf_testmod-events.h > similarity index 100% > rename from tools/testing/selftests/bpf/bpf_testmod/bpf_testmod-events.h > rename to tools/testing/selftests/bpf/test_kmods/bpf_testmod-events.h > diff --git a/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c > similarity index 100% > rename from tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c > rename to tools/testing/selftests/bpf/test_kmods/bpf_testmod.c > diff --git a/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.h b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.h > similarity index 100% > rename from tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.h > rename to tools/testing/selftests/bpf/test_kmods/bpf_testmod.h > diff --git a/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod_kfunc.h b/tools/testing/selftests/bpf/test_kmods/bpf_testmod_kfunc.h > similarity index 100% > rename from tools/testing/selftests/bpf/bpf_testmod/bpf_testmod_kfunc.h > rename to tools/testing/selftests/bpf/test_kmods/bpf_testmod_kfunc.h > > --- > base-commit: a2b4a9cddae87e6ff605cf0d2014c749cfbaf14e > change-id: 20241030-bpf-selftests-mod-compile-64938d1ae5f6 >