mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-08-24 21:13:24 +00:00

The -P option is used to set priority of osnoise and timerlat threads. Extend the test for -P with --on-threshold calling a script that looks for running timerlat threads and checks if their priority is set correctly. As --on-threshold is only supported by timerlat at the moment, this is only implemented there so far. Cc: John Kacur <jkacur@redhat.com> Cc: Luis Goncalves <lgoncalv@redhat.com> Cc: Chang Yin <cyin@redhat.com> Cc: Costa Shulyupin <costa.shul@redhat.com> Link: https://lore.kernel.org/20250725133817.59237-3-tglozar@redhat.com Signed-off-by: Tomas Glozar <tglozar@redhat.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
131 lines
3.2 KiB
Bash
131 lines
3.2 KiB
Bash
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
test_begin() {
|
|
# Count tests to allow the test harness to double-check if all were
|
|
# included correctly.
|
|
ctr=0
|
|
[ -z "$RTLA" ] && RTLA="./rtla"
|
|
[ -n "$TEST_COUNT" ] && echo "1..$TEST_COUNT"
|
|
}
|
|
|
|
reset_osnoise() {
|
|
# Reset osnoise options to default and remove any dangling instances created
|
|
# by improperly exited rtla runs.
|
|
pushd /sys/kernel/tracing >/dev/null || return 1
|
|
|
|
# Remove dangling instances created by previous rtla run
|
|
echo 0 > tracing_thresh
|
|
cd instances
|
|
for i in osnoise_top osnoise_hist timerlat_top timerlat_hist
|
|
do
|
|
[ ! -d "$i" ] && continue
|
|
rmdir "$i"
|
|
done
|
|
|
|
# Reset options to default
|
|
# Note: those are copied from the default values of osnoise_data
|
|
# in kernel/trace/trace_osnoise.c
|
|
cd ../osnoise
|
|
echo all > cpus
|
|
echo DEFAULTS > options
|
|
echo 1000000 > period_us
|
|
echo 0 > print_stack
|
|
echo 1000000 > runtime_us
|
|
echo 0 > stop_tracing_total_us
|
|
echo 0 > stop_tracing_us
|
|
echo 1000 > timerlat_period_us
|
|
|
|
popd >/dev/null
|
|
}
|
|
|
|
check() {
|
|
test_name=$0
|
|
tested_command=$1
|
|
expected_exitcode=${3:-0}
|
|
expected_output=$4
|
|
# Simple check: run rtla with given arguments and test exit code.
|
|
# If TEST_COUNT is set, run the test. Otherwise, just count.
|
|
ctr=$(($ctr + 1))
|
|
if [ -n "$TEST_COUNT" ]
|
|
then
|
|
# Reset osnoise options before running test.
|
|
[ "$NO_RESET_OSNOISE" == 1 ] || reset_osnoise
|
|
# Run rtla; in case of failure, include its output as comment
|
|
# in the test results.
|
|
result=$(eval stdbuf -oL $TIMEOUT "$RTLA" $2 2>&1); exitcode=$?
|
|
# Test if the results matches if requested
|
|
if [ -n "$expected_output" ]
|
|
then
|
|
grep -E "$expected_output" <<< "$result" > /dev/null; grep_result=$?
|
|
else
|
|
grep_result=0
|
|
fi
|
|
|
|
if [ $exitcode -eq $expected_exitcode ] && [ $grep_result -eq 0 ]
|
|
then
|
|
echo "ok $ctr - $1"
|
|
else
|
|
echo "not ok $ctr - $1"
|
|
# Add rtla output and exit code as comments in case of failure
|
|
echo "$result" | col -b | while read line; do echo "# $line"; done
|
|
printf "#\n# exit code %s\n" $exitcode
|
|
[ -n "$expected_output" ] && [ $grep_result -ne 0 ] && \
|
|
printf "# Output match failed: \"%s\"\n" "$expected_output"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
check_with_osnoise_options() {
|
|
# Do the same as "check", but with pre-set osnoise options.
|
|
# Note: rtla should reset the osnoise options, this is used to test
|
|
# if it indeed does so.
|
|
# Save original arguments
|
|
arg1=$1
|
|
arg2=$2
|
|
arg3=$3
|
|
|
|
# Apply osnoise options (if not dry run)
|
|
if [ -n "$TEST_COUNT" ]
|
|
then
|
|
[ "$NO_RESET_OSNOISE" == 1 ] || reset_osnoise
|
|
shift
|
|
shift
|
|
while shift
|
|
do
|
|
[ "$1" == "" ] && continue
|
|
option=$(echo $1 | cut -d '=' -f 1)
|
|
value=$(echo $1 | cut -d '=' -f 2)
|
|
echo "option: $option, value: $value"
|
|
echo "$value" > "/sys/kernel/tracing/osnoise/$option" || return 1
|
|
done
|
|
fi
|
|
|
|
NO_RESET_OSNOISE=1 check "$arg1" "$arg2" "$arg3"
|
|
}
|
|
|
|
set_timeout() {
|
|
TIMEOUT="timeout -v -k 15s $1"
|
|
}
|
|
|
|
unset_timeout() {
|
|
unset TIMEOUT
|
|
}
|
|
|
|
set_no_reset_osnoise() {
|
|
NO_RESET_OSNOISE=1
|
|
}
|
|
|
|
unset_no_reset_osnoise() {
|
|
unset NO_RESET_OSNOISE
|
|
}
|
|
|
|
test_end() {
|
|
# If running without TEST_COUNT, tests are not actually run, just
|
|
# counted. In that case, re-run the test with the correct count.
|
|
[ -z "$TEST_COUNT" ] && TEST_COUNT=$ctr exec bash $0 || true
|
|
}
|
|
|
|
# Avoid any environmental discrepancies
|
|
export LC_ALL=C
|
|
unset_timeout
|