2 # SPDX-License-Identifier: GPL-2.0+
4 # Rerun a series of tests under KVM.
6 # Usage: kvm-again.sh /path/to/old/run [ options ]
8 # Copyright (C) 2021 Facebook, Inc.
10 # Authors: Paul E. McKenney <paulmck@kernel.org>
15 T
="`mktemp -d ${TMPDIR-/tmp}/kvm-again.sh.XXXXXX`"
18 if ! test -d tools
/testing
/selftests
/rcutorture
/bin
20 echo $scriptname must be run from top-level directory of kernel
source tree.
26 if ! test -d "$oldrun"
28 echo "Usage: $scriptname /path/to/old/run [ options ]"
31 if ! cp "$oldrun/scenarios" $T/scenarios.oldrun
33 # Later on, can reconstitute this from console.log files.
34 echo Prior run batches
file does not exist
: $oldrun/batches
38 if test -f "$oldrun/torture_suite"
40 torture_suite
="`cat $oldrun/torture_suite`"
41 elif test -f "$oldrun/TORTURE_SUITE"
43 torture_suite
="`cat $oldrun/TORTURE_SUITE`"
45 echo "Prior run torture_suite file does not exist: $oldrun/{torture_suite,TORTURE_SUITE}"
49 RCUTORTURE
="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
50 PATH
=${RCUTORTURE}/bin
:$PATH; export PATH
57 resdir
="`pwd`/tools/testing/selftests/rcutorture/res"
58 rundir
="$resdir/`date +%Y.%m.%d-%H.%M.%S-again`"
63 starttime
="`get_starttime`"
66 echo "Usage: $scriptname $oldrun [ arguments ]:"
67 echo " --bootargs kernel-boot-arguments"
68 echo " --datestamp string"
70 echo " --duration minutes | <seconds>s | <hours>h | <days>d"
71 echo " --link hard|soft|copy"
73 echo " --rundir /new/res/path"
74 echo "Command line: $scriptname $args"
82 checkarg
--bootargs "(list of kernel boot arguments)" "$#" "$2" '.*' '^--'
83 bootargs
="$bootargs $2"
87 checkarg
--datestamp "(relative pathname)" "$#" "$2" '^[a-zA-Z0-9._/-]*$' '^--'
88 if test -n "$got_rundir" ||
test -n "$got_datestamp"
90 echo Only one of
--datestamp or
--rundir may be specified
98 echo "--datestamp $2: Already exists."
107 checkarg
--duration "(minutes)" $# "$2" '^[0-9][0-9]*\(s\|m\|h\|d\|\)$' '^error'
109 if echo "$2" |
grep -q 's$'
112 elif echo "$2" |
grep -q 'h$'
115 elif echo "$2" |
grep -q 'd$'
119 ts
=`echo $2 | sed -e 's/[smhd]$//'`
124 checkarg
--link "hard|soft|copy" "$#" "$2" 'hard\|soft\|copy' '^--'
140 default_link
="cp -as"
143 checkarg
--rundir "(absolute pathname)" "$#" "$2" '^/' '^error'
144 if test -n "$got_rundir" ||
test -n "$got_datestamp"
146 echo Only one of
--datestamp or
--rundir may be specified
153 echo "--rundir $2: Already exists."
161 echo Unknown argument
$1
168 if test -z "$arg_link"
170 arg_link
="$default_link"
173 echo ---- Re-run results directory
: $rundir
175 # Copy old run directory tree over and adjust.
176 mkdir
-p "`dirname "$rundir"`"
177 if ! $arg_link "$oldrun" "$rundir"
179 echo "Cannot copy from $oldrun to $rundir."
182 rm -f "$rundir"/*/{console.log
,console.log.diags
,qemu_pid
,qemu-pid
,qemu-retval
,Warnings
,kvm-test-1-run.sh.out
,kvm-test-1-run-qemu.sh.out
,vmlinux
} "$rundir"/log
184 echo $scriptname $args |
tee -a "$rundir/log"
185 echo $oldrun > "$rundir/re-run"
186 if ! test -d "$rundir/../../bin"
188 $arg_link "$oldrun/../../bin" "$rundir/../.."
190 for i
in $rundir/*/qemu-cmd
193 qemu_cmd_dir
="`dirname "$i"`"
194 kernel_dir
="`echo $qemu_cmd_dir | sed -e 's/\.[0-9]\+$//'`"
195 jitter_dir
="`dirname "$kernel_dir"`"
196 kvm-transform.sh
"$kernel_dir/bzImage" "$qemu_cmd_dir/console.log" "$jitter_dir" "$dur" "$bootargs" < $T/qemu-cmd
> $i
197 if test -n "$arg_remote"
199 echo "# TORTURE_KCONFIG_GDB_ARG=''" >> $i
203 # Extract settings from the last qemu-cmd file transformed above.
204 grep '^#' $i |
sed -e 's/^# //' > $T/qemu-cmd-settings
205 .
$T/qemu-cmd-settings
207 grep -v '^#' $T/scenarios.oldrun |
awk '
210 for (i = 2; i <= NF; i++)
211 curbatch = curbatch " " $i;
212 print "kvm-test-1-run-batch.sh" curbatch;
213 }' > $T/runbatches.sh
217 echo ---- Dryrun complete
, directory
: $rundir |
tee -a "$rundir/log"
219 ( cd "$rundir"; sh
$T/runbatches.sh
) |
tee -a "$rundir/log"
220 kvm-end-run-stats.sh
"$rundir" "$starttime"