Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into next
Pull RCU changes from Ingo Molnar: "The main RCU changes in this cycle were: - RCU torture-test changes. - variable-name renaming cleanup. - update RCU documentation. - miscellaneous fixes. - patch to suppress RCU stall warnings while sysrq requests are being processed" * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (68 commits) rcu: Provide API to suppress stall warnings while sysrc runs rcu: Variable name changed in tree_plugin.h and used in tree.c torture: Remove unused definition torture: Remove __init from torture_init_begin/end torture: Check for multiple concurrent torture tests locktorture: Remove reference to nonexistent Kconfig parameter rcutorture: Run rcu_torture_writer at normal priority rcutorture: Note diffs from git commits rcutorture: Add missing destroy_timer_on_stack() rcutorture: Explicitly test synchronous grace-period primitives rcutorture: Add tests for get_state_synchronize_rcu() rcutorture: Test RCU-sched primitives in TREE_PREEMPT_RCU kernels torture: Use elapsed time to detect hangs rcutorture: Check for rcu_torture_fqs creation errors torture: Better summary diagnostics for build failures torture: Notice if an all-zero cpumask is passed inside a critical section rcutorture: Make rcu_torture_reader() use cond_resched() sched,rcu: Make cond_resched() report RCU quiescent states percpu: Fix raw_cpu_inc_return() rcutorture: Export RCU grace-period kthread wait state to rcutorture ...
This commit is contained in:
@@ -62,7 +62,7 @@ grep '^grep' < $T/u.sh > $T/upd.sh
|
||||
echo "cat - $c" >> $T/upd.sh
|
||||
make mrproper
|
||||
make $buildloc distclean > $builddir/Make.distclean 2>&1
|
||||
make $buildloc defconfig > $builddir/Make.defconfig.out 2>&1
|
||||
make $buildloc $TORTURE_DEFCONFIG > $builddir/Make.defconfig.out 2>&1
|
||||
mv $builddir/.config $builddir/.config.sav
|
||||
sh $T/upd.sh < $builddir/.config.sav > $builddir/.config
|
||||
cp $builddir/.config $builddir/.config.new
|
||||
|
@@ -76,15 +76,39 @@ configfrag_hotplug_cpu () {
|
||||
grep -q '^CONFIG_HOTPLUG_CPU=y$' "$1"
|
||||
}
|
||||
|
||||
# identify_boot_image qemu-cmd
|
||||
#
|
||||
# Returns the relative path to the kernel build image. This will be
|
||||
# arch/<arch>/boot/bzImage unless overridden with the TORTURE_BOOT_IMAGE
|
||||
# environment variable.
|
||||
identify_boot_image () {
|
||||
if test -n "$TORTURE_BOOT_IMAGE"
|
||||
then
|
||||
echo $TORTURE_BOOT_IMAGE
|
||||
else
|
||||
case "$1" in
|
||||
qemu-system-x86_64|qemu-system-i386)
|
||||
echo arch/x86/boot/bzImage
|
||||
;;
|
||||
qemu-system-ppc64)
|
||||
echo arch/powerpc/boot/bzImage
|
||||
;;
|
||||
*)
|
||||
echo ""
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
# identify_qemu builddir
|
||||
#
|
||||
# Returns our best guess as to which qemu command is appropriate for
|
||||
# the kernel at hand. Override with the RCU_QEMU_CMD environment variable.
|
||||
# the kernel at hand. Override with the TORTURE_QEMU_CMD environment variable.
|
||||
identify_qemu () {
|
||||
local u="`file "$1"`"
|
||||
if test -n "$RCU_QEMU_CMD"
|
||||
if test -n "$TORTURE_QEMU_CMD"
|
||||
then
|
||||
echo $RCU_QEMU_CMD
|
||||
echo $TORTURE_QEMU_CMD
|
||||
elif echo $u | grep -q x86-64
|
||||
then
|
||||
echo qemu-system-x86_64
|
||||
@@ -98,7 +122,7 @@ identify_qemu () {
|
||||
echo Cannot figure out what qemu command to use! 1>&2
|
||||
echo file $1 output: $u
|
||||
# Usually this will be one of /usr/bin/qemu-system-*
|
||||
# Use RCU_QEMU_CMD environment variable or appropriate
|
||||
# Use TORTURE_QEMU_CMD environment variable or appropriate
|
||||
# argument to top-level script.
|
||||
exit 1
|
||||
fi
|
||||
@@ -107,14 +131,14 @@ identify_qemu () {
|
||||
# identify_qemu_append qemu-cmd
|
||||
#
|
||||
# Output arguments for the qemu "-append" string based on CPU type
|
||||
# and the RCU_QEMU_INTERACTIVE environment variable.
|
||||
# and the TORTURE_QEMU_INTERACTIVE environment variable.
|
||||
identify_qemu_append () {
|
||||
case "$1" in
|
||||
qemu-system-x86_64|qemu-system-i386)
|
||||
echo noapic selinux=0 initcall_debug debug
|
||||
;;
|
||||
esac
|
||||
if test -n "$RCU_QEMU_INTERACTIVE"
|
||||
if test -n "$TORTURE_QEMU_INTERACTIVE"
|
||||
then
|
||||
echo root=/dev/sda
|
||||
else
|
||||
@@ -124,8 +148,8 @@ identify_qemu_append () {
|
||||
|
||||
# identify_qemu_args qemu-cmd serial-file
|
||||
#
|
||||
# Output arguments for qemu arguments based on the RCU_QEMU_MAC
|
||||
# and RCU_QEMU_INTERACTIVE environment variables.
|
||||
# Output arguments for qemu arguments based on the TORTURE_QEMU_MAC
|
||||
# and TORTURE_QEMU_INTERACTIVE environment variables.
|
||||
identify_qemu_args () {
|
||||
case "$1" in
|
||||
qemu-system-x86_64|qemu-system-i386)
|
||||
@@ -133,17 +157,17 @@ identify_qemu_args () {
|
||||
qemu-system-ppc64)
|
||||
echo -enable-kvm -M pseries -cpu POWER7 -nodefaults
|
||||
echo -device spapr-vscsi
|
||||
if test -n "$RCU_QEMU_INTERACTIVE" -a -n "$RCU_QEMU_MAC"
|
||||
if test -n "$TORTURE_QEMU_INTERACTIVE" -a -n "$TORTURE_QEMU_MAC"
|
||||
then
|
||||
echo -device spapr-vlan,netdev=net0,mac=$RCU_QEMU_MAC
|
||||
echo -device spapr-vlan,netdev=net0,mac=$TORTURE_QEMU_MAC
|
||||
echo -netdev bridge,br=br0,id=net0
|
||||
elif test -n "$RCU_QEMU_INTERACTIVE"
|
||||
elif test -n "$TORTURE_QEMU_INTERACTIVE"
|
||||
then
|
||||
echo -net nic -net user
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if test -n "$RCU_QEMU_INTERACTIVE"
|
||||
if test -n "$TORTURE_QEMU_INTERACTIVE"
|
||||
then
|
||||
echo -monitor stdio -serial pty -S
|
||||
else
|
||||
|
@@ -45,9 +45,9 @@ T=/tmp/test-linux.sh.$$
|
||||
trap 'rm -rf $T' 0
|
||||
mkdir $T
|
||||
|
||||
cat ${config_template} | grep -v CONFIG_RCU_TORTURE_TEST > $T/config
|
||||
grep -v 'CONFIG_[A-Z]*_TORTURE_TEST' < ${config_template} > $T/config
|
||||
cat << ___EOF___ >> $T/config
|
||||
CONFIG_INITRAMFS_SOURCE="$RCU_INITRD"
|
||||
CONFIG_INITRAMFS_SOURCE="$TORTURE_INITRD"
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
CONFIG_VIRTIO_CONSOLE=y
|
||||
___EOF___
|
||||
@@ -60,7 +60,7 @@ then
|
||||
exit 2
|
||||
fi
|
||||
ncpus=`cpus2use.sh`
|
||||
make O=$builddir -j$ncpus $RCU_KMAKE_ARG > $builddir/Make.out 2>&1
|
||||
make O=$builddir -j$ncpus $TORTURE_KMAKE_ARG > $builddir/Make.out 2>&1
|
||||
retval=$?
|
||||
if test $retval -ne 0 || grep "rcu[^/]*": < $builddir/Make.out | egrep -q "Stop|Error|error:|warning:" || egrep -q "Stop|Error|error:" < $builddir/Make.out
|
||||
then
|
||||
|
@@ -35,7 +35,7 @@ configfile=`echo $i | sed -e 's/^.*\///'`
|
||||
ncs=`grep "Writes: Total:" $i/console.log 2> /dev/null | tail -1 | sed -e 's/^.* Total: //' -e 's/ .*$//'`
|
||||
if test -z "$ncs"
|
||||
then
|
||||
echo $configfile
|
||||
echo "$configfile -------"
|
||||
else
|
||||
title="$configfile ------- $ncs acquisitions/releases"
|
||||
dur=`sed -e 's/^.* locktorture.shutdown_secs=//' -e 's/ .*$//' < $i/qemu-cmd 2> /dev/null`
|
||||
|
@@ -35,7 +35,7 @@ configfile=`echo $i | sed -e 's/^.*\///'`
|
||||
ngps=`grep ver: $i/console.log 2> /dev/null | tail -1 | sed -e 's/^.* ver: //' -e 's/ .*$//'`
|
||||
if test -z "$ngps"
|
||||
then
|
||||
echo $configfile
|
||||
echo "$configfile -------"
|
||||
else
|
||||
title="$configfile ------- $ngps grace periods"
|
||||
dur=`sed -e 's/^.* rcutorture.shutdown_secs=//' -e 's/ .*$//' < $i/qemu-cmd 2> /dev/null`
|
||||
|
@@ -25,6 +25,7 @@
|
||||
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
|
||||
PATH=`pwd`/tools/testing/selftests/rcutorture/bin:$PATH; export PATH
|
||||
. tools/testing/selftests/rcutorture/bin/functions.sh
|
||||
for rd in "$@"
|
||||
do
|
||||
firsttime=1
|
||||
@@ -39,13 +40,24 @@ do
|
||||
fi
|
||||
TORTURE_SUITE="`cat $i/../TORTURE_SUITE`"
|
||||
kvm-recheck-${TORTURE_SUITE}.sh $i
|
||||
configcheck.sh $i/.config $i/ConfigFragment
|
||||
parse-build.sh $i/Make.out $configfile
|
||||
parse-rcutorture.sh $i/console.log $configfile
|
||||
parse-console.sh $i/console.log $configfile
|
||||
if test -r $i/Warnings
|
||||
if test -f "$i/console.log"
|
||||
then
|
||||
cat $i/Warnings
|
||||
configcheck.sh $i/.config $i/ConfigFragment
|
||||
parse-build.sh $i/Make.out $configfile
|
||||
parse-torture.sh $i/console.log $configfile
|
||||
parse-console.sh $i/console.log $configfile
|
||||
if test -r $i/Warnings
|
||||
then
|
||||
cat $i/Warnings
|
||||
fi
|
||||
else
|
||||
if test -f "$i/qemu-cmd"
|
||||
then
|
||||
print_bug qemu failed
|
||||
else
|
||||
print_bug Build failed
|
||||
fi
|
||||
echo " $i"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
@@ -94,9 +94,17 @@ fi
|
||||
# CONFIG_YENTA=n
|
||||
if kvm-build.sh $config_template $builddir $T
|
||||
then
|
||||
QEMU="`identify_qemu $builddir/vmlinux`"
|
||||
BOOT_IMAGE="`identify_boot_image $QEMU`"
|
||||
cp $builddir/Make*.out $resdir
|
||||
cp $builddir/.config $resdir
|
||||
cp $builddir/arch/x86/boot/bzImage $resdir
|
||||
if test -n "$BOOT_IMAGE"
|
||||
then
|
||||
cp $builddir/$BOOT_IMAGE $resdir
|
||||
else
|
||||
echo No identifiable boot image, not running KVM, see $resdir.
|
||||
echo Do the torture scripts know about your architecture?
|
||||
fi
|
||||
parse-build.sh $resdir/Make.out $title
|
||||
if test -f $builddir.wait
|
||||
then
|
||||
@@ -104,6 +112,7 @@ then
|
||||
fi
|
||||
else
|
||||
cp $builddir/Make*.out $resdir
|
||||
cp $builddir/.config $resdir || :
|
||||
echo Build failed, not running KVM, see $resdir.
|
||||
if test -f $builddir.wait
|
||||
then
|
||||
@@ -124,9 +133,6 @@ cd $KVM
|
||||
kstarttime=`awk 'BEGIN { print systime() }' < /dev/null`
|
||||
echo ' ---' `date`: Starting kernel
|
||||
|
||||
# Determine the appropriate flavor of qemu command.
|
||||
QEMU="`identify_qemu $builddir/vmlinux`"
|
||||
|
||||
# Generate -smp qemu argument.
|
||||
qemu_args="-nographic $qemu_args"
|
||||
cpu_count=`configNR_CPUS.sh $config_template`
|
||||
@@ -151,27 +157,38 @@ boot_args="`configfrag_boot_params "$boot_args" "$config_template"`"
|
||||
# Generate kernel-version-specific boot parameters
|
||||
boot_args="`per_version_boot_params "$boot_args" $builddir/.config $seconds`"
|
||||
|
||||
echo $QEMU $qemu_args -m 512 -kernel $builddir/arch/x86/boot/bzImage -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
|
||||
if test -n "$RCU_BUILDONLY"
|
||||
echo $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append \"$qemu_append $boot_args\" > $resdir/qemu-cmd
|
||||
if test -n "$TORTURE_BUILDONLY"
|
||||
then
|
||||
echo Build-only run specified, boot/test omitted.
|
||||
exit 0
|
||||
fi
|
||||
$QEMU $qemu_args -m 512 -kernel $builddir/arch/x86/boot/bzImage -append "$qemu_append $boot_args" &
|
||||
( $QEMU $qemu_args -m 512 -kernel $builddir/$BOOT_IMAGE -append "$qemu_append $boot_args"; echo $? > $resdir/qemu-retval ) &
|
||||
qemu_pid=$!
|
||||
commandcompleted=0
|
||||
echo Monitoring qemu job at pid $qemu_pid
|
||||
for ((i=0;i<$seconds;i++))
|
||||
while :
|
||||
do
|
||||
kruntime=`awk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
|
||||
if kill -0 $qemu_pid > /dev/null 2>&1
|
||||
then
|
||||
if test $kruntime -ge $seconds
|
||||
then
|
||||
break;
|
||||
fi
|
||||
sleep 1
|
||||
else
|
||||
commandcompleted=1
|
||||
kruntime=`awk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
|
||||
if test $kruntime -lt $seconds
|
||||
then
|
||||
echo Completed in $kruntime vs. $seconds >> $resdir/Warnings 2>&1
|
||||
grep "^(qemu) qemu:" $resdir/kvm-test-1-run.sh.out >> $resdir/Warnings 2>&1
|
||||
killpid="`sed -n "s/^(qemu) qemu: terminating on signal [0-9]* from pid \([0-9]*\).*$/\1/p" $resdir/Warnings`"
|
||||
if test -n "$killpid"
|
||||
then
|
||||
echo "ps -fp $killpid" >> $resdir/Warnings 2>&1
|
||||
ps -fp $killpid >> $resdir/Warnings 2>&1
|
||||
fi
|
||||
else
|
||||
echo ' ---' `date`: Kernel done
|
||||
fi
|
||||
@@ -181,23 +198,25 @@ done
|
||||
if test $commandcompleted -eq 0
|
||||
then
|
||||
echo Grace period for qemu job at pid $qemu_pid
|
||||
for ((i=0;i<=$grace;i++))
|
||||
while :
|
||||
do
|
||||
kruntime=`awk 'BEGIN { print systime() - '"$kstarttime"' }' < /dev/null`
|
||||
if kill -0 $qemu_pid > /dev/null 2>&1
|
||||
then
|
||||
sleep 1
|
||||
:
|
||||
else
|
||||
break
|
||||
fi
|
||||
if test $i -eq $grace
|
||||
if test $kruntime -ge $((seconds + grace))
|
||||
then
|
||||
kruntime=`awk 'BEGIN { print systime() - '"$kstarttime"' }'`
|
||||
echo "!!! Hang at $kruntime vs. $seconds seconds" >> $resdir/Warnings 2>&1
|
||||
kill -KILL $qemu_pid
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
fi
|
||||
|
||||
cp $builddir/console.log $resdir
|
||||
parse-${TORTURE_SUITE}torture.sh $resdir/console.log $title
|
||||
parse-torture.sh $resdir/console.log $title
|
||||
parse-console.sh $resdir/console.log $title
|
||||
|
@@ -38,9 +38,10 @@ dur=30
|
||||
dryrun=""
|
||||
KVM="`pwd`/tools/testing/selftests/rcutorture"; export KVM
|
||||
PATH=${KVM}/bin:$PATH; export PATH
|
||||
builddir="${KVM}/b1"
|
||||
RCU_INITRD="$KVM/initrd"; export RCU_INITRD
|
||||
RCU_KMAKE_ARG=""; export RCU_KMAKE_ARG
|
||||
TORTURE_DEFCONFIG=defconfig
|
||||
TORTURE_BOOT_IMAGE=""
|
||||
TORTURE_INITRD="$KVM/initrd"; export TORTURE_INITRD
|
||||
TORTURE_KMAKE_ARG=""
|
||||
TORTURE_SUITE=rcu
|
||||
resdir=""
|
||||
configs=""
|
||||
@@ -53,11 +54,12 @@ kversion=""
|
||||
usage () {
|
||||
echo "Usage: $scriptname optional arguments:"
|
||||
echo " --bootargs kernel-boot-arguments"
|
||||
echo " --builddir absolute-pathname"
|
||||
echo " --bootimage relative-path-to-kernel-boot-image"
|
||||
echo " --buildonly"
|
||||
echo " --configs \"config-file list\""
|
||||
echo " --cpus N"
|
||||
echo " --datestamp string"
|
||||
echo " --defconfig string"
|
||||
echo " --dryrun sched|script"
|
||||
echo " --duration minutes"
|
||||
echo " --interactive"
|
||||
@@ -67,7 +69,6 @@ usage () {
|
||||
echo " --no-initrd"
|
||||
echo " --qemu-args qemu-system-..."
|
||||
echo " --qemu-cmd qemu-system-..."
|
||||
echo " --relbuilddir relative-pathname"
|
||||
echo " --results absolute-pathname"
|
||||
echo " --torture rcu"
|
||||
exit 1
|
||||
@@ -78,17 +79,16 @@ do
|
||||
case "$1" in
|
||||
--bootargs)
|
||||
checkarg --bootargs "(list of kernel boot arguments)" "$#" "$2" '.*' '^--'
|
||||
RCU_BOOTARGS="$2"
|
||||
TORTURE_BOOTARGS="$2"
|
||||
shift
|
||||
;;
|
||||
--builddir)
|
||||
checkarg --builddir "(absolute pathname)" "$#" "$2" '^/' '^error'
|
||||
builddir=$2
|
||||
gotbuilddir=1
|
||||
--bootimage)
|
||||
checkarg --bootimage "(relative path to kernel boot image)" "$#" "$2" '[a-zA-Z0-9][a-zA-Z0-9_]*' '^--'
|
||||
TORTURE_BOOT_IMAGE="$2"
|
||||
shift
|
||||
;;
|
||||
--buildonly)
|
||||
RCU_BUILDONLY=1; export RCU_BUILDONLY
|
||||
TORTURE_BUILDONLY=1
|
||||
;;
|
||||
--configs)
|
||||
checkarg --configs "(list of config files)" "$#" "$2" '^[^/]*$' '^--'
|
||||
@@ -105,6 +105,11 @@ do
|
||||
ds=$2
|
||||
shift
|
||||
;;
|
||||
--defconfig)
|
||||
checkarg --defconfig "defconfigtype" "$#" "$2" '^[^/][^/]*$' '^--'
|
||||
TORTURE_DEFCONFIG=$2
|
||||
shift
|
||||
;;
|
||||
--dryrun)
|
||||
checkarg --dryrun "sched|script" $# "$2" 'sched\|script' '^--'
|
||||
dryrun=$2
|
||||
@@ -116,11 +121,11 @@ do
|
||||
shift
|
||||
;;
|
||||
--interactive)
|
||||
RCU_QEMU_INTERACTIVE=1; export RCU_QEMU_INTERACTIVE
|
||||
TORTURE_QEMU_INTERACTIVE=1; export TORTURE_QEMU_INTERACTIVE
|
||||
;;
|
||||
--kmake-arg)
|
||||
checkarg --kmake-arg "(kernel make arguments)" $# "$2" '.*' '^error$'
|
||||
RCU_KMAKE_ARG="$2"; export RCU_KMAKE_ARG
|
||||
TORTURE_KMAKE_ARG="$2"
|
||||
shift
|
||||
;;
|
||||
--kversion)
|
||||
@@ -130,27 +135,20 @@ do
|
||||
;;
|
||||
--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
|
||||
TORTURE_QEMU_MAC=$2
|
||||
shift
|
||||
;;
|
||||
--no-initrd)
|
||||
RCU_INITRD=""; export RCU_INITRD
|
||||
TORTURE_INITRD=""; export TORTURE_INITRD
|
||||
;;
|
||||
--qemu-args)
|
||||
checkarg --qemu-args "-qemu args" $# "$2" '^-' '^error'
|
||||
RCU_QEMU_ARG="$2"
|
||||
TORTURE_QEMU_ARG="$2"
|
||||
shift
|
||||
;;
|
||||
--qemu-cmd)
|
||||
checkarg --qemu-cmd "(qemu-system-...)" $# "$2" 'qemu-system-' '^--'
|
||||
RCU_QEMU_CMD="$2"; export RCU_QEMU_CMD
|
||||
shift
|
||||
;;
|
||||
--relbuilddir)
|
||||
checkarg --relbuilddir "(relative pathname)" "$#" "$2" '^[^/]*$' '^--'
|
||||
relbuilddir=$2
|
||||
gotrelbuilddir=1
|
||||
builddir=${KVM}/${relbuilddir}
|
||||
TORTURE_QEMU_CMD="$2"
|
||||
shift
|
||||
;;
|
||||
--results)
|
||||
@@ -184,30 +182,6 @@ then
|
||||
resdir=$KVM/res
|
||||
fi
|
||||
|
||||
if test "$dryrun" = ""
|
||||
then
|
||||
if ! test -e $resdir
|
||||
then
|
||||
mkdir -p "$resdir" || :
|
||||
fi
|
||||
mkdir $resdir/$ds
|
||||
|
||||
# Be noisy only if running the script.
|
||||
echo Results directory: $resdir/$ds
|
||||
echo $scriptname $args
|
||||
|
||||
touch $resdir/$ds/log
|
||||
echo $scriptname $args >> $resdir/$ds/log
|
||||
echo ${TORTURE_SUITE} > $resdir/$ds/TORTURE_SUITE
|
||||
|
||||
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
|
||||
fi
|
||||
|
||||
# Create a file of test-name/#cpus pairs, sorted by decreasing #cpus.
|
||||
touch $T/cfgcpu
|
||||
for CF in $configs
|
||||
@@ -274,7 +248,39 @@ END {
|
||||
|
||||
# Generate a script to execute the tests in appropriate batches.
|
||||
cat << ___EOF___ > $T/script
|
||||
CONFIGFRAG="$CONFIGFRAG"; export CONFIGFRAG
|
||||
KVM="$KVM"; export KVM
|
||||
KVPATH="$KVPATH"; export KVPATH
|
||||
PATH="$PATH"; export PATH
|
||||
TORTURE_BOOT_IMAGE="$TORTURE_BOOT_IMAGE"; export TORTURE_BOOT_IMAGE
|
||||
TORTURE_BUILDONLY="$TORTURE_BUILDONLY"; export TORTURE_BUILDONLY
|
||||
TORTURE_DEFCONFIG="$TORTURE_DEFCONFIG"; export TORTURE_DEFCONFIG
|
||||
TORTURE_INITRD="$TORTURE_INITRD"; export TORTURE_INITRD
|
||||
TORTURE_KMAKE_ARG="$TORTURE_KMAKE_ARG"; export TORTURE_KMAKE_ARG
|
||||
TORTURE_QEMU_CMD="$TORTURE_QEMU_CMD"; export TORTURE_QEMU_CMD
|
||||
TORTURE_QEMU_INTERACTIVE="$TORTURE_QEMU_INTERACTIVE"; export TORTURE_QEMU_INTERACTIVE
|
||||
TORTURE_QEMU_MAC="$TORTURE_QEMU_MAC"; export TORTURE_QEMU_MAC
|
||||
TORTURE_SUITE="$TORTURE_SUITE"; export TORTURE_SUITE
|
||||
if ! test -e $resdir
|
||||
then
|
||||
mkdir -p "$resdir" || :
|
||||
fi
|
||||
mkdir $resdir/$ds
|
||||
echo Results directory: $resdir/$ds
|
||||
echo $scriptname $args
|
||||
touch $resdir/$ds/log
|
||||
echo $scriptname $args >> $resdir/$ds/log
|
||||
echo ${TORTURE_SUITE} > $resdir/$ds/TORTURE_SUITE
|
||||
pwd > $resdir/$ds/testid.txt
|
||||
if test -d .git
|
||||
then
|
||||
git status >> $resdir/$ds/testid.txt
|
||||
git rev-parse HEAD >> $resdir/$ds/testid.txt
|
||||
if ! git diff HEAD > $T/git-diff 2>&1
|
||||
then
|
||||
cp $T/git-diff $resdir/$ds
|
||||
fi
|
||||
fi
|
||||
___EOF___
|
||||
awk < $T/cfgcpu.pack \
|
||||
-v CONFIGDIR="$CONFIGFRAG/$kversion/" \
|
||||
@@ -282,8 +288,8 @@ awk < $T/cfgcpu.pack \
|
||||
-v ncpus=$cpus \
|
||||
-v rd=$resdir/$ds/ \
|
||||
-v dur=$dur \
|
||||
-v RCU_QEMU_ARG=$RCU_QEMU_ARG \
|
||||
-v RCU_BOOTARGS=$RCU_BOOTARGS \
|
||||
-v TORTURE_QEMU_ARG="$TORTURE_QEMU_ARG" \
|
||||
-v TORTURE_BOOTARGS="$TORTURE_BOOTARGS" \
|
||||
'BEGIN {
|
||||
i = 0;
|
||||
}
|
||||
@@ -320,7 +326,7 @@ function dump(first, pastlast)
|
||||
print "touch " builddir ".wait";
|
||||
print "mkdir " builddir " > /dev/null 2>&1 || :";
|
||||
print "mkdir " rd cfr[jn] " || :";
|
||||
print "kvm-test-1-run.sh " CONFIGDIR cf[j], builddir, rd cfr[jn], dur " \"" RCU_QEMU_ARG "\" \"" RCU_BOOTARGS "\" > " rd cfr[jn] "/kvm-test-1-run.sh.out 2>&1 &"
|
||||
print "kvm-test-1-run.sh " CONFIGDIR cf[j], builddir, rd cfr[jn], dur " \"" TORTURE_QEMU_ARG "\" \"" TORTURE_BOOTARGS "\" > " rd cfr[jn] "/kvm-test-1-run.sh.out 2>&1 &"
|
||||
print "echo ", cfr[jn], cpusr[jn] ovf ": Waiting for build to complete. `date`";
|
||||
print "echo ", cfr[jn], cpusr[jn] ovf ": Waiting for build to complete. `date` >> " rd "/log";
|
||||
print "while test -f " builddir ".wait"
|
||||
@@ -374,28 +380,26 @@ END {
|
||||
dump(first, i);
|
||||
}' >> $T/script
|
||||
|
||||
cat << ___EOF___ >> $T/script
|
||||
echo
|
||||
echo
|
||||
echo " --- `date` Test summary:"
|
||||
echo Results directory: $resdir/$ds
|
||||
if test -z "$TORTURE_BUILDONLY"
|
||||
then
|
||||
kvm-recheck.sh $resdir/$ds
|
||||
fi
|
||||
___EOF___
|
||||
|
||||
if test "$dryrun" = script
|
||||
then
|
||||
# Dump out the script, but define the environment variables that
|
||||
# it needs to run standalone.
|
||||
echo CONFIGFRAG="$CONFIGFRAG; export CONFIGFRAG"
|
||||
echo KVM="$KVM; export KVM"
|
||||
echo KVPATH="$KVPATH; export KVPATH"
|
||||
echo PATH="$PATH; export PATH"
|
||||
echo RCU_BUILDONLY="$RCU_BUILDONLY; export RCU_BUILDONLY"
|
||||
echo RCU_INITRD="$RCU_INITRD; export RCU_INITRD"
|
||||
echo RCU_KMAKE_ARG="$RCU_KMAKE_ARG; export RCU_KMAKE_ARG"
|
||||
echo RCU_QEMU_CMD="$RCU_QEMU_CMD; export RCU_QEMU_CMD"
|
||||
echo RCU_QEMU_INTERACTIVE="$RCU_QEMU_INTERACTIVE; export RCU_QEMU_INTERACTIVE"
|
||||
echo RCU_QEMU_MAC="$RCU_QEMU_MAC; export RCU_QEMU_MAC"
|
||||
echo "mkdir -p "$resdir" || :"
|
||||
echo "mkdir $resdir/$ds"
|
||||
cat $T/script
|
||||
exit 0
|
||||
elif test "$dryrun" = sched
|
||||
then
|
||||
# Extract the test run schedule from the script.
|
||||
egrep 'start batch|Starting build\.' $T/script |
|
||||
egrep 'Start batch|Starting build\.' $T/script |
|
||||
grep -v ">>" |
|
||||
sed -e 's/:.*$//' -e 's/^echo //'
|
||||
exit 0
|
||||
else
|
||||
@@ -404,9 +408,3 @@ else
|
||||
fi
|
||||
|
||||
# Tracing: trace_event=rcu:rcu_grace_period,rcu:rcu_future_grace_period,rcu:rcu_grace_period_init,rcu:rcu_nocb_wake,rcu:rcu_preempt_task,rcu:rcu_unlock_preempted_task,rcu:rcu_quiescent_state_report,rcu:rcu_fqs,rcu:rcu_callback,rcu:rcu_kfree_callback,rcu:rcu_batch_start,rcu:rcu_invoke_callback,rcu:rcu_invoke_kfree_callback,rcu:rcu_batch_end,rcu:rcu_torture_read,rcu:rcu_barrier
|
||||
|
||||
echo
|
||||
echo
|
||||
echo " --- `date` Test summary:"
|
||||
echo Results directory: $resdir/$ds
|
||||
kvm-recheck.sh $resdir/$ds
|
||||
|
@@ -1,14 +1,14 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Check the console output from an rcutorture run for goodness.
|
||||
# Check the console output from a torture run for goodness.
|
||||
# The "file" is a pathname on the local system, and "title" is
|
||||
# a text string for error-message purposes.
|
||||
#
|
||||
# The file must contain rcutorture output, but can be interspersed
|
||||
# with other dmesg text.
|
||||
# The file must contain torture output, but can be interspersed
|
||||
# with other dmesg text, as in console-log output.
|
||||
#
|
||||
# Usage:
|
||||
# sh parse-rcutorture.sh file title
|
||||
# sh parse-torture.sh file title
|
||||
#
|
||||
# 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
|
||||
@@ -28,7 +28,7 @@
|
||||
#
|
||||
# Authors: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||
|
||||
T=/tmp/parse-rcutorture.sh.$$
|
||||
T=/tmp/parse-torture.sh.$$
|
||||
file="$1"
|
||||
title="$2"
|
||||
|
||||
@@ -36,13 +36,13 @@ trap 'rm -f $T.seq' 0
|
||||
|
||||
. functions.sh
|
||||
|
||||
# check for presence of rcutorture.txt file
|
||||
# check for presence of torture output file.
|
||||
|
||||
if test -f "$file" -a -r "$file"
|
||||
then
|
||||
:
|
||||
else
|
||||
echo $title unreadable rcutorture.txt file: $file
|
||||
echo $title unreadable torture output file: $file
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -76,9 +76,9 @@ BEGIN {
|
||||
END {
|
||||
if (badseq) {
|
||||
if (badseqno1 == badseqno2 && badseqno2 == ver)
|
||||
print "RCU GP HANG at " ver " rcutorture stat " badseqnr;
|
||||
print "GP HANG at " ver " torture stat " badseqnr;
|
||||
else
|
||||
print "BAD SEQ " badseqno1 ":" badseqno2 " last:" ver " RCU version " badseqnr;
|
||||
print "BAD SEQ " badseqno1 ":" badseqno2 " last:" ver " version " badseqnr;
|
||||
}
|
||||
}' > $T.seq
|
||||
|
||||
@@ -91,13 +91,13 @@ then
|
||||
exit 2
|
||||
fi
|
||||
else
|
||||
if grep -q RCU_HOTPLUG $file
|
||||
if grep -q "_HOTPLUG:" $file
|
||||
then
|
||||
print_warning HOTPLUG FAILURES $title `cat $T.seq`
|
||||
echo " " $file
|
||||
exit 3
|
||||
fi
|
||||
echo $title no success message, `grep --binary-files=text 'ver:' $file | wc -l` successful RCU version messages
|
||||
echo $title no success message, `grep --binary-files=text 'ver:' $file | wc -l` successful version messages
|
||||
if test -s $T.seq
|
||||
then
|
||||
print_warning $title `cat $T.seq`
|
25
tools/testing/selftests/rcutorture/configs/rcu/TREE02-T
Normal file
25
tools/testing/selftests/rcutorture/configs/rcu/TREE02-T
Normal file
@@ -0,0 +1,25 @@
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=8
|
||||
CONFIG_PREEMPT_NONE=n
|
||||
CONFIG_PREEMPT_VOLUNTARY=n
|
||||
CONFIG_PREEMPT=y
|
||||
#CHECK#CONFIG_TREE_PREEMPT_RCU=y
|
||||
CONFIG_HZ_PERIODIC=n
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
CONFIG_NO_HZ_FULL=n
|
||||
CONFIG_RCU_FAST_NO_HZ=n
|
||||
CONFIG_RCU_TRACE=y
|
||||
CONFIG_HOTPLUG_CPU=n
|
||||
CONFIG_SUSPEND=n
|
||||
CONFIG_HIBERNATION=n
|
||||
CONFIG_RCU_FANOUT=3
|
||||
CONFIG_RCU_FANOUT_LEAF=3
|
||||
CONFIG_RCU_FANOUT_EXACT=n
|
||||
CONFIG_RCU_NOCB_CPU=n
|
||||
CONFIG_DEBUG_LOCK_ALLOC=y
|
||||
CONFIG_PROVE_LOCKING=n
|
||||
CONFIG_PROVE_RCU_DELAY=n
|
||||
CONFIG_RCU_CPU_STALL_INFO=n
|
||||
CONFIG_RCU_CPU_STALL_VERBOSE=y
|
||||
CONFIG_RCU_BOOST=n
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=n
|
@@ -0,0 +1 @@
|
||||
rcutorture.torture_type=sched
|
Reference in New Issue
Block a user