On Tue, Oct 08, 2024 at 12:35:18PM +0200, Toke Høiland-Jørgensen wrote: > From: Simon Sundberg <simon.sundberg@xxxxxx> > > Generalize the previous [un]load_bpf_testmod() helpers (in > testing_helpers.c) to the more generic [un]load_module(), which can > load an arbitrary kernel module by name. This allows future selftests > to more easily load custom kernel modules other than bpf_testmod.ko. > Refactor [un]load_bpf_testmod() to wrap this new helper. > > Signed-off-by: Simon Sundberg <simon.sundberg@xxxxxx> > Signed-off-by: Toke Høiland-Jørgensen <toke@xxxxxxxxxx> Acked-by: Jiri Olsa <jolsa@xxxxxxxxxx> jirka > --- > tools/testing/selftests/bpf/testing_helpers.c | 34 +++++++++++++++++---------- > tools/testing/selftests/bpf/testing_helpers.h | 2 ++ > 2 files changed, 24 insertions(+), 12 deletions(-) > > diff --git a/tools/testing/selftests/bpf/testing_helpers.c b/tools/testing/selftests/bpf/testing_helpers.c > index d3c3c3a24150f99abd13ecb7d7b11d8f7351560d..5e9f16683be5460b1a295fb9754df761cbd090ea 100644 > --- a/tools/testing/selftests/bpf/testing_helpers.c > +++ b/tools/testing/selftests/bpf/testing_helpers.c > @@ -367,7 +367,7 @@ int delete_module(const char *name, int flags) > return syscall(__NR_delete_module, name, flags); > } > > -int unload_bpf_testmod(bool verbose) > +int unload_module(const char *name, bool verbose) > { > int ret, cnt = 0; > > @@ -375,11 +375,11 @@ int unload_bpf_testmod(bool verbose) > fprintf(stdout, "Failed to trigger kernel-side RCU sync!\n"); > > for (;;) { > - ret = delete_module("bpf_testmod", 0); > + ret = delete_module(name, 0); > if (!ret || errno != EAGAIN) > break; > if (++cnt > 10000) { > - fprintf(stdout, "Unload of bpf_testmod timed out\n"); > + fprintf(stdout, "Unload of %s timed out\n", name); > break; > } > usleep(100); > @@ -388,41 +388,51 @@ int unload_bpf_testmod(bool verbose) > if (ret) { > if (errno == ENOENT) { > if (verbose) > - fprintf(stdout, "bpf_testmod.ko is already unloaded.\n"); > + fprintf(stdout, "%s.ko is already unloaded.\n", name); > return -1; > } > - fprintf(stdout, "Failed to unload bpf_testmod.ko from kernel: %d\n", -errno); > + fprintf(stdout, "Failed to unload %s.ko from kernel: %d\n", name, -errno); > return -1; > } > if (verbose) > - fprintf(stdout, "Successfully unloaded bpf_testmod.ko.\n"); > + fprintf(stdout, "Successfully unloaded %s.ko.\n", name); > return 0; > } > > -int load_bpf_testmod(bool verbose) > +int load_module(const char *path, bool verbose) > { > int fd; > > if (verbose) > - fprintf(stdout, "Loading bpf_testmod.ko...\n"); > + fprintf(stdout, "Loading %s...\n", path); > > - fd = open("bpf_testmod.ko", O_RDONLY); > + fd = open(path, O_RDONLY); > if (fd < 0) { > - fprintf(stdout, "Can't find bpf_testmod.ko kernel module: %d\n", -errno); > + fprintf(stdout, "Can't find %s kernel module: %d\n", path, -errno); > return -ENOENT; > } > if (finit_module(fd, "", 0)) { > - fprintf(stdout, "Failed to load bpf_testmod.ko into the kernel: %d\n", -errno); > + fprintf(stdout, "Failed to load %s into the kernel: %d\n", path, -errno); > close(fd); > return -EINVAL; > } > close(fd); > > if (verbose) > - fprintf(stdout, "Successfully loaded bpf_testmod.ko.\n"); > + fprintf(stdout, "Successfully loaded %s.\n", path); > return 0; > } > > +int unload_bpf_testmod(bool verbose) > +{ > + return unload_module("bpf_testmod", verbose); > +} > + > +int load_bpf_testmod(bool verbose) > +{ > + return load_module("bpf_testmod.ko", verbose); > +} > + > /* > * Trigger synchronize_rcu() in kernel. > */ > diff --git a/tools/testing/selftests/bpf/testing_helpers.h b/tools/testing/selftests/bpf/testing_helpers.h > index d55f6ab124338ccab33bc120ca7e3baa18264aea..46d7f7089f636b0d2476859fd0fa5e1c4b305419 100644 > --- a/tools/testing/selftests/bpf/testing_helpers.h > +++ b/tools/testing/selftests/bpf/testing_helpers.h > @@ -38,6 +38,8 @@ int unload_bpf_testmod(bool verbose); > int kern_sync_rcu(void); > int finit_module(int fd, const char *param_values, int flags); > int delete_module(const char *name, int flags); > +int load_module(const char *path, bool verbose); > +int unload_module(const char *name, bool verbose); > > static inline __u64 get_time_ns(void) > { > > -- > 2.47.0 >