On Thu, Mar 05, 2026 at 11:02:58AM +0800, Sun Jian wrote: > livepatch_trampoline relies on livepatch sysfs and livepatch-sample.ko. > When CONFIG_LIVEPATCH is disabled or the samples module isn't built, the > test fails with ENOENT and causes false failures in minimal CI configs. > > Skip the test when livepatch sysfs or the sample module is unavailable. > Also avoid writing to livepatch sysfs when it's not present. > > Signed-off-by: Sun Jian <[email protected]> > --- > > v2: > - Add missing Cc's suggested by get_maintainer.pl > - Prefix subject with bpf-next to avoid Patchwork tree mis-detection > - Drop Fixes tag to avoid verify_fixes issues due to tree mismatch > - No code changes > > v1: https://patchew.org/linux/[email protected]/ > > .../bpf/prog_tests/livepatch_trampoline.c | 28 ++++++++++++++++++- > 1 file changed, 27 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c > b/tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c > index 72aa5376c30e..75336d9c2313 100644 > --- a/tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c > +++ b/tools/testing/selftests/bpf/prog_tests/livepatch_trampoline.c > @@ -2,9 +2,12 @@ > /* Copyright (c) 2025 Meta Platforms, Inc. and affiliates. */ > > #include <test_progs.h> > +#include <unistd.h> > #include "testing_helpers.h" > #include "livepatch_trampoline.skel.h" > > +#define LIVEPATCH_ENABLED_PATH > "/sys/kernel/livepatch/livepatch_sample/enabled" > + > static int load_livepatch(void) > { > char path[4096]; > @@ -19,7 +22,8 @@ static int load_livepatch(void) > static void unload_livepatch(void) > { > /* Disable the livepatch before unloading the module */ > - system("echo 0 > /sys/kernel/livepatch/livepatch_sample/enabled"); > + if (!access(LIVEPATCH_ENABLED_PATH, F_OK)) > + system("echo 0 > " LIVEPATCH_ENABLED_PATH); > > unload_module("livepatch_sample", env_verbosity > VERBOSE_NONE); > } > @@ -82,6 +86,28 @@ void test_livepatch_trampoline(void) > { > int retry_cnt = 0; > > + /* Skip if kernel was built without CONFIG_LIVEPATCH */ > + if (access("/sys/kernel/livepatch", F_OK)) { > + test__skip(); > + return; > + } > + > + /* > + * Skip if livepatch-sample.ko was not built (same path logic as > + * load_livepatch()). > + */ > + { > + char path[4096]; > + > + snprintf(path, sizeof(path), > + "%s/samples/livepatch/livepatch-sample.ko", > + getenv("KBUILD_OUTPUT") ? : "../../../.."); > + if (access(path, R_OK)) { > + test__skip(); > + return; > + } > + } > + > retry: > if (load_livepatch()) {
load_livepatch returns -ENOENT if we fail to open the file, we could check for it instead of putting together the path again jirka
