summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiayuan Chen <jiayuan.chen@linux.dev>2026-07-23 14:13:37 +0800
committerKumar Kartikeya Dwivedi <memxor@gmail.com>2026-07-28 02:51:34 +0200
commitfdec474c65fd35d5a6e1497ed50a9f98c07192f0 (patch)
tree8bc36cf9761212989c81fa878225004d356a55a9
parent59b9731addc7633a39d3a042ed968864f7b3aaf5 (diff)
downloadlinux-next-fdec474c65fd35d5a6e1497ed50a9f98c07192f0.tar.gz
linux-next-fdec474c65fd35d5a6e1497ed50a9f98c07192f0.zip
selftests/bpf: Report the real error from libarena parallel workers
Several CI runs failed in the libarena parallel tests with -4 (-EINTR) [1], which says nothing about what actually went wrong. Two workers can fail like this: worker 1: gives up, e.g. the rendezvous times out, sets test_abort and returns its own error (-ETIMEDOUT) worker 2: sees test_abort and returns -EINTR -EINTR only means "someone else already gave up", so it carries no information. Which of the two gets reported depends on the order pthread_join() collects them, because err = err ?: (long)thread_ret; keeps the first non-zero value and drops the rest. When the -EINTR worker comes first, the error describing the actual failure is lost. Skip -EINTR entirely: a worker only returns it once another worker has already reported the real error, so report and log only the real errors. It is still unclear whether the timeouts come from CI load or from a problem in the test itself. Report the error accurately first, so the next failure can be diagnosed. [1]: https://github.com/kernel-patches/bpf/actions/runs/29867905253/job/88764463566 https://github.com/kernel-patches/bpf/actions/runs/29878191901/job/88794845824 Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev> Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com> Link: https://lore.kernel.org/bpf/20260723061347.398591-1-jiayuan.chen@linux.dev Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
-rw-r--r--tools/testing/selftests/bpf/prog_tests/libarena.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/libarena.c b/tools/testing/selftests/bpf/prog_tests/libarena.c
index df7e4b8dc394..daade4150af6 100644
--- a/tools/testing/selftests/bpf/prog_tests/libarena.c
+++ b/tools/testing/selftests/bpf/prog_tests/libarena.c
@@ -73,6 +73,7 @@ static int run_libarena_parallel_test_workers(struct libarena *skel,
uint32_t nthreads;
void *thread_ret;
int ret, err = 0;
+ int worker_err;
int i;
for (nthreads = 0; nthreads < UINT_MAX; nthreads++) {
@@ -118,7 +119,22 @@ static int run_libarena_parallel_test_workers(struct libarena *skel,
continue;
}
- err = err ?: (long)thread_ret;
+ worker_err = (long)thread_ret;
+
+ /*
+ * A worker that bails out because another one already gave up
+ * reports -EINTR. It is collateral damage that carries no
+ * information, so skip it entirely: never let it become the
+ * reported error, and don't log it either.
+ */
+ if (!worker_err || worker_err == -EINTR)
+ continue;
+
+ if (!err)
+ err = worker_err;
+
+ fprintf(stdout, "%.*s__%d returned %d\n", (int)prefixlen, name,
+ i, worker_err);
}
free(threads);