[LTP PATCH v4 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 verifies that the signal:signal_generate tracepoint exposes 'grp=' and 'res=' fields. These fields were added by commits 6c303d3 and 163566f in kernel 3.2. The test enables the signal_generate event, generates signals, and checks the trace output for the presence of both fields. The test requires root to access and configure the ftrace subsystem via debugfs. Uses .min_kver to enforce kernel version requirement instead of inline check. Signed-off-by: Praveen K Pandey <[email protected]> --- .../tracing/ftrace_test/ftrace_regression02.c | 103 ++++++++++++++++++ 1 file changed, 103 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..4d960cb82 --- /dev/null +++ b/testcases/kernel/tracing/ftrace_test/ftrace_regression02.c @@ -0,0 +1,103 @@ +// 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]> + */ + +/*\ + * [Description] + * + * Verify that signal:signal_generate tracepoint exposes 'grp=' and 'res=' fields. + * + * This test verifies kernel commits 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()) + * + * These fields were added in kernel 3.2. + * + * Requires root to access and configure the ftrace subsystem via debugfs. + * + * [Algorithm] + * + * - Enable signal:signal_generate event + * - Enable tracing + * - Generate signals by running commands + * - Read trace output and search for 'grp=' and 'res=' fields + * - Test passes if both fields are found in the trace + */ + +#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; + + /* 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, + .min_kver = "3.2", + .tags = (const struct tst_tag[]) { + {"linux-git", "6c303d3"}, + {"linux-git", "163566f"}, + {} + } +}; + -- 2.50.1 -- Mailing list info: https://lists.linux.it/listinfo/ltp