[LTP PATCH v3 3/5] ftrace: Convert ftrace_regression02.sh to C
Praveen K Pandey <[email protected]>
| Newsgroups | gmane.linux.ltp |
|---|---|
| Message-ID | <[email protected]> |
Convert ftrace_regression02.sh to C implementation using LTP new API. This test validates that function graph tracing works correctly by: - Enabling function_graph tracer - Verifying trace output contains function graph format - Checking for kernel crashes or hangs The test requires root to access and configure the ftrace subsystem via debugfs. Signed-off-by: Praveen K Pandey <[email protected]> --- .../tracing/ftrace_test/ftrace_regression02.c | 102 ++++++++++++++++++ 1 file changed, 102 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..be7d01ff6 --- /dev/null +++ b/testcases/kernel/tracing/ftrace_test/ftrace_regression02.c @@ -0,0 +1,102 @@ +// 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 <[email protected]> + * Converted to C by: Praveen K Pandey <[email protected]> + */ + +/*\ + * 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()) + * + * Requires root to access and configure the ftrace subsystem via debugfs. + * + * [Algorithm] + * + * - Enable signal:signal_generate event + * - Enable tracing + * - Generate some signals by running commands + * - Check trace output for 'grp=' and 'res=' fields + * - 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, + .needs_tmpdir = 1, + .tags = (const struct tst_tag[]) { + {"linux-git", "6c303d3"}, + {"linux-git", "163566f"}, + {} + } +}; + -- 2.50.1 -- Mailing list info: https://lists.linux.it/listinfo/ltp