mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-20 17:44:33 +08:00
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>
This commit is contained in:
parent
9abf2313ad
commit
50527f7cd0
@ -51,6 +51,7 @@ RCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE
|
||||
PATH=${RCUTORTURE}/bin:$PATH; export PATH
|
||||
. functions.sh
|
||||
|
||||
bootargs=
|
||||
dryrun=
|
||||
dur=
|
||||
default_link="cp -R"
|
||||
@ -61,6 +62,7 @@ starttime="`get_starttime`"
|
||||
|
||||
usage () {
|
||||
echo "Usage: $scriptname $oldrun [ arguments ]:"
|
||||
echo " --bootargs kernel-boot-arguments"
|
||||
echo " --dryrun"
|
||||
echo " --duration minutes | <seconds>s | <hours>h | <days>d"
|
||||
echo " --link hard|soft|copy"
|
||||
@ -72,6 +74,11 @@ usage () {
|
||||
while test $# -gt 0
|
||||
do
|
||||
case "$1" in
|
||||
--bootargs|--bootarg)
|
||||
checkarg --bootargs "(list of kernel boot arguments)" "$#" "$2" '.*' '^--'
|
||||
bootargs="$bootargs $2"
|
||||
shift
|
||||
;;
|
||||
--dryrun)
|
||||
dryrun=1
|
||||
;;
|
||||
@ -156,7 +163,7 @@ do
|
||||
qemu_cmd_dir="`dirname "$i"`"
|
||||
kernel_dir="`echo $qemu_cmd_dir | sed -e 's/\.[0-9]\+$//'`"
|
||||
jitter_dir="`dirname "$kernel_dir"`"
|
||||
kvm-transform.sh "$kernel_dir/bzImage" "$qemu_cmd_dir/console.log" "$jitter_dir" $dur < $T/qemu-cmd > $i
|
||||
kvm-transform.sh "$kernel_dir/bzImage" "$qemu_cmd_dir/console.log" "$jitter_dir" $dur "$bootargs" < $T/qemu-cmd > $i
|
||||
if test -n "$arg_remote"
|
||||
then
|
||||
echo "# TORTURE_KCONFIG_GDB_ARG=''" >> $i
|
||||
|
@ -3,10 +3,14 @@
|
||||
#
|
||||
# Transform a qemu-cmd file to allow reuse.
|
||||
#
|
||||
# Usage: kvm-transform.sh bzImage console.log jitter_dir [ seconds ] < qemu-cmd-in > qemu-cmd-out
|
||||
# Usage: kvm-transform.sh bzImage console.log jitter_dir seconds [ bootargs ] < qemu-cmd-in > qemu-cmd-out
|
||||
#
|
||||
# bzImage: Kernel and initrd from the same prior kvm.sh run.
|
||||
# console.log: File into which to place console output.
|
||||
# jitter_dir: Jitter directory for TORTURE_JITTER_START and
|
||||
# TORTURE_JITTER_STOP environment variables.
|
||||
# seconds: Run duaration for *.shutdown_secs module parameter.
|
||||
# bootargs: New kernel boot parameters. Beware of Robert Tables.
|
||||
#
|
||||
# The original qemu-cmd file is provided on standard input.
|
||||
# The transformed qemu-cmd file is on standard output.
|
||||
@ -17,6 +21,9 @@
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@kernel.org>
|
||||
|
||||
T=`mktemp -d /tmp/kvm-transform.sh.XXXXXXXXXX`
|
||||
trap 'rm -rf $T' 0 2
|
||||
|
||||
image="$1"
|
||||
if test -z "$image"
|
||||
then
|
||||
@ -41,9 +48,17 @@ then
|
||||
echo "Invalid duration, should be numeric in seconds: '$seconds'"
|
||||
exit 1
|
||||
fi
|
||||
bootargs="$5"
|
||||
|
||||
# Build awk program.
|
||||
echo "BEGIN {" > $T/bootarg.awk
|
||||
echo $bootargs | tr -s ' ' '\012' |
|
||||
awk -v dq='"' '/./ { print "\tbootarg[" NR "] = " dq $1 dq ";" }' >> $T/bootarg.awk
|
||||
echo $bootargs | tr -s ' ' '\012' | sed -e 's/=.*$//' |
|
||||
awk -v dq='"' '/./ { print "\tbootpar[" NR "] = " dq $1 dq ";" }' >> $T/bootarg.awk
|
||||
cat >> $T/bootarg.awk << '___EOF___'
|
||||
}
|
||||
|
||||
awk -v image="$image" -v consolelog="$consolelog" -v jitter_dir="$jitter_dir" \
|
||||
-v seconds="$seconds" '
|
||||
/^# seconds=/ {
|
||||
if (seconds == "")
|
||||
print $0;
|
||||
@ -70,13 +85,7 @@ awk -v image="$image" -v consolelog="$consolelog" -v jitter_dir="$jitter_dir" \
|
||||
{
|
||||
line = "";
|
||||
for (i = 1; i <= NF; i++) {
|
||||
if ("" seconds != "" && $i ~ /\.shutdown_secs=[0-9]*$/) {
|
||||
sub(/[0-9]*$/, seconds, $i);
|
||||
if (line == "")
|
||||
line = $i;
|
||||
else
|
||||
line = line " " $i;
|
||||
} else if (line == "") {
|
||||
if (line == "") {
|
||||
line = $i;
|
||||
} else {
|
||||
line = line " " $i;
|
||||
@ -87,7 +96,44 @@ awk -v image="$image" -v consolelog="$consolelog" -v jitter_dir="$jitter_dir" \
|
||||
} else if ($i == "-kernel") {
|
||||
i++;
|
||||
line = line " " image;
|
||||
} else if ($i == "-append") {
|
||||
for (i++; i <= NF; i++) {
|
||||
arg = $i;
|
||||
lq = "";
|
||||
rq = "";
|
||||
if ("" seconds != "" && $i ~ /\.shutdown_secs=[0-9]*$/)
|
||||
sub(/[0-9]*$/, seconds, arg);
|
||||
if (arg ~ /^"/) {
|
||||
lq = substr(arg, 1, 1);
|
||||
arg = substr(arg, 2);
|
||||
}
|
||||
if (arg ~ /"$/) {
|
||||
rq = substr(arg, length($i), 1);
|
||||
arg = substr(arg, 1, length($i) - 1);
|
||||
}
|
||||
par = arg;
|
||||
gsub(/=.*$/, "", par);
|
||||
j = 1;
|
||||
while (bootpar[j] != "") {
|
||||
if (bootpar[j] == par) {
|
||||
arg = "";
|
||||
break;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
if (line == "")
|
||||
line = lq arg;
|
||||
else
|
||||
line = line " " lq arg;
|
||||
}
|
||||
for (j in bootarg)
|
||||
line = line " " bootarg[j];
|
||||
line = line rq;
|
||||
}
|
||||
}
|
||||
print line;
|
||||
}'
|
||||
}
|
||||
___EOF___
|
||||
|
||||
awk -v image="$image" -v consolelog="$consolelog" -v jitter_dir="$jitter_dir" \
|
||||
-v seconds="$seconds" -f $T/bootarg.awk
|
||||
|
Loading…
Reference in New Issue
Block a user