[PATCH v6 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 using the new LTP test API. This test validates ftrace event tracing functionality, specifically checking for grp and res fields in signal_generate events. This is a regression test for commits 6c303d3 and 163566f which added group and result fields to signal events. Key changes: - Uses new LTP C API (tst_test.h) - Leverages ftrace_lib for common operations - Proper error handling with LTP macros - Sets .min_kver = "3.2" for kernel version requirement - Requires root privileges (.needs_root = 1) The test enables event tracing, generates events, and verifies they are captured in the trace buffer with the expected fields. Signed-off-by: Praveen K Pandey <[email protected]> --- .../tracing/ftrace_test/ftrace_regression02.c | 101 ++++++++++++++++++ .../ftrace_test/ftrace_regression02.sh | 63 ----------- 2 files changed, 101 insertions(+), 63 deletions(-) create mode 100644 testcases/kernel/tracing/ftrace_test/ftrace_regression02.c delete mode 100755 testcases/kernel/tracing/ftrace_test/ftrace_regression02.sh 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..4484ba613 --- /dev/null +++ b/testcases/kernel/tracing/ftrace_test/ftrace_regression02.c @@ -0,0 +1,101 @@ +// 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 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"}, + {} + } +}; + diff --git a/testcases/kernel/tracing/ftrace_test/ftrace_regression02.sh b/testcases/kernel/tracing/ftrace_test/ftrace_regression02.sh deleted file mode 100755 index 3c32f219e..000000000 --- a/testcases/kernel/tracing/ftrace_test/ftrace_regression02.sh +++ /dev/null @@ -1,63 +0,0 @@ -#! /bin/sh - -########################################################################### -## ## -## Copyright (c) 2015, Red Hat Inc. ## -## ## -## This program is free software: you can redistribute it and/or modify ## -## it under the terms of the GNU General Public License as published by ## -## the Free Software Foundation, either version 3 of the License, or ## -## (at your option) any later version. ## -## ## -## This program is distributed in the hope that it will be useful, ## -## but WITHOUT ANY WARRANTY; without even the implied warranty of ## -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## -## GNU General Public License for more details. ## -## ## -## You should have received a copy of the GNU General Public License ## -## along with this program. If not, see <http://www.gnu.org/licenses/>. ## -## ## -## Author: Li Wang <[email protected]> ## -## ## -########################################################################### -## ## -## Summary: check signal:signal_generate gives 2 more fields: grp res ## -## ## -## This testcase is writing for signal events change: ## -## 6c303d3 tracing: let trace_signal_generate() report more info...## -## 163566f tracing: send_sigqueue() needs trace_signal_generate() ## -## ## -########################################################################### - -export TCID="ftrace_regression02" -export TST_TOTAL=1 - -. ftrace_lib.sh - -ftrace_signal_test() -{ - # Set envent - echo 'signal:signal_generate' > $TRACING_PATH/set_event - echo 1 > $TRACING_PATH/tracing_on - echo > $TRACING_PATH/trace - - # just to generate trace - for i in $(seq 100); do - ls -l /proc > /dev/null 2>&1 - done - - grep -q 'grp=[0-9] res=[0-9]' $TRACING_PATH/trace - if [ $? -eq 0 ]; then - tst_resm TPASS "finished running the test." - else - tst_resm TFAIL "running the test failed, please check log message." - fi -} - -if tst_kvcmp -lt "3.2"; then - tst_brkm TCONF "The test should be run in kernels >= 3.2.0 Skip the test..." -fi - -ftrace_signal_test - -tst_exit -- 2.50.1 -- Mailing list info: https://lists.linux.it/listinfo/ltp