[LTP] [LTP PATCH v2 3/5] ftrace: Add C implementation of ftrace_regression02
Praveen K Pandey
praveen@linux.ibm.com
Sat Jun 6 21:58:16 CEST 2026
Convert ftrace_regression02.sh to C implementation. This test verifies
that signal:signal_generate event includes 'grp' and 'res' fields.
Uses TST_RETRY_FUNC for polling trace output instead of sleep to
comply with LTP Ground Rule 2.
Signed-off-by: Praveen K Pandey <praveen@linux.ibm.com>
---
.../tracing/ftrace_test/ftrace_regression02.c | 99 +++++++++++++++++++
1 file changed, 99 insertions(+)
create mode 100644 testcases/kernel/tracing/ftrace_test/ftrace_regression02.c
diff --git a/testcases/kernel/tracing/ftrace_test/ftrace_regression02.c b/testcases/kernel/tracing/ftrace_test/ftrace_regression02.c
new file mode 100644
index 000000000..cadcf52d9
--- /dev/null
+++ b/testcases/kernel/tracing/ftrace_test/ftrace_regression02.c
@@ -0,0 +1,99 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2015 Red Hat Inc.
+ * Copyright (c) 2024 Linux Test Project
+ * Copyright (c) IBM, 2026
+ *
+ * Author: Li Wang <liwang@redhat.com>
+ * Converted to C by: Praveen K Pandey <praveen@linux.ibm.com>
+ */
+
+/*\
+ * Verify that signal:signal_generate event includes 'grp' and 'res' fields.
+ *
+ * This test verifies kernel changes that added more information to the
+ * signal_generate tracepoint:
+ *
+ * - Commit 6c303d3 (tracing: let trace_signal_generate() report more info...)
+ * - Commit 163566f (tracing: send_sigqueue() needs trace_signal_generate())
+ *
+ * [Algorithm]
+ *
+ * 1. Enable signal:signal_generate event
+ * 2. Enable tracing
+ * 3. Generate some signals by running commands
+ * 4. Check trace output for 'grp=' and 'res=' fields
+ * 5. Test passes if both fields are present
+ */
+
+#include "tst_test.h"
+#include "ftrace_lib.h"
+
+#define SIGNAL_LOOP 100
+
+static void run_test(void)
+{
+ int i;
+ char *trace_content;
+ int found = 0;
+
+ /* This test requires kernel >= 3.2 */
+ if (tst_kvercmp(3, 2, 0) < 0)
+ tst_brk(TCONF, "This test requires kernel >= 3.2.0");
+
+ /* Set event */
+ if (ftrace_write_file("set_event", "signal:signal_generate\n") != 0)
+ tst_brk(TBROK, "Failed to set signal:signal_generate event");
+
+ /* Enable tracing */
+ ftrace_enable_tracing();
+
+ /* Clear trace buffer */
+ ftrace_clear_trace();
+
+ /* Generate some signals by running commands */
+ for (i = 0; i < SIGNAL_LOOP; i++) {
+ /* Run a simple command that will generate signals */
+ if (system("ls -l /proc > /dev/null 2>&1") == -1)
+ tst_res(TINFO, "Command execution failed, continuing...");
+ }
+
+ /* Wait for trace to be written and contain signal events */
+ trace_content = TST_RETRY_FUNC(ftrace_read_file("trace"), TST_RETVAL_NOTNULL);
+ if (!trace_content)
+ tst_brk(TBROK, "Failed to read trace file");
+
+ /* Check for 'grp=' and 'res=' fields in trace */
+ if (strstr(trace_content, "grp=") && strstr(trace_content, "res="))
+ found = 1;
+
+ free(trace_content);
+
+ if (found)
+ tst_res(TPASS, "signal_generate event contains grp and res fields");
+ else
+ tst_res(TFAIL, "signal_generate event missing grp or res fields");
+}
+
+static void setup(void)
+{
+ ftrace_initialize();
+}
+
+static void cleanup(void)
+{
+ ftrace_cleanup();
+}
+
+static struct tst_test test = {
+ .test_all = run_test,
+ .setup = setup,
+ .cleanup = cleanup,
+ .needs_root = 1,
+ .tags = (const struct tst_tag[]) {
+ {"linux-git", "6c303d3"},
+ {"linux-git", "163566f"},
+ {}
+ }
+};
+
--
2.50.1 (Apple Git-155)
More information about the ltp
mailing list