When Kconfig options or missing headers cause a .test.o not to be
compiled, the corresponding prog_test_def entry in tests.h has NULL
for both run_test and run_serial_test. The existing infrastructure
check treats this case as a fatal coding error and calls exit().

Separate the two failure modes: having both function pointers non-NULL
is a genuine coding error and remains fatal. Having both NULL means
the test object was intentionally omitted from the build; mark it
should_run=false and continue so that the remaining tests are
unaffected.

Signed-off-by: Ricardo B. Marlière <[email protected]>
---
 tools/testing/selftests/bpf/test_progs.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/bpf/test_progs.c 
b/tools/testing/selftests/bpf/test_progs.c
index 0929f4a7bda4..85ac25a51a8d 100644
--- a/tools/testing/selftests/bpf/test_progs.c
+++ b/tools/testing/selftests/bpf/test_progs.c
@@ -2022,12 +2022,15 @@ int main(int argc, char **argv)
                test->should_run = should_run(&env.test_selector,
                                              test->test_num, test->test_name);
 
-               if ((test->run_test == NULL && test->run_serial_test == NULL) ||
-                   (test->run_test != NULL && test->run_serial_test != NULL)) {
+               if (test->run_test && test->run_serial_test) {
                        fprintf(stderr, "Test %d:%s must have either test_%s() 
or serial_test_%sl() defined.\n",
                                test->test_num, test->test_name, 
test->test_name, test->test_name);
                        exit(EXIT_ERR_SETUP_INFRA);
                }
+               if (!test->run_test && !test->run_serial_test) {
+                       test->should_run = false;
+                       continue;
+               }
                if (test->should_run)
                        test->should_tmon = should_tmon(&env.tmon_selector, 
test->test_name);
        }

-- 
2.53.0


Reply via email to