2013-09-28 14:12:21 -07:00
#!/bin/bash
#
# Run a series of 14 tests under KVM. These are not particularly
# well-selected or well-tuned, but are the current set. Run from the
# top level of the source tree.
#
# Edit the definitions below to set the locations of the various directories,
# as well as the test duration.
#
# Usage: sh kvm.sh [ options ]
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Copyright (C) IBM Corporation, 2011
#
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
scriptname = $0
2013-09-30 14:49:43 -07:00
args = " $* "
2013-09-28 14:12:21 -07:00
dur = 30
KVM = ` pwd ` /tools/testing/selftests/rcutorture; export KVM
builddir = ${ KVM } /b1
resdir = ""
2013-09-29 11:13:46 -07:00
configs = ""
2013-09-28 18:44:11 -07:00
ds = ` date +%Y.%m.%d-%H:%M:%S`
2013-09-28 20:37:45 -07:00
kversion = ""
2013-09-28 14:12:21 -07:00
usage ( ) {
echo " Usage: $scriptname optional arguments: "
2013-10-14 08:19:39 -07:00
echo " --bootargs kernel-boot-arguments"
2013-09-28 14:12:21 -07:00
echo " --builddir absolute-pathname"
2013-10-10 14:52:07 -07:00
echo " --buildonly"
2013-09-28 14:12:21 -07:00
echo " --configs \"config-file list\""
2013-09-28 18:44:11 -07:00
echo " --datestamp string"
2013-09-28 14:12:21 -07:00
echo " --duration minutes"
2013-10-04 13:15:55 -07:00
echo " --interactive"
2013-09-28 20:37:45 -07:00
echo " --kversion vN.NN"
2013-10-04 13:15:55 -07:00
echo " --mac nn:nn:nn:nn:nn:nn"
2013-10-15 09:22:48 -07:00
echo " --qemu-args qemu-system-..."
2013-09-30 17:17:57 -07:00
echo " --qemu-cmd qemu-system-..."
2013-09-28 14:12:21 -07:00
echo " --results absolute-pathname"
echo " --relbuilddir relative-pathname"
exit 1
}
# checkarg --argname argtype $# arg mustmatch cannotmatch
checkarg ( ) {
if test $3 -le 1
then
echo $1 needs argument $2 matching \" $5 \"
usage
fi
if echo " $4 " | grep -q -e " $5 "
then
:
else
echo $1 $2 \" $4 \" must match \" $5 \"
usage
fi
if echo " $4 " | grep -q -e " $6 "
then
echo $1 $2 \" $4 \" must not match \" $6 \"
usage
fi
}
while test $# -gt 0
do
case " $1 " in
2013-10-14 08:19:39 -07:00
--bootargs)
checkarg --bootargs "(list of kernel boot arguments)" " $# " " $2 " '.*' '^--'
RCU_BOOTARGS = " $2 "
shift
; ;
2013-09-28 14:12:21 -07:00
--builddir)
2013-10-15 09:22:48 -07:00
checkarg --builddir "(absolute pathname)" " $# " " $2 " '^/' '^error'
2013-09-28 14:12:21 -07:00
builddir = $2
gotbuilddir = 1
shift
; ;
2013-10-10 14:52:07 -07:00
--buildonly)
RCU_BUILDONLY = 1; export RCU_BUILDONLY
; ;
2013-09-28 14:12:21 -07:00
--configs)
checkarg --configs "(list of config files)" " $# " " $2 " '^[^/]*$' '^--'
configs = " $2 "
shift
; ;
2013-09-28 18:44:11 -07:00
--datestamp)
checkarg --datestamp "(relative pathname)" " $# " " $2 " '^[^/]*$' '^--'
ds = $2
shift
; ;
2013-09-28 14:12:21 -07:00
--duration)
2013-10-15 09:22:48 -07:00
checkarg --duration "(minutes)" $# " $2 " '^[0-9]*$' '^error'
2013-09-28 14:12:21 -07:00
dur = $2
shift
; ;
2013-10-04 13:15:55 -07:00
--interactive)
RCU_QEMU_INTERACTIVE = 1; export RCU_QEMU_INTERACTIVE
; ;
2013-09-28 20:37:45 -07:00
--kversion)
2013-10-15 09:22:48 -07:00
checkarg --kversion "(kernel version)" $# " $2 " '^v[0-9.]*$' '^error'
2013-09-28 20:37:45 -07:00
kversion = $2
shift
; ;
2013-10-04 13:15:55 -07:00
--mac)
checkarg --mac "(MAC address)" $# " $2 " '^\([0-9a-fA-F]\{2\}:\)\{5\}[0-9a-fA-F]\{2\}$' error
RCU_QEMU_MAC = $2 ; export RCU_QEMU_MAC
shift
; ;
2013-10-15 09:22:48 -07:00
--qemu-args)
checkarg --qemu-args "-qemu args" $# " $2 " '^-' '^error'
RCU_QEMU_ARG = " $2 "
shift
; ;
2013-09-30 17:17:57 -07:00
--qemu-cmd)
checkarg --qemu-cmd "(qemu-system-...)" $# " $2 " 'qemu-system-' '^--'
RCU_QEMU_CMD = " $2 " ; export RCU_QEMU_CMD
shift
; ;
2013-09-28 14:12:21 -07:00
--relbuilddir)
checkarg --relbuilddir "(relative pathname)" " $# " " $2 " '^[^/]*$' '^--'
relbuilddir = $2
gotrelbuilddir = 1
builddir = ${ KVM } /${ relbuilddir }
shift
; ;
--results)
2013-10-15 09:22:48 -07:00
checkarg --results "(absolute pathname)" " $# " " $2 " '^/' '^error'
2013-09-28 14:12:21 -07:00
resdir = $2
shift
; ;
*)
2013-10-01 10:14:09 -07:00
echo Unknown argument $1
2013-09-28 14:12:21 -07:00
usage
; ;
esac
shift
done
PATH = ${ KVM } /bin:$PATH ; export PATH
CONFIGFRAG = ${ KVM } /configs; export CONFIGFRAG
2013-09-29 11:13:46 -07:00
KVPATH = ${ CONFIGFRAG } /$kversion ; export KVPATH
if test -z " $configs "
then
configs = " `cat $CONFIGFRAG / $kversion /CFLIST` "
fi
2013-09-28 14:12:21 -07:00
if test -z " $resdir "
then
resdir = $KVM /res
2013-09-30 14:49:43 -07:00
if ! test -e $resdir
then
mkdir $resdir || :
fi
2013-09-28 14:12:21 -07:00
else
2013-09-30 14:49:43 -07:00
if ! test -e $resdir
then
mkdir -p " $resdir " || :
fi
2013-09-28 14:12:21 -07:00
fi
2013-09-28 18:44:11 -07:00
mkdir $resdir /$ds
2013-09-30 14:49:43 -07:00
touch $resdir /$ds /log
echo $scriptname $args >> $resdir /$ds /log
2013-09-28 18:44:11 -07:00
2013-09-28 14:12:21 -07:00
pwd > $resdir /$ds /testid.txt
if test -d .git
then
git status >> $resdir /$ds /testid.txt
git rev-parse HEAD >> $resdir /$ds /testid.txt
fi
builddir = $KVM /b1
2013-09-30 14:49:43 -07:00
if ! test -e $builddir
then
mkdir $builddir || :
fi
2013-09-28 14:12:21 -07:00
for CF in $configs
do
rd = $resdir /$ds /$CF
mkdir $rd || :
echo Results directory: $rd
2013-10-15 09:22:48 -07:00
kvm-test-1-rcu.sh $CONFIGFRAG /$kversion /$CF $builddir $rd $dur " -nographic $RCU_QEMU_ARG " " rcutorture.test_no_idle_hz=1 rcutorture.verbose=1 $RCU_BOOTARGS "
2013-09-28 14:12:21 -07:00
done
# Tracing: trace_event=rcu:rcu_nocb_grace_period,rcu:rcu_grace_period,rcu:rcu_grace_period_init,rcu:rcu_quiescent_state_report,rcu:rcu_fqs,rcu:rcu_callback,rcu:rcu_torture_read,rcu:rcu_invoke_callback,rcu:rcu_fqs,rcu:rcu_dyntick,rcu:rcu_unlock_preempted_task