Link: https://lore.kernel.org/r/20260217200002.683975158@linuxfoundation.org Tested-by: Florian Fainelli <florian.fainelli@broadcom.com> Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com> Tested-by: Peter Schneider <pschneider1968@googlemail.com> Tested-by: Jon Hunter <jonathanh@nvidia.com> Tested-by: Salvatore Bonaccorso <carnil@debian.org> Tested-by: Brett A C Sheffield <bacs@librecast.net> Tested-by: Mark Brown <broonie@kernel.org> Tested-by: Luna Jernberg <droidbittin@gmail.com> Tested-by: Ronald Warsow <rwarsow@gmx.de> Tested-by: Justin M. Forbes <jforbes@fedoraproject.org> Tested-by: Ron Economos <re@w6rz.net> Tested-by: Miguel Ojeda <ojeda@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
117 lines
3.2 KiB
Bash
Executable File
117 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0+
|
|
#
|
|
# Usage: kvm-series.sh config-list commit-id-list [ kvm.sh parameters ]
|
|
#
|
|
# Tests the specified list of unadorned configs ("TREE01 SRCU-P" but not
|
|
# "CFLIST" or "3*TRACE01") and an indication of a set of commits to test,
|
|
# then runs each commit through the specified list of commits using kvm.sh.
|
|
# The runs are grouped into a -series/config/commit directory tree.
|
|
# Each run defaults to a duration of one minute.
|
|
#
|
|
# Run in top-level Linux source directory. Please note that this is in
|
|
# no way a replacement for "git bisect"!!!
|
|
#
|
|
# This script is intended to replace kvm-check-branches.sh by providing
|
|
# ease of use and faster execution.
|
|
|
|
T="`mktemp -d ${TMPDIR-/tmp}/kvm-series.sh.XXXXXX`"
|
|
trap 'rm -rf $T' 0
|
|
|
|
scriptname=$0
|
|
args="$*"
|
|
|
|
config_list="${1}"
|
|
if test -z "${config_list}"
|
|
then
|
|
echo "$0: Need a quoted list of --config arguments for first argument."
|
|
exit 1
|
|
fi
|
|
if test -z "${config_list}" || echo "${config_list}" | grep -q '\*'
|
|
then
|
|
echo "$0: Repetition ('*') not allowed in config list."
|
|
exit 1
|
|
fi
|
|
|
|
commit_list="${2}"
|
|
if test -z "${commit_list}"
|
|
then
|
|
echo "$0: Need a list of commits (e.g., HEAD^^^..) for second argument."
|
|
exit 2
|
|
fi
|
|
git log --pretty=format:"%h" "${commit_list}" > $T/commits
|
|
ret=$?
|
|
if test "${ret}" -ne 0
|
|
then
|
|
echo "$0: Invalid commit list ('${commit_list}')."
|
|
exit 2
|
|
fi
|
|
sha1_list=`cat $T/commits`
|
|
|
|
shift
|
|
shift
|
|
|
|
RCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
|
|
PATH=${RCUTORTURE}/bin:$PATH; export PATH
|
|
. functions.sh
|
|
|
|
ret=0
|
|
nfail=0
|
|
nsuccess=0
|
|
faillist=
|
|
successlist=
|
|
cursha1="`git rev-parse --abbrev-ref HEAD`"
|
|
ds="`date +%Y.%m.%d-%H.%M.%S`-series"
|
|
startdate="`date`"
|
|
starttime="`get_starttime`"
|
|
|
|
echo " --- " $scriptname $args | tee -a $T/log
|
|
echo " --- Results directory: " $ds | tee -a $T/log
|
|
|
|
for config in ${config_list}
|
|
do
|
|
sha_n=0
|
|
for sha in ${sha1_list}
|
|
do
|
|
sha1=${sha_n}.${sha} # Enable "sort -k1nr" to list commits in order.
|
|
echo Starting ${config}/${sha1} at `date` | tee -a $T/log
|
|
git checkout "${sha}"
|
|
time tools/testing/selftests/rcutorture/bin/kvm.sh --configs "$config" --datestamp "$ds/${config}/${sha1}" --duration 1 "$@"
|
|
curret=$?
|
|
if test "${curret}" -ne 0
|
|
then
|
|
nfail=$((nfail+1))
|
|
faillist="$faillist ${config}/${sha1}(${curret})"
|
|
else
|
|
nsuccess=$((nsuccess+1))
|
|
successlist="$successlist ${config}/${sha1}"
|
|
# Successful run, so remove large files.
|
|
rm -f ${RCUTORTURE}/$ds/${config}/${sha1}/{vmlinux,bzImage,System.map,Module.symvers}
|
|
fi
|
|
if test "${ret}" -eq 0
|
|
then
|
|
ret=${curret}
|
|
fi
|
|
sha_n=$((sha_n+1))
|
|
done
|
|
done
|
|
git checkout "${cursha1}"
|
|
|
|
echo ${nsuccess} SUCCESSES: | tee -a $T/log
|
|
echo ${successlist} | fmt | tee -a $T/log
|
|
echo | tee -a $T/log
|
|
echo ${nfail} FAILURES: | tee -a $T/log
|
|
echo ${faillist} | fmt | tee -a $T/log
|
|
if test -n "${faillist}"
|
|
then
|
|
echo | tee -a $T/log
|
|
echo Failures across commits: | tee -a $T/log
|
|
echo ${faillist} | tr ' ' '\012' | sed -e 's,^[^/]*/,,' -e 's/([0-9]*)//' |
|
|
sort | uniq -c | sort -k2n | tee -a $T/log
|
|
fi
|
|
echo Started at $startdate, ended at `date`, duration `get_starttime_duration $starttime`. | tee -a $T/log
|
|
echo Summary: Successes: ${nsuccess} Failures: ${nfail} | tee -a $T/log
|
|
cp $T/log tools/testing/selftests/rcutorture/res/${ds}
|
|
|
|
exit "${ret}"
|