[PATCH v1] rt-tests: Exit with failure when breaktrace threshold is exceeded
Costa Shulyupin <[email protected]> Mon, 27 Jul 2026 22:15:45 +0300
| Newsgroups | org.kernel.vger.linux-rt-users |
|---|---|
| Message-ID | <[email protected]> |
cyclictest and cyclicdeadline always exit 0 even when the latency
threshold set by --breaktrace is exceeded, requiring test harnesses
to parse output or json to detect a failed test.
Set ret to EXIT_FAILURE when break_thread_id is set, indicating the
breaktrace threshold was hit. The exit code enables shell expressions
like "cyclictest ... && echo PASS" and seamless integration with testing
frameworks. Also pass ret to rt_write_json() in cyclicdeadline so the
JSON output reflects the failure.
Assisted-by: Claude:claude-opus-4-6
---
src/cyclictest/cyclictest.8 | 8 ++++++++
src/cyclictest/cyclictest.c | 1 +
src/sched_deadline/cyclicdeadline.8 | 8 ++++++++
src/sched_deadline/cyclicdeadline.c | 7 +++++--
4 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/src/cyclictest/cyclictest.8 b/src/cyclictest/cyclictest.8
index fc6121aa4d47..813c61653f61 100644
--- a/src/cyclictest/cyclictest.8
+++ b/src/cyclictest/cyclictest.8
@@ -311,6 +311,14 @@ in mind, below cyclictest example invocation can provide a good start:
--histfile=output.txt
.fi
.
+.SH "Exit status"
+.TP
+.B 0
+Success - all latencies were within the breaktrace threshold, or no threshold was set.
+.TP
+.B 1
+Failure - a latency exceeding the breaktrace threshold was detected.
+.
.SH "See also"
.MR numa 3 ,
.MR numactl 8 ,
diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
index 71cf5cb25c22..88fc08347cba 100644
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
@@ -2337,6 +2337,7 @@ int main(int argc, char **argv)
if (break_thread_id) {
printf("# Break thread: %d\n", break_thread_id);
printf("# Break value: %llu\n", (unsigned long long)break_thread_value);
+ ret = EXIT_FAILURE;
}
}
diff --git a/src/sched_deadline/cyclicdeadline.8 b/src/sched_deadline/cyclicdeadline.8
index bfc6327c51da..cd7088629d97 100644
--- a/src/sched_deadline/cyclicdeadline.8
+++ b/src/sched_deadline/cyclicdeadline.8
@@ -58,6 +58,14 @@ Send break trace command when latency > USEC
.B \-\-tracemark
write a trace mark when \-b latency is exceeded.
.br
+.SH "Exit status"
+.TP
+.B 0
+Success - all latencies were within the breaktrace threshold, or no threshold was set.
+.TP
+.B 1
+Failure - a latency exceeding the breaktrace threshold was detected.
+.
.SH AUTHOR
cyclicdeadline was written by Steven Rostedt <[email protected]>
.PP
diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c
index 0c6c96976010..1123de4f4cae 100644
--- a/src/sched_deadline/cyclicdeadline.c
+++ b/src/sched_deadline/cyclicdeadline.c
@@ -1315,10 +1315,13 @@ int main(int argc, char **argv)
loop(sched_data, nr_threads);
+ ret = EXIT_SUCCESS;
+
if (tracelimit) {
if (break_thread_id) {
printf("# Break thread: %d\n", break_thread_id);
printf("# Break value: %llu\n", (unsigned long long)break_thread_value);
+ ret = EXIT_FAILURE;
}
}
@@ -1334,7 +1337,7 @@ int main(int argc, char **argv)
}
if (strlen(jsonfile) != 0)
- rt_write_json(jsonfile, 0, write_stats, sched_data);
+ rt_write_json(jsonfile, ret, write_stats, sched_data);
if (setcpu_buf)
free(setcpu_buf);
@@ -1344,5 +1347,5 @@ int main(int argc, char **argv)
fclose(histfile);
hset_destroy(&hset);
- return 0;
+ return ret;
}
--
2.54.0