[PATCH v7 14/14] selftests/ftrace: Walk up parent dirs to find test.d/functions

From: wen . yang

Date: Sun Oct 11 2026 - 15:42:50 EST


From: Wen Yang <wen.yang@xxxxxxxxx>

When a subdirectory is passed (e.g. an RV monitor's test directory),
ftracetest fell back to its own functions file, losing the RV-specific
check_requires handling for ':monitor' and ':reactor' requirements.

Walk up from OPT_TEST_DIR until a directory containing test.d/functions
is found, stopping after five levels so a stray argument cannot reach an
unrelated functions file further up the tree. When no such directory is
found the previous default is kept.

Note that TOP_DIR also feeds LOG_TOP_DIR, so logs now follow the
directory the tests were found in: an RV run writes to
verification/logs rather than ftrace/logs.

Signed-off-by: Wen Yang <wen.yang@xxxxxxxxx>
---
tools/testing/selftests/ftrace/ftracetest | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest
index 0a56bf209f6c..3d3c3a4dfa34 100755
--- a/tools/testing/selftests/ftrace/ftracetest
+++ b/tools/testing/selftests/ftrace/ftracetest
@@ -159,9 +159,22 @@ parse_opts() { # opts
if [ -n "$OPT_TEST_CASES" ]; then
TEST_CASES=$OPT_TEST_CASES
fi
- if [ -n "$OPT_TEST_DIR" -a -f "$OPT_TEST_DIR"/test.d/functions ]; then
- TOP_DIR=$OPT_TEST_DIR
- TEST_DIR=$TOP_DIR/test.d
+ if [ -n "$OPT_TEST_DIR" ]; then
+ # A subdirectory of test.d can be given; walk up to the directory
+ # holding test.d/functions. The bound keeps a stray directory from
+ # reaching an unrelated functions file further up the tree.
+ local dir=$OPT_TEST_DIR
+ local depth=0
+ while [ "$depth" -lt 5 ]; do
+ if [ -f "$dir/test.d/functions" ]; then
+ TOP_DIR=$dir
+ TEST_DIR=$TOP_DIR/test.d
+ break
+ fi
+ case "$dir" in /|//|.) break;; esac
+ dir=$(dirname "$dir")
+ depth=$((depth + 1))
+ done
fi
}

--
2.25.1