Skip to content

Commit 50527f7

Browse files
committed
rcutorture: Add --bootargs parameter to kvm-again.sh
The kvm-again.sh script can be used to repeat short boot-time tests, but the kernel boot arguments cannot be changed. This means that every change in kernel boot arguments currently necessitates a kernel build, which greatly increases the duration of kernel-boot testing. This commit therefore adds a --bootargs parameter to kvm-again.sh, which allows a given kernel to be repeatedly booted, but overriding old and adding new kernel boot parameters. This allows an old kernel to be booted with new kernel boot parameters, avoiding the overhead of rebuilding the kernel under test. Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
1 parent 9abf231 commit 50527f7

2 files changed

Lines changed: 65 additions & 12 deletions

File tree

tools/testing/selftests/rcutorture/bin/kvm-again.sh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ RCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
5151
PATH=${RCUTORTURE}/bin:$PATH; export PATH
5252
. functions.sh
5353

54+
bootargs=
5455
dryrun=
5556
dur=
5657
default_link="cp -R"
@@ -61,6 +62,7 @@ starttime="`get_starttime`"
6162

6263
usage () {
6364
echo "Usage: $scriptname $oldrun [ arguments ]:"
65+
echo " --bootargs kernel-boot-arguments"
6466
echo " --dryrun"
6567
echo " --duration minutes | <seconds>s | <hours>h | <days>d"
6668
echo " --link hard|soft|copy"
@@ -72,6 +74,11 @@ usage () {
7274
while test $# -gt 0
7375
do
7476
case "$1" in
77+
--bootargs|--bootarg)
78+
checkarg --bootargs "(list of kernel boot arguments)" "$#" "$2" '.*' '^--'
79+
bootargs="$bootargs $2"
80+
shift
81+
;;
7582
--dryrun)
7683
dryrun=1
7784
;;
@@ -156,7 +163,7 @@ do
156163
qemu_cmd_dir="`dirname "$i"`"
157164
kernel_dir="`echo $qemu_cmd_dir | sed -e 's/\.[0-9]\+$//'`"
158165
jitter_dir="`dirname "$kernel_dir"`"
159-
kvm-transform.sh "$kernel_dir/bzImage" "$qemu_cmd_dir/console.log" "$jitter_dir" $dur < $T/qemu-cmd > $i
166+
kvm-transform.sh "$kernel_dir/bzImage" "$qemu_cmd_dir/console.log" "$jitter_dir" $dur "$bootargs" < $T/qemu-cmd > $i
160167
if test -n "$arg_remote"
161168
then
162169
echo "# TORTURE_KCONFIG_GDB_ARG=''" >> $i

tools/testing/selftests/rcutorture/bin/kvm-transform.sh

Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@
33
#
44
# Transform a qemu-cmd file to allow reuse.
55
#
6-
# Usage: kvm-transform.sh bzImage console.log jitter_dir [ seconds ] < qemu-cmd-in > qemu-cmd-out
6+
# Usage: kvm-transform.sh bzImage console.log jitter_dir seconds [ bootargs ] < qemu-cmd-in > qemu-cmd-out
77
#
88
# bzImage: Kernel and initrd from the same prior kvm.sh run.
99
# console.log: File into which to place console output.
10+
# jitter_dir: Jitter directory for TORTURE_JITTER_START and
11+
# TORTURE_JITTER_STOP environment variables.
12+
# seconds: Run duaration for *.shutdown_secs module parameter.
13+
# bootargs: New kernel boot parameters. Beware of Robert Tables.
1014
#
1115
# The original qemu-cmd file is provided on standard input.
1216
# The transformed qemu-cmd file is on standard output.
@@ -17,6 +21,9 @@
1721
#
1822
# Authors: Paul E. McKenney <paulmck@kernel.org>
1923

24+
T=`mktemp -d /tmp/kvm-transform.sh.XXXXXXXXXX`
25+
trap 'rm -rf $T' 0 2
26+
2027
image="$1"
2128
if test -z "$image"
2229
then
@@ -41,9 +48,17 @@ then
4148
echo "Invalid duration, should be numeric in seconds: '$seconds'"
4249
exit 1
4350
fi
51+
bootargs="$5"
52+
53+
# Build awk program.
54+
echo "BEGIN {" > $T/bootarg.awk
55+
echo $bootargs | tr -s ' ' '\012' |
56+
awk -v dq='"' '/./ { print "\tbootarg[" NR "] = " dq $1 dq ";" }' >> $T/bootarg.awk
57+
echo $bootargs | tr -s ' ' '\012' | sed -e 's/=.*$//' |
58+
awk -v dq='"' '/./ { print "\tbootpar[" NR "] = " dq $1 dq ";" }' >> $T/bootarg.awk
59+
cat >> $T/bootarg.awk << '___EOF___'
60+
}
4461
45-
awk -v image="$image" -v consolelog="$consolelog" -v jitter_dir="$jitter_dir" \
46-
-v seconds="$seconds" '
4762
/^# seconds=/ {
4863
if (seconds == "")
4964
print $0;
@@ -70,13 +85,7 @@ awk -v image="$image" -v consolelog="$consolelog" -v jitter_dir="$jitter_dir" \
7085
{
7186
line = "";
7287
for (i = 1; i <= NF; i++) {
73-
if ("" seconds != "" && $i ~ /\.shutdown_secs=[0-9]*$/) {
74-
sub(/[0-9]*$/, seconds, $i);
75-
if (line == "")
76-
line = $i;
77-
else
78-
line = line " " $i;
79-
} else if (line == "") {
88+
if (line == "") {
8089
line = $i;
8190
} else {
8291
line = line " " $i;
@@ -87,7 +96,44 @@ awk -v image="$image" -v consolelog="$consolelog" -v jitter_dir="$jitter_dir" \
8796
} else if ($i == "-kernel") {
8897
i++;
8998
line = line " " image;
99+
} else if ($i == "-append") {
100+
for (i++; i <= NF; i++) {
101+
arg = $i;
102+
lq = "";
103+
rq = "";
104+
if ("" seconds != "" && $i ~ /\.shutdown_secs=[0-9]*$/)
105+
sub(/[0-9]*$/, seconds, arg);
106+
if (arg ~ /^"/) {
107+
lq = substr(arg, 1, 1);
108+
arg = substr(arg, 2);
109+
}
110+
if (arg ~ /"$/) {
111+
rq = substr(arg, length($i), 1);
112+
arg = substr(arg, 1, length($i) - 1);
113+
}
114+
par = arg;
115+
gsub(/=.*$/, "", par);
116+
j = 1;
117+
while (bootpar[j] != "") {
118+
if (bootpar[j] == par) {
119+
arg = "";
120+
break;
121+
}
122+
j++;
123+
}
124+
if (line == "")
125+
line = lq arg;
126+
else
127+
line = line " " lq arg;
128+
}
129+
for (j in bootarg)
130+
line = line " " bootarg[j];
131+
line = line rq;
90132
}
91133
}
92134
print line;
93-
}'
135+
}
136+
___EOF___
137+
138+
awk -v image="$image" -v consolelog="$consolelog" -v jitter_dir="$jitter_dir" \
139+
-v seconds="$seconds" -f $T/bootarg.awk

0 commit comments

Comments
 (0)