1bfc19c13SPaul E. McKenney#!/bin/bash 2bfc19c13SPaul E. McKenney# SPDX-License-Identifier: GPL-2.0+ 3bfc19c13SPaul E. McKenney# 4bfc19c13SPaul E. McKenney# Run a series of torture tests, intended for overnight or 5bfc19c13SPaul E. McKenney# longer timeframes, and also for large systems. 6bfc19c13SPaul E. McKenney# 7bfc19c13SPaul E. McKenney# Usage: torture.sh [ options ] 8bfc19c13SPaul E. McKenney# 9bfc19c13SPaul E. McKenney# Copyright (C) 2020 Facebook, Inc. 10bfc19c13SPaul E. McKenney# 11bfc19c13SPaul E. McKenney# Authors: Paul E. McKenney <paulmck@kernel.org> 12bfc19c13SPaul E. McKenney 13bfc19c13SPaul E. McKenneyscriptname=$0 14bfc19c13SPaul E. McKenneyargs="$*" 15bfc19c13SPaul E. McKenney 16a7d89cfbSPaul E. McKenneyRCUTORTURE="`pwd`/tools/testing/selftests/rcutorture"; export RCUTORTURE 17a7d89cfbSPaul E. McKenneyPATH=${RCUTORTURE}/bin:$PATH; export PATH 181adb5d6bSPaul E. McKenney. functions.sh 191adb5d6bSPaul E. McKenney 20a115a775SPaul E. McKenneyTORTURE_ALLOTED_CPUS="`identify_qemu_vcpus`" 21a115a775SPaul E. McKenneyMAKE_ALLOTED_CPUS=$((TORTURE_ALLOTED_CPUS*2)) 2269d2b33eSPaul E. McKenneyHALF_ALLOTED_CPUS=$((TORTURE_ALLOTED_CPUS/2)) 2369d2b33eSPaul E. McKenneyif test "$HALF_ALLOTED_CPUS" -lt 1 2469d2b33eSPaul E. McKenneythen 2569d2b33eSPaul E. McKenney HALF_ALLOTED_CPUS=1 2669d2b33eSPaul E. McKenneyfi 27264da483SPaul E. McKenneyVERBOSE_BATCH_CPUS=$((TORTURE_ALLOTED_CPUS/16)) 28264da483SPaul E. McKenneyif test "$VERBOSE_BATCH_CPUS" -lt 2 29264da483SPaul E. McKenneythen 30264da483SPaul E. McKenney VERBOSE_BATCH_CPUS=0 31264da483SPaul E. McKenneyfi 32a115a775SPaul E. McKenney 338847bd49SPaul E. McKenney# Configurations/scenarios. 348847bd49SPaul E. McKenneyconfigs_rcutorture= 358847bd49SPaul E. McKenneyconfigs_locktorture= 368847bd49SPaul E. McKenneyconfigs_scftorture= 37c54e4138SPaul E. McKenneykcsan_kmake_args= 388847bd49SPaul E. McKenney 39e3e1a997SPaul E. McKenney# Default compression, duration, and apportionment. 4099c80a96SPaul E. McKenneycompress_concurrency="`identify_qemu_vcpus`" 41bfc19c13SPaul E. McKenneyduration_base=10 42bfc19c13SPaul E. McKenneyduration_rcutorture_frac=7 43bfc19c13SPaul E. McKenneyduration_locktorture_frac=1 44bfc19c13SPaul E. McKenneyduration_scftorture_frac=2 45bfc19c13SPaul E. McKenney 46bfc19c13SPaul E. McKenney# "yes" or "no" parameters 47a115a775SPaul E. McKenneydo_allmodconfig=yes 48bfc19c13SPaul E. McKenneydo_rcutorture=yes 49bfc19c13SPaul E. McKenneydo_locktorture=yes 50bfc19c13SPaul E. McKenneydo_scftorture=yes 51bfc19c13SPaul E. McKenneydo_rcuscale=yes 52bfc19c13SPaul E. McKenneydo_refscale=yes 53bfc19c13SPaul E. McKenneydo_kvfree=yes 54bfc19c13SPaul E. McKenneydo_kasan=yes 55bfc19c13SPaul E. McKenneydo_kcsan=no 56ef4dac7dSPaul E. McKenneydo_clocksourcewd=yes 57b6f3c6a2SPaul E. McKenneydo_rt=yes 58dd3ffd12SPaul E. McKenneydo_rcutasksflavors=yes 59db5dc350SPaul E. McKenneydo_srcu_lockdep=yes 60bfc19c13SPaul E. McKenney 61c9a9d8e8SPaul E. McKenney# doyesno - Helper function for yes/no arguments 62c9a9d8e8SPaul E. McKenneyfunction doyesno () { 63c9a9d8e8SPaul E. McKenney if test "$1" = "$2" 64c9a9d8e8SPaul E. McKenney then 65c9a9d8e8SPaul E. McKenney echo yes 66c9a9d8e8SPaul E. McKenney else 67c9a9d8e8SPaul E. McKenney echo no 68c9a9d8e8SPaul E. McKenney fi 69c9a9d8e8SPaul E. McKenney} 70c9a9d8e8SPaul E. McKenney 71bfc19c13SPaul E. McKenneyusage () { 72bfc19c13SPaul E. McKenney echo "Usage: $scriptname optional arguments:" 7399c80a96SPaul E. McKenney echo " --compress-concurrency concurrency" 748847bd49SPaul E. McKenney echo " --configs-rcutorture \"config-file list w/ repeat factor (3*TINY01)\"" 758847bd49SPaul E. McKenney echo " --configs-locktorture \"config-file list w/ repeat factor (10*LOCK01)\"" 768847bd49SPaul E. McKenney echo " --configs-scftorture \"config-file list w/ repeat factor (2*CFLIST)\"" 77f233673cSPaul E. McKenney echo " --do-all" 780feda4daSPaul E. McKenney echo " --do-allmodconfig / --do-no-allmodconfig / --no-allmodconfig" 790feda4daSPaul E. McKenney echo " --do-clocksourcewd / --do-no-clocksourcewd / --no-clocksourcewd" 800feda4daSPaul E. McKenney echo " --do-kasan / --do-no-kasan / --no-kasan" 810feda4daSPaul E. McKenney echo " --do-kcsan / --do-no-kcsan / --no-kcsan" 820feda4daSPaul E. McKenney echo " --do-kvfree / --do-no-kvfree / --no-kvfree" 830feda4daSPaul E. McKenney echo " --do-locktorture / --do-no-locktorture / --no-locktorture" 84bfc19c13SPaul E. McKenney echo " --do-none" 850feda4daSPaul E. McKenney echo " --do-rcuscale / --do-no-rcuscale / --no-rcuscale" 86dd3ffd12SPaul E. McKenney echo " --do-rcutasksflavors / --do-no-rcutasksflavors / --no-rcutasksflavors" 870feda4daSPaul E. McKenney echo " --do-rcutorture / --do-no-rcutorture / --no-rcutorture" 880feda4daSPaul E. McKenney echo " --do-refscale / --do-no-refscale / --no-refscale" 890feda4daSPaul E. McKenney echo " --do-rt / --do-no-rt / --no-rt" 900feda4daSPaul E. McKenney echo " --do-scftorture / --do-no-scftorture / --no-scftorture" 91db5dc350SPaul E. McKenney echo " --do-srcu-lockdep / --do-no-srcu-lockdep / --no-srcu-lockdep" 92bfc19c13SPaul E. McKenney echo " --duration [ <minutes> | <hours>h | <days>d ]" 93c54e4138SPaul E. McKenney echo " --kcsan-kmake-arg kernel-make-arguments" 94bfc19c13SPaul E. McKenney exit 1 95bfc19c13SPaul E. McKenney} 96bfc19c13SPaul E. McKenney 97bfc19c13SPaul E. McKenneywhile test $# -gt 0 98bfc19c13SPaul E. McKenneydo 99bfc19c13SPaul E. McKenney case "$1" in 10099c80a96SPaul E. McKenney --compress-concurrency) 10199c80a96SPaul E. McKenney checkarg --compress-concurrency "(concurrency level)" $# "$2" '^[0-9][0-9]*$' '^error' 10299c80a96SPaul E. McKenney compress_concurrency=$2 103e3e1a997SPaul E. McKenney shift 104e3e1a997SPaul E. McKenney ;; 1058847bd49SPaul E. McKenney --config-rcutorture|--configs-rcutorture) 1068847bd49SPaul E. McKenney checkarg --configs-rcutorture "(list of config files)" "$#" "$2" '^[^/]\+$' '^--' 1078847bd49SPaul E. McKenney configs_rcutorture="$configs_rcutorture $2" 1088847bd49SPaul E. McKenney shift 1098847bd49SPaul E. McKenney ;; 1108847bd49SPaul E. McKenney --config-locktorture|--configs-locktorture) 1118847bd49SPaul E. McKenney checkarg --configs-locktorture "(list of config files)" "$#" "$2" '^[^/]\+$' '^--' 1128847bd49SPaul E. McKenney configs_locktorture="$configs_locktorture $2" 1138847bd49SPaul E. McKenney shift 1148847bd49SPaul E. McKenney ;; 1158847bd49SPaul E. McKenney --config-scftorture|--configs-scftorture) 1168847bd49SPaul E. McKenney checkarg --configs-scftorture "(list of config files)" "$#" "$2" '^[^/]\+$' '^--' 1178847bd49SPaul E. McKenney configs_scftorture="$configs_scftorture $2" 1188847bd49SPaul E. McKenney shift 1198847bd49SPaul E. McKenney ;; 1204988486cSPaul E. McKenney --do-all|--doall) 121a115a775SPaul E. McKenney do_allmodconfig=yes 122dd3ffd12SPaul E. McKenney do_rcutasksflavor=yes 123bfc19c13SPaul E. McKenney do_rcutorture=yes 124bfc19c13SPaul E. McKenney do_locktorture=yes 125bfc19c13SPaul E. McKenney do_scftorture=yes 126bfc19c13SPaul E. McKenney do_rcuscale=yes 127bfc19c13SPaul E. McKenney do_refscale=yes 128b6f3c6a2SPaul E. McKenney do_rt=yes 129bfc19c13SPaul E. McKenney do_kvfree=yes 130bfc19c13SPaul E. McKenney do_kasan=yes 131bfc19c13SPaul E. McKenney do_kcsan=yes 132ef4dac7dSPaul E. McKenney do_clocksourcewd=yes 133db5dc350SPaul E. McKenney do_srcu_lockdep=yes 134bfc19c13SPaul E. McKenney ;; 1350feda4daSPaul E. McKenney --do-allmodconfig|--do-no-allmodconfig|--no-allmodconfig) 136c9a9d8e8SPaul E. McKenney do_allmodconfig=`doyesno "$1" --do-allmodconfig` 137a115a775SPaul E. McKenney ;; 1380feda4daSPaul E. McKenney --do-clocksourcewd|--do-no-clocksourcewd|--no-clocksourcewd) 139ef4dac7dSPaul E. McKenney do_clocksourcewd=`doyesno "$1" --do-clocksourcewd` 140ef4dac7dSPaul E. McKenney ;; 1410feda4daSPaul E. McKenney --do-kasan|--do-no-kasan|--no-kasan) 142c9a9d8e8SPaul E. McKenney do_kasan=`doyesno "$1" --do-kasan` 143bfc19c13SPaul E. McKenney ;; 1440feda4daSPaul E. McKenney --do-kcsan|--do-no-kcsan|--no-kcsan) 145c9a9d8e8SPaul E. McKenney do_kcsan=`doyesno "$1" --do-kcsan` 146bfc19c13SPaul E. McKenney ;; 1470feda4daSPaul E. McKenney --do-kvfree|--do-no-kvfree|--no-kvfree) 148c9a9d8e8SPaul E. McKenney do_kvfree=`doyesno "$1" --do-kvfree` 149bfc19c13SPaul E. McKenney ;; 1500feda4daSPaul E. McKenney --do-locktorture|--do-no-locktorture|--no-locktorture) 151c9a9d8e8SPaul E. McKenney do_locktorture=`doyesno "$1" --do-locktorture` 152bfc19c13SPaul E. McKenney ;; 1534988486cSPaul E. McKenney --do-none|--donone) 154a115a775SPaul E. McKenney do_allmodconfig=no 155dd3ffd12SPaul E. McKenney do_rcutasksflavors=no 156bfc19c13SPaul E. McKenney do_rcutorture=no 157bfc19c13SPaul E. McKenney do_locktorture=no 158bfc19c13SPaul E. McKenney do_scftorture=no 159bfc19c13SPaul E. McKenney do_rcuscale=no 160bfc19c13SPaul E. McKenney do_refscale=no 161b6f3c6a2SPaul E. McKenney do_rt=no 162bfc19c13SPaul E. McKenney do_kvfree=no 163bfc19c13SPaul E. McKenney do_kasan=no 164bfc19c13SPaul E. McKenney do_kcsan=no 165ef4dac7dSPaul E. McKenney do_clocksourcewd=no 166db5dc350SPaul E. McKenney do_srcu_lockdep=no 167bfc19c13SPaul E. McKenney ;; 1680feda4daSPaul E. McKenney --do-rcuscale|--do-no-rcuscale|--no-rcuscale) 169c9a9d8e8SPaul E. McKenney do_rcuscale=`doyesno "$1" --do-rcuscale` 170bfc19c13SPaul E. McKenney ;; 171dd3ffd12SPaul E. McKenney --do-rcutasksflavors|--do-no-rcutasksflavors|--no-rcutasksflavors) 172dd3ffd12SPaul E. McKenney do_rcutasksflavors=`doyesno "$1" --do-rcutasksflavors` 173dd3ffd12SPaul E. McKenney ;; 1740feda4daSPaul E. McKenney --do-rcutorture|--do-no-rcutorture|--no-rcutorture) 175c9a9d8e8SPaul E. McKenney do_rcutorture=`doyesno "$1" --do-rcutorture` 176bfc19c13SPaul E. McKenney ;; 1770feda4daSPaul E. McKenney --do-refscale|--do-no-refscale|--no-refscale) 178c9a9d8e8SPaul E. McKenney do_refscale=`doyesno "$1" --do-refscale` 179bfc19c13SPaul E. McKenney ;; 1800feda4daSPaul E. McKenney --do-rt|--do-no-rt|--no-rt) 181b6f3c6a2SPaul E. McKenney do_rt=`doyesno "$1" --do-rt` 182b6f3c6a2SPaul E. McKenney ;; 1830feda4daSPaul E. McKenney --do-scftorture|--do-no-scftorture|--no-scftorture) 184c9a9d8e8SPaul E. McKenney do_scftorture=`doyesno "$1" --do-scftorture` 185bfc19c13SPaul E. McKenney ;; 186db5dc350SPaul E. McKenney --do-srcu-lockdep|--do-no-srcu-lockdep|--no-srcu-lockdep) 187db5dc350SPaul E. McKenney do_srcu_lockdep=`doyesno "$1" --do-srcu-lockdep` 188db5dc350SPaul E. McKenney ;; 189bfc19c13SPaul E. McKenney --duration) 190532017b1SPaul E. McKenney checkarg --duration "(minutes)" $# "$2" '^[0-9][0-9]*\(m\|h\|d\|\)$' '^error' 191532017b1SPaul E. McKenney mult=1 192532017b1SPaul E. McKenney if echo "$2" | grep -q 'm$' 193bfc19c13SPaul E. McKenney then 194bfc19c13SPaul E. McKenney mult=1 195bfc19c13SPaul E. McKenney elif echo "$2" | grep -q 'h$' 196bfc19c13SPaul E. McKenney then 197532017b1SPaul E. McKenney mult=60 198bfc19c13SPaul E. McKenney elif echo "$2" | grep -q 'd$' 199bfc19c13SPaul E. McKenney then 200532017b1SPaul E. McKenney mult=1440 201bfc19c13SPaul E. McKenney fi 202bfc19c13SPaul E. McKenney ts=`echo $2 | sed -e 's/[smhd]$//'` 203bfc19c13SPaul E. McKenney duration_base=$(($ts*mult)) 204bfc19c13SPaul E. McKenney shift 205bfc19c13SPaul E. McKenney ;; 206c54e4138SPaul E. McKenney --kcsan-kmake-arg|--kcsan-kmake-args) 207c54e4138SPaul E. McKenney checkarg --kcsan-kmake-arg "(kernel make arguments)" $# "$2" '.*' '^error$' 208c54e4138SPaul E. McKenney kcsan_kmake_args="`echo "$kcsan_kmake_args $2" | sed -e 's/^ *//' -e 's/ *$//'`" 209c54e4138SPaul E. McKenney shift 210c54e4138SPaul E. McKenney ;; 211bfc19c13SPaul E. McKenney *) 212bfc19c13SPaul E. McKenney echo Unknown argument $1 213bfc19c13SPaul E. McKenney usage 214bfc19c13SPaul E. McKenney ;; 215bfc19c13SPaul E. McKenney esac 216bfc19c13SPaul E. McKenney shift 217bfc19c13SPaul E. McKenneydone 218bfc19c13SPaul E. McKenney 219c66c0f94SPaul E. McKenneyds="`date +%Y.%m.%d-%H.%M.%S`-torture" 220c66c0f94SPaul E. McKenneystartdate="`date`" 221c66c0f94SPaul E. McKenneystarttime="`get_starttime`" 222c66c0f94SPaul E. McKenney 223c211ae9cSPaul E. McKenneyT="`mktemp -d ${TMPDIR-/tmp}/torture.sh.XXXXXX`" 224bfc19c13SPaul E. McKenneytrap 'rm -rf $T' 0 2 225bfc19c13SPaul E. McKenney 226c66c0f94SPaul E. McKenneyecho " --- " $scriptname $args | tee -a $T/log 227c66c0f94SPaul E. McKenneyecho " --- Results directory: " $ds | tee -a $T/log 228c66c0f94SPaul E. McKenney 2298847bd49SPaul E. McKenney# Calculate rcutorture defaults and apportion time 2308847bd49SPaul E. McKenneyif test -z "$configs_rcutorture" 2318847bd49SPaul E. McKenneythen 2328847bd49SPaul E. McKenney configs_rcutorture=CFLIST 2338847bd49SPaul E. McKenneyfi 234c679d90bSPaul E. McKenneyduration_rcutorture=$((duration_base*duration_rcutorture_frac/10)) 235c679d90bSPaul E. McKenneyif test "$duration_rcutorture" -eq 0 236c679d90bSPaul E. McKenneythen 237c679d90bSPaul E. McKenney echo " --- Zero time for rcutorture, disabling" | tee -a $T/log 238c679d90bSPaul E. McKenney do_rcutorture=no 239c679d90bSPaul E. McKenneyfi 2408847bd49SPaul E. McKenney 2418847bd49SPaul E. McKenney# Calculate locktorture defaults and apportion time 2428847bd49SPaul E. McKenneyif test -z "$configs_locktorture" 2438847bd49SPaul E. McKenneythen 2448847bd49SPaul E. McKenney configs_locktorture=CFLIST 2458847bd49SPaul E. McKenneyfi 246c679d90bSPaul E. McKenneyduration_locktorture=$((duration_base*duration_locktorture_frac/10)) 247c679d90bSPaul E. McKenneyif test "$duration_locktorture" -eq 0 248c679d90bSPaul E. McKenneythen 249c679d90bSPaul E. McKenney echo " --- Zero time for locktorture, disabling" | tee -a $T/log 250c679d90bSPaul E. McKenney do_locktorture=no 251c679d90bSPaul E. McKenneyfi 2528847bd49SPaul E. McKenney 2538847bd49SPaul E. McKenney# Calculate scftorture defaults and apportion time 2548847bd49SPaul E. McKenneyif test -z "$configs_scftorture" 2558847bd49SPaul E. McKenneythen 2568847bd49SPaul E. McKenney configs_scftorture=CFLIST 2578847bd49SPaul E. McKenneyfi 258c679d90bSPaul E. McKenneyduration_scftorture=$((duration_base*duration_scftorture_frac/10)) 259c679d90bSPaul E. McKenneyif test "$duration_scftorture" -eq 0 260c679d90bSPaul E. McKenneythen 261c679d90bSPaul E. McKenney echo " --- Zero time for scftorture, disabling" | tee -a $T/log 262c679d90bSPaul E. McKenney do_scftorture=no 263c679d90bSPaul E. McKenneyfi 264c679d90bSPaul E. McKenney 265bfc19c13SPaul E. McKenneytouch $T/failures 266bfc19c13SPaul E. McKenneytouch $T/successes 267bfc19c13SPaul E. McKenney 268197220d4SPaul E. McKenney# torture_one - Does a single kvm.sh run. 269197220d4SPaul E. McKenney# 270197220d4SPaul E. McKenney# Usage: 271197220d4SPaul E. McKenney# torture_bootargs="[ kernel boot arguments ]" 272197220d4SPaul E. McKenney# torture_one flavor [ kvm.sh arguments ] 273197220d4SPaul E. McKenney# 274bfc19c13SPaul E. McKenney# Note that "flavor" is an arbitrary string. Supply --torture if needed. 275197220d4SPaul E. McKenney# Note that quoting is problematic. So on the command line, pass multiple 276197220d4SPaul E. McKenney# values with multiple kvm.sh argument instances. 277bfc19c13SPaul E. McKenneyfunction torture_one { 278197220d4SPaul E. McKenney local cur_bootargs= 279197220d4SPaul E. McKenney local boottag= 280197220d4SPaul E. McKenney 281bfc19c13SPaul E. McKenney echo " --- $curflavor:" Start `date` | tee -a $T/log 282197220d4SPaul E. McKenney if test -n "$torture_bootargs" 283197220d4SPaul E. McKenney then 284197220d4SPaul E. McKenney boottag="--bootargs" 285197220d4SPaul E. McKenney cur_bootargs="$torture_bootargs" 286197220d4SPaul E. McKenney fi 287197220d4SPaul E. McKenney "$@" $boottag "$cur_bootargs" --datestamp "$ds/results-$curflavor" > $T/$curflavor.out 2>&1 288bfc19c13SPaul E. McKenney retcode=$? 289bfc19c13SPaul E. McKenney resdir="`grep '^Results directory: ' $T/$curflavor.out | tail -1 | sed -e 's/^Results directory: //'`" 2905ae5f745SPaul E. McKenney if test -z "$resdir" 291bfc19c13SPaul E. McKenney then 292bfc19c13SPaul E. McKenney cat $T/$curflavor.out | tee -a $T/log 293bfc19c13SPaul E. McKenney echo retcode=$retcode | tee -a $T/log 294dfabd420SPaul E. McKenney else 295dfabd420SPaul E. McKenney echo $resdir > $T/last-resdir 296bfc19c13SPaul E. McKenney fi 297bfc19c13SPaul E. McKenney if test "$retcode" == 0 298bfc19c13SPaul E. McKenney then 299bfc19c13SPaul E. McKenney echo "$curflavor($retcode)" $resdir >> $T/successes 300bfc19c13SPaul E. McKenney else 301bfc19c13SPaul E. McKenney echo "$curflavor($retcode)" $resdir >> $T/failures 302bfc19c13SPaul E. McKenney fi 303bfc19c13SPaul E. McKenney} 304bfc19c13SPaul E. McKenney 305197220d4SPaul E. McKenney# torture_set - Does a set of tortures with and without KASAN and KCSAN. 306197220d4SPaul E. McKenney# 307197220d4SPaul E. McKenney# Usage: 308197220d4SPaul E. McKenney# torture_bootargs="[ kernel boot arguments ]" 309197220d4SPaul E. McKenney# torture_set flavor [ kvm.sh arguments ] 310197220d4SPaul E. McKenney# 311ef4dac7dSPaul E. McKenney# Note that "flavor" is an arbitrary string that does not affect kvm.sh 312ef4dac7dSPaul E. McKenney# in any way. So also supply --torture if you need something other than 313ef4dac7dSPaul E. McKenney# the default. 314bfc19c13SPaul E. McKenneyfunction torture_set { 315c54e4138SPaul E. McKenney local cur_kcsan_kmake_args= 316c54e4138SPaul E. McKenney local kcsan_kmake_tag= 317bfc19c13SPaul E. McKenney local flavor=$1 318bfc19c13SPaul E. McKenney shift 319bfc19c13SPaul E. McKenney curflavor=$flavor 320197220d4SPaul E. McKenney torture_one "$@" 321dfabd420SPaul E. McKenney mv $T/last-resdir $T/last-resdir-nodebug || : 322bfc19c13SPaul E. McKenney if test "$do_kasan" = "yes" 323bfc19c13SPaul E. McKenney then 324bfc19c13SPaul E. McKenney curflavor=${flavor}-kasan 325197220d4SPaul E. McKenney torture_one "$@" --kasan 326dfabd420SPaul E. McKenney mv $T/last-resdir $T/last-resdir-kasan || : 327bfc19c13SPaul E. McKenney fi 328bfc19c13SPaul E. McKenney if test "$do_kcsan" = "yes" 329bfc19c13SPaul E. McKenney then 330bfc19c13SPaul E. McKenney curflavor=${flavor}-kcsan 331c54e4138SPaul E. McKenney if test -n "$kcsan_kmake_args" 332c54e4138SPaul E. McKenney then 333c54e4138SPaul E. McKenney kcsan_kmake_tag="--kmake-args" 334c54e4138SPaul E. McKenney cur_kcsan_kmake_args="$kcsan_kmake_args" 335c54e4138SPaul E. McKenney fi 33698da7719SPaul E. McKenney torture_one "$@" --kconfig "CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_PROVE_LOCKING=y" $kcsan_kmake_tag $cur_kcsan_kmake_args --kcsan 337dfabd420SPaul E. McKenney mv $T/last-resdir $T/last-resdir-kcsan || : 338bfc19c13SPaul E. McKenney fi 339bfc19c13SPaul E. McKenney} 340bfc19c13SPaul E. McKenney 341a115a775SPaul E. McKenney# make allmodconfig 342a115a775SPaul E. McKenneyif test "$do_allmodconfig" = "yes" 343a115a775SPaul E. McKenneythen 344a115a775SPaul E. McKenney echo " --- allmodconfig:" Start `date` | tee -a $T/log 345a115a775SPaul E. McKenney amcdir="tools/testing/selftests/rcutorture/res/$ds/allmodconfig" 346a115a775SPaul E. McKenney mkdir -p "$amcdir" 347f7dd1648SPaul E. McKenney echo " --- make clean" | tee $amcdir/log > "$amcdir/Make.out" 2>&1 3481fe9cef4SPaul E. McKenney make -j$MAKE_ALLOTED_CPUS clean >> "$amcdir/Make.out" 2>&1 349f7dd1648SPaul E. McKenney retcode=$? 350f7dd1648SPaul E. McKenney buildphase='"make clean"' 351f7dd1648SPaul E. McKenney if test "$retcode" -eq 0 352f7dd1648SPaul E. McKenney then 353f7dd1648SPaul E. McKenney echo " --- make allmodconfig" | tee -a $amcdir/log >> "$amcdir/Make.out" 2>&1 354c7756fffSPaul E. McKenney cp .config $amcdir 3551fe9cef4SPaul E. McKenney make -j$MAKE_ALLOTED_CPUS allmodconfig >> "$amcdir/Make.out" 2>&1 356f7dd1648SPaul E. McKenney retcode=$? 357f7dd1648SPaul E. McKenney buildphase='"make allmodconfig"' 358f7dd1648SPaul E. McKenney fi 359f7dd1648SPaul E. McKenney if test "$retcode" -eq 0 360f7dd1648SPaul E. McKenney then 361f7dd1648SPaul E. McKenney echo " --- make " | tee -a $amcdir/log >> "$amcdir/Make.out" 2>&1 3621fe9cef4SPaul E. McKenney make -j$MAKE_ALLOTED_CPUS >> "$amcdir/Make.out" 2>&1 363a115a775SPaul E. McKenney retcode="$?" 364a115a775SPaul E. McKenney echo $retcode > "$amcdir/Make.exitcode" 365f7dd1648SPaul E. McKenney buildphase='"make"' 366f7dd1648SPaul E. McKenney fi 367f7dd1648SPaul E. McKenney if test "$retcode" -eq 0 368a115a775SPaul E. McKenney then 369a115a775SPaul E. McKenney echo "allmodconfig($retcode)" $amcdir >> $T/successes 370f7dd1648SPaul E. McKenney echo Success >> $amcdir/log 371a115a775SPaul E. McKenney else 372a115a775SPaul E. McKenney echo "allmodconfig($retcode)" $amcdir >> $T/failures 373f7dd1648SPaul E. McKenney echo " --- allmodconfig Test summary:" >> $amcdir/log 374f7dd1648SPaul E. McKenney echo " --- Summary: Exit code $retcode from $buildphase, see Make.out" >> $amcdir/log 375a115a775SPaul E. McKenney fi 376a115a775SPaul E. McKenneyfi 377a115a775SPaul E. McKenney 378dd3ffd12SPaul E. McKenney# Test building RCU Tasks flavors in isolation, both SMP and !SMP 379dd3ffd12SPaul E. McKenneyif test "$do_rcutasksflavors" = "yes" 380dd3ffd12SPaul E. McKenneythen 381dd3ffd12SPaul E. McKenney echo " --- rcutasksflavors:" Start `date` | tee -a $T/log 382dd3ffd12SPaul E. McKenney rtfdir="tools/testing/selftests/rcutorture/res/$ds/results-rcutasksflavors" 383dd3ffd12SPaul E. McKenney mkdir -p "$rtfdir" 384dd3ffd12SPaul E. McKenney cat > $T/rcutasksflavors << __EOF__ 385dd3ffd12SPaul E. McKenney#CHECK#CONFIG_TASKS_RCU=n 386dd3ffd12SPaul E. McKenney#CHECK#CONFIG_TASKS_RUDE_RCU=n 387dd3ffd12SPaul E. McKenney#CHECK#CONFIG_TASKS_TRACE_RCU=n 388dd3ffd12SPaul E. McKenney__EOF__ 389dd3ffd12SPaul E. McKenney for flavor in CONFIG_TASKS_RCU CONFIG_TASKS_RUDE_RCU CONFIG_TASKS_TRACE_RCU 390dd3ffd12SPaul E. McKenney do 391dd3ffd12SPaul E. McKenney forceflavor="`echo $flavor | sed -e 's/^CONFIG/CONFIG_FORCE/'`" 392dd3ffd12SPaul E. McKenney deselectedflavors="`grep -v $flavor $T/rcutasksflavors | tr '\012' ' ' | tr -s ' ' | sed -e 's/ *$//'`" 393dd3ffd12SPaul E. McKenney echo " --- Running RCU Tasks Trace flavor $flavor `date`" >> $rtfdir/log 394dd3ffd12SPaul E. McKenney tools/testing/selftests/rcutorture/bin/kvm.sh --datestamp "$ds/results-rcutasksflavors/$flavor" --buildonly --configs "TINY01 TREE04" --kconfig "CONFIG_RCU_EXPERT=y CONFIG_RCU_SCALE_TEST=y $forceflavor=y $deselectedflavors" --trust-make > $T/$flavor.out 2>&1 395dd3ffd12SPaul E. McKenney retcode=$? 396dd3ffd12SPaul E. McKenney if test "$retcode" -ne 0 397dd3ffd12SPaul E. McKenney then 398dd3ffd12SPaul E. McKenney break 399dd3ffd12SPaul E. McKenney fi 400dd3ffd12SPaul E. McKenney done 401dd3ffd12SPaul E. McKenney if test "$retcode" -eq 0 402dd3ffd12SPaul E. McKenney then 403dd3ffd12SPaul E. McKenney echo "rcutasksflavors($retcode)" $rtfdir >> $T/successes 404dd3ffd12SPaul E. McKenney echo Success >> $rtfdir/log 405dd3ffd12SPaul E. McKenney else 406dd3ffd12SPaul E. McKenney echo "rcutasksflavors($retcode)" $rtfdir >> $T/failures 407dd3ffd12SPaul E. McKenney echo " --- rcutasksflavors Test summary:" >> $rtfdir/log 408dd3ffd12SPaul E. McKenney echo " --- Summary: Exit code $retcode from $flavor, see Make.out" >> $rtfdir/log 409dd3ffd12SPaul E. McKenney fi 410dd3ffd12SPaul E. McKenneyfi 411dd3ffd12SPaul E. McKenney 412a115a775SPaul E. McKenney# --torture rcu 413bfc19c13SPaul E. McKenneyif test "$do_rcutorture" = "yes" 414bfc19c13SPaul E. McKenneythen 415197220d4SPaul E. McKenney torture_bootargs="rcupdate.rcu_cpu_stall_suppress_at_boot=1 torture.disable_onoff_at_boot rcupdate.rcu_task_stall_timeout=30000" 4168847bd49SPaul E. McKenney torture_set "rcutorture" tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration "$duration_rcutorture" --configs "$configs_rcutorture" --trust-make 417bfc19c13SPaul E. McKenneyfi 418bfc19c13SPaul E. McKenney 419bfc19c13SPaul E. McKenneyif test "$do_locktorture" = "yes" 420bfc19c13SPaul E. McKenneythen 421197220d4SPaul E. McKenney torture_bootargs="torture.disable_onoff_at_boot" 4228847bd49SPaul E. McKenney torture_set "locktorture" tools/testing/selftests/rcutorture/bin/kvm.sh --torture lock --allcpus --duration "$duration_locktorture" --configs "$configs_locktorture" --trust-make 423bfc19c13SPaul E. McKenneyfi 424bfc19c13SPaul E. McKenney 425bfc19c13SPaul E. McKenneyif test "$do_scftorture" = "yes" 426bfc19c13SPaul E. McKenneythen 427822e4250SPaul E. McKenney # Scale memory based on the number of CPUs. 428822e4250SPaul E. McKenney scfmem=$((2+HALF_ALLOTED_CPUS/16)) 4293e112a39SPaul E. McKenney torture_bootargs="scftorture.nthreads=$HALF_ALLOTED_CPUS torture.disable_onoff_at_boot csdlock_debug=1" 430822e4250SPaul E. McKenney torture_set "scftorture" tools/testing/selftests/rcutorture/bin/kvm.sh --torture scf --allcpus --duration "$duration_scftorture" --configs "$configs_scftorture" --kconfig "CONFIG_NR_CPUS=$HALF_ALLOTED_CPUS" --memory ${scfmem}G --trust-make 431bfc19c13SPaul E. McKenneyfi 432bfc19c13SPaul E. McKenney 433b6f3c6a2SPaul E. McKenneyif test "$do_rt" = "yes" 434b6f3c6a2SPaul E. McKenneythen 435b6f3c6a2SPaul E. McKenney # With all post-boot grace periods forced to normal. 436b6f3c6a2SPaul E. McKenney torture_bootargs="rcupdate.rcu_cpu_stall_suppress_at_boot=1 torture.disable_onoff_at_boot rcupdate.rcu_task_stall_timeout=30000 rcupdate.rcu_normal=1" 437b6f3c6a2SPaul E. McKenney torture_set "rcurttorture" tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration "$duration_rcutorture" --configs "TREE03" --trust-make 438b6f3c6a2SPaul E. McKenney 439b6f3c6a2SPaul E. McKenney # With all post-boot grace periods forced to expedited. 440b6f3c6a2SPaul E. McKenney torture_bootargs="rcupdate.rcu_cpu_stall_suppress_at_boot=1 torture.disable_onoff_at_boot rcupdate.rcu_task_stall_timeout=30000 rcupdate.rcu_expedited=1" 441b6f3c6a2SPaul E. McKenney torture_set "rcurttorture-exp" tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration "$duration_rcutorture" --configs "TREE03" --trust-make 442bfc19c13SPaul E. McKenneyfi 443bfc19c13SPaul E. McKenney 444db5dc350SPaul E. McKenneyif test "$do_srcu_lockdep" = "yes" 445db5dc350SPaul E. McKenneythen 446db5dc350SPaul E. McKenney echo " --- do-srcu-lockdep:" Start `date` | tee -a $T/log 447db5dc350SPaul E. McKenney tools/testing/selftests/rcutorture/bin/srcu_lockdep.sh --datestamp "$ds/results-srcu-lockdep" > $T/srcu_lockdep.sh.out 2>&1 448db5dc350SPaul E. McKenney retcode=$? 449db5dc350SPaul E. McKenney cp $T/srcu_lockdep.sh.out "tools/testing/selftests/rcutorture/res/$ds/results-srcu-lockdep/log" 450db5dc350SPaul E. McKenney if test "$retcode" -eq 0 451db5dc350SPaul E. McKenney then 452db5dc350SPaul E. McKenney echo "srcu_lockdep($retcode)" "tools/testing/selftests/rcutorture/res/$ds/results-srcu-lockdep" >> $T/successes 453db5dc350SPaul E. McKenney echo Success >> "tools/testing/selftests/rcutorture/res/$ds/results-srcu-lockdep/log" 454db5dc350SPaul E. McKenney else 455db5dc350SPaul E. McKenney echo "srcu_lockdep($retcode)" "tools/testing/selftests/rcutorture/res/$ds/results-srcu-lockdep" >> $T/failures 456db5dc350SPaul E. McKenney echo " --- srcu_lockdep Test Summary:" >> "tools/testing/selftests/rcutorture/res/$ds/results-srcu-lockdep/log" 457db5dc350SPaul E. McKenney echo " --- Summary: Exit code $retcode from srcu_lockdep.sh, see ds/results-srcu-lockdep" >> "tools/testing/selftests/rcutorture/res/$ds/results-srcu-lockdep/log" 458db5dc350SPaul E. McKenney fi 459db5dc350SPaul E. McKenneyfi 460db5dc350SPaul E. McKenney 461bfc19c13SPaul E. McKenneyif test "$do_refscale" = yes 462bfc19c13SPaul E. McKenneythen 4637a99487cSPaul E. McKenney primlist="`grep '\.name[ ]*=' kernel/rcu/refscale.c | sed -e 's/^[^"]*"//' -e 's/".*$//'`" 464bfc19c13SPaul E. McKenneyelse 465bfc19c13SPaul E. McKenney primlist= 466bfc19c13SPaul E. McKenneyfi 467dfabd420SPaul E. McKenneyfirsttime=1 468dfabd420SPaul E. McKenneydo_kasan_save="$do_kasan" 469dfabd420SPaul E. McKenneydo_kcsan_save="$do_kcsan" 470bfc19c13SPaul E. McKenneyfor prim in $primlist 471bfc19c13SPaul E. McKenneydo 472dfabd420SPaul E. McKenney if test -n "$firsttime" 473dfabd420SPaul E. McKenney then 47469d2b33eSPaul E. McKenney torture_bootargs="refscale.scale_type="$prim" refscale.nreaders=$HALF_ALLOTED_CPUS refscale.loops=10000 refscale.holdoff=20 torture.disable_onoff_at_boot" 475d69e048bSPaul E. McKenney torture_set "refscale-$prim" tools/testing/selftests/rcutorture/bin/kvm.sh --torture refscale --allcpus --duration 5 --kconfig "CONFIG_TASKS_TRACE_RCU=y CONFIG_NR_CPUS=$HALF_ALLOTED_CPUS" --bootargs "verbose_batched=$VERBOSE_BATCH_CPUS torture.verbose_sleep_frequency=8 torture.verbose_sleep_duration=$VERBOSE_BATCH_CPUS" --trust-make 476dfabd420SPaul E. McKenney mv $T/last-resdir-nodebug $T/first-resdir-nodebug || : 477dfabd420SPaul E. McKenney if test -f "$T/last-resdir-kasan" 478dfabd420SPaul E. McKenney then 479dfabd420SPaul E. McKenney mv $T/last-resdir-kasan $T/first-resdir-kasan || : 480dfabd420SPaul E. McKenney fi 481dfabd420SPaul E. McKenney if test -f "$T/last-resdir-kcsan" 482dfabd420SPaul E. McKenney then 483dfabd420SPaul E. McKenney mv $T/last-resdir-kcsan $T/first-resdir-kcsan || : 484dfabd420SPaul E. McKenney fi 485dfabd420SPaul E. McKenney firsttime= 486dfabd420SPaul E. McKenney do_kasan= 487dfabd420SPaul E. McKenney do_kcsan= 488dfabd420SPaul E. McKenney else 489dfabd420SPaul E. McKenney torture_bootargs= 490dfabd420SPaul E. McKenney for i in $T/first-resdir-* 491dfabd420SPaul E. McKenney do 492dfabd420SPaul E. McKenney case "$i" in 493dfabd420SPaul E. McKenney *-nodebug) 494dfabd420SPaul E. McKenney torture_suffix= 495dfabd420SPaul E. McKenney ;; 496dfabd420SPaul E. McKenney *-kasan) 497dfabd420SPaul E. McKenney torture_suffix="-kasan" 498dfabd420SPaul E. McKenney ;; 499dfabd420SPaul E. McKenney *-kcsan) 500dfabd420SPaul E. McKenney torture_suffix="-kcsan" 501dfabd420SPaul E. McKenney ;; 502dfabd420SPaul E. McKenney esac 503dfabd420SPaul E. McKenney torture_set "refscale-$prim$torture_suffix" tools/testing/selftests/rcutorture/bin/kvm-again.sh "`cat "$i"`" --duration 5 --bootargs "refscale.scale_type=$prim" 504bfc19c13SPaul E. McKenney done 505dfabd420SPaul E. McKenney fi 506dfabd420SPaul E. McKenneydone 507dfabd420SPaul E. McKenneydo_kasan="$do_kasan_save" 508dfabd420SPaul E. McKenneydo_kcsan="$do_kcsan_save" 509bfc19c13SPaul E. McKenney 510bfc19c13SPaul E. McKenneyif test "$do_rcuscale" = yes 511bfc19c13SPaul E. McKenneythen 5127a99487cSPaul E. McKenney primlist="`grep '\.name[ ]*=' kernel/rcu/rcuscale.c | sed -e 's/^[^"]*"//' -e 's/".*$//'`" 513bfc19c13SPaul E. McKenneyelse 514bfc19c13SPaul E. McKenney primlist= 515bfc19c13SPaul E. McKenneyfi 516dfabd420SPaul E. McKenneyfirsttime=1 517dfabd420SPaul E. McKenneydo_kasan_save="$do_kasan" 518dfabd420SPaul E. McKenneydo_kcsan_save="$do_kcsan" 519bfc19c13SPaul E. McKenneyfor prim in $primlist 520bfc19c13SPaul E. McKenneydo 521dfabd420SPaul E. McKenney if test -n "$firsttime" 522dfabd420SPaul E. McKenney then 52369d2b33eSPaul E. McKenney torture_bootargs="rcuscale.scale_type="$prim" rcuscale.nwriters=$HALF_ALLOTED_CPUS rcuscale.holdoff=20 torture.disable_onoff_at_boot" 524d69e048bSPaul E. McKenney torture_set "rcuscale-$prim" tools/testing/selftests/rcutorture/bin/kvm.sh --torture rcuscale --allcpus --duration 5 --kconfig "CONFIG_TASKS_TRACE_RCU=y CONFIG_NR_CPUS=$HALF_ALLOTED_CPUS" --trust-make 525dfabd420SPaul E. McKenney mv $T/last-resdir-nodebug $T/first-resdir-nodebug || : 526dfabd420SPaul E. McKenney if test -f "$T/last-resdir-kasan" 527dfabd420SPaul E. McKenney then 528dfabd420SPaul E. McKenney mv $T/last-resdir-kasan $T/first-resdir-kasan || : 529dfabd420SPaul E. McKenney fi 530dfabd420SPaul E. McKenney if test -f "$T/last-resdir-kcsan" 531dfabd420SPaul E. McKenney then 532dfabd420SPaul E. McKenney mv $T/last-resdir-kcsan $T/first-resdir-kcsan || : 533dfabd420SPaul E. McKenney fi 534dfabd420SPaul E. McKenney firsttime= 535dfabd420SPaul E. McKenney do_kasan= 536dfabd420SPaul E. McKenney do_kcsan= 537dfabd420SPaul E. McKenney else 538dfabd420SPaul E. McKenney torture_bootargs= 539dfabd420SPaul E. McKenney for i in $T/first-resdir-* 540dfabd420SPaul E. McKenney do 541dfabd420SPaul E. McKenney case "$i" in 542dfabd420SPaul E. McKenney *-nodebug) 543dfabd420SPaul E. McKenney torture_suffix= 544dfabd420SPaul E. McKenney ;; 545dfabd420SPaul E. McKenney *-kasan) 546dfabd420SPaul E. McKenney torture_suffix="-kasan" 547dfabd420SPaul E. McKenney ;; 548dfabd420SPaul E. McKenney *-kcsan) 549dfabd420SPaul E. McKenney torture_suffix="-kcsan" 550dfabd420SPaul E. McKenney ;; 551dfabd420SPaul E. McKenney esac 552dfabd420SPaul E. McKenney torture_set "rcuscale-$prim$torture_suffix" tools/testing/selftests/rcutorture/bin/kvm-again.sh "`cat "$i"`" --duration 5 --bootargs "rcuscale.scale_type=$prim" 553bfc19c13SPaul E. McKenney done 554dfabd420SPaul E. McKenney fi 555dfabd420SPaul E. McKenneydone 556dfabd420SPaul E. McKenneydo_kasan="$do_kasan_save" 557dfabd420SPaul E. McKenneydo_kcsan="$do_kcsan_save" 558bfc19c13SPaul E. McKenney 559bfc19c13SPaul E. McKenneyif test "$do_kvfree" = "yes" 560bfc19c13SPaul E. McKenneythen 561197220d4SPaul E. McKenney torture_bootargs="rcuscale.kfree_rcu_test=1 rcuscale.kfree_nthreads=16 rcuscale.holdoff=20 rcuscale.kfree_loops=10000 torture.disable_onoff_at_boot" 562fb036ad7SPaul E. McKenney torture_set "rcuscale-kvfree" tools/testing/selftests/rcutorture/bin/kvm.sh --torture rcuscale --allcpus --duration 10 --kconfig "CONFIG_NR_CPUS=$HALF_ALLOTED_CPUS" --memory 2G --trust-make 563bfc19c13SPaul E. McKenneyfi 564bfc19c13SPaul E. McKenney 565ef4dac7dSPaul E. McKenneyif test "$do_clocksourcewd" = "yes" 566ef4dac7dSPaul E. McKenneythen 567877a0e83SPaul E. McKenney torture_bootargs="rcupdate.rcu_cpu_stall_suppress_at_boot=1 torture.disable_onoff_at_boot rcupdate.rcu_task_stall_timeout=30000 tsc=watchdog" 568ef4dac7dSPaul E. McKenney torture_set "clocksourcewd-1" tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 45s --configs TREE03 --kconfig "CONFIG_TEST_CLOCKSOURCE_WATCHDOG=y" --trust-make 569ef4dac7dSPaul E. McKenney 570*03c38555SFeng Tang torture_bootargs="rcupdate.rcu_cpu_stall_suppress_at_boot=1 torture.disable_onoff_at_boot rcupdate.rcu_task_stall_timeout=30000 tsc=watchdog" 571ef4dac7dSPaul E. McKenney torture_set "clocksourcewd-2" tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 45s --configs TREE03 --kconfig "CONFIG_TEST_CLOCKSOURCE_WATCHDOG=y" --trust-make 572ef4dac7dSPaul E. McKenney 573ef4dac7dSPaul E. McKenney # In case our work is already done... 574ef4dac7dSPaul E. McKenney if test "$do_rcutorture" != "yes" 575ef4dac7dSPaul E. McKenney then 576877a0e83SPaul E. McKenney torture_bootargs="rcupdate.rcu_cpu_stall_suppress_at_boot=1 torture.disable_onoff_at_boot rcupdate.rcu_task_stall_timeout=30000 tsc=watchdog" 577ef4dac7dSPaul E. McKenney torture_set "clocksourcewd-3" tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --duration 45s --configs TREE03 --trust-make 578ef4dac7dSPaul E. McKenney fi 579ef4dac7dSPaul E. McKenneyfi 580ef4dac7dSPaul E. McKenney 581bfc19c13SPaul E. McKenneyecho " --- " $scriptname $args 582bfc19c13SPaul E. McKenneyecho " --- " Done `date` | tee -a $T/log 583bfc19c13SPaul E. McKenneyret=0 584bfc19c13SPaul E. McKenneynsuccesses=0 585bfc19c13SPaul E. McKenneyecho SUCCESSES: | tee -a $T/log 586bfc19c13SPaul E. McKenneyif test -s "$T/successes" 587bfc19c13SPaul E. McKenneythen 588bfc19c13SPaul E. McKenney cat "$T/successes" | tee -a $T/log 589bfc19c13SPaul E. McKenney nsuccesses="`wc -l "$T/successes" | awk '{ print $1 }'`" 590bfc19c13SPaul E. McKenneyfi 591bfc19c13SPaul E. McKenneynfailures=0 592bfc19c13SPaul E. McKenneyecho FAILURES: | tee -a $T/log 593bfc19c13SPaul E. McKenneyif test -s "$T/failures" 594bfc19c13SPaul E. McKenneythen 595b376005eSPaul E. McKenney awk < "$T/failures" -v sq="'" '{ print "echo " sq $0 sq; print "sed -e " sq "1,/^ --- .* Test summary:$/d" sq " " $2 "/log | grep Summary: | sed -e " sq "s/^[^S]*/ /" sq; }' | sh | tee -a $T/log | tee "$T/failuresum" 596bfc19c13SPaul E. McKenney nfailures="`wc -l "$T/failures" | awk '{ print $1 }'`" 5979a32ed1cSPaul E. McKenney grep "^ Summary: " "$T/failuresum" | 5989a32ed1cSPaul E. McKenney grep -v '^ Summary: Bugs: [0-9]* (all bugs kcsan)$' > "$T/nonkcsan" 5999a32ed1cSPaul E. McKenney if test -s "$T/nonkcsan" 6009a32ed1cSPaul E. McKenney then 6019a32ed1cSPaul E. McKenney nonkcsanbug="yes" 6029a32ed1cSPaul E. McKenney fi 603bfc19c13SPaul E. McKenney ret=2 604bfc19c13SPaul E. McKenneyfi 605433cd5a3SPaul E. McKenneyif test "$do_kcsan" = "yes" 606433cd5a3SPaul E. McKenneythen 607433cd5a3SPaul E. McKenney TORTURE_KCONFIG_KCSAN_ARG=1 tools/testing/selftests/rcutorture/bin/kcsan-collapse.sh tools/testing/selftests/rcutorture/res/$ds > tools/testing/selftests/rcutorture/res/$ds/kcsan.sum 608433cd5a3SPaul E. McKenneyfi 6091adb5d6bSPaul E. McKenneyecho Started at $startdate, ended at `date`, duration `get_starttime_duration $starttime`. | tee -a $T/log 610bfc19c13SPaul E. McKenneyecho Summary: Successes: $nsuccesses Failures: $nfailures. | tee -a $T/log 611eb3156f7SPaul E. McKenneytdir="`cat $T/successes $T/failures | head -1 | awk '{ print $NF }' | sed -e 's,/[^/]\+/*$,,'`" 612eb3156f7SPaul E. McKenneyfind "$tdir" -name 'ConfigFragment.diags' -print > $T/configerrors 613eb3156f7SPaul E. McKenneyfind "$tdir" -name 'Make.out.diags' -print > $T/builderrors 614eb3156f7SPaul E. McKenneyif test -s "$T/configerrors" 615eb3156f7SPaul E. McKenneythen 616eb3156f7SPaul E. McKenney echo " Scenarios with .config errors: `wc -l "$T/configerrors" | awk '{ print $1 }'`" 617eb3156f7SPaul E. McKenney nonkcsanbug="yes" 618eb3156f7SPaul E. McKenneyfi 619eb3156f7SPaul E. McKenneyif test -s "$T/builderrors" 620eb3156f7SPaul E. McKenneythen 621eb3156f7SPaul E. McKenney echo " Scenarios with build errors: `wc -l "$T/builderrors" | awk '{ print $1 }'`" 622eb3156f7SPaul E. McKenney nonkcsanbug="yes" 623eb3156f7SPaul E. McKenneyfi 6249a32ed1cSPaul E. McKenneyif test -z "$nonkcsanbug" && test -s "$T/failuresum" 6259a32ed1cSPaul E. McKenneythen 6269a32ed1cSPaul E. McKenney echo " All bugs were KCSAN failures." 6279a32ed1cSPaul E. McKenneyfi 62899c80a96SPaul E. McKenneyif test -n "$tdir" && test $compress_concurrency -gt 0 629e3e1a997SPaul E. McKenneythen 630e3e1a997SPaul E. McKenney # KASAN vmlinux files can approach 1GB in size, so compress them. 63199c80a96SPaul E. McKenney echo Looking for K[AC]SAN files to compress: `date` > "$tdir/log-xz" 2>&1 632cb0982e2SPaul E. McKenney find "$tdir" -type d -name '*-k[ac]san' -print > $T/xz-todo-all 633cb0982e2SPaul E. McKenney find "$tdir" -type f -name 're-run' -print | sed -e 's,/re-run,,' | 634cb0982e2SPaul E. McKenney grep -e '-k[ac]san$' > $T/xz-todo-copy 635cb0982e2SPaul E. McKenney sort $T/xz-todo-all $T/xz-todo-copy | uniq -u > $T/xz-todo 636e3e1a997SPaul E. McKenney ncompresses=0 637e3e1a997SPaul E. McKenney batchno=1 638e3e1a997SPaul E. McKenney if test -s $T/xz-todo 639e3e1a997SPaul E. McKenney then 640b380b10bSPaul E. McKenney for i in `cat $T/xz-todo` 641b380b10bSPaul E. McKenney do 642b380b10bSPaul E. McKenney find $i -name 'vmlinux*' -print 643b380b10bSPaul E. McKenney done | wc -l | awk '{ print $1 }' > $T/xz-todo-count 644b380b10bSPaul E. McKenney n2compress="`cat $T/xz-todo-count`" 645b380b10bSPaul E. McKenney echo Size before compressing $n2compress files: `du -sh $tdir | awk '{ print $1 }'` `date` 2>&1 | tee -a "$tdir/log-xz" | tee -a $T/log 646e3e1a997SPaul E. McKenney for i in `cat $T/xz-todo` 647e3e1a997SPaul E. McKenney do 648e3e1a997SPaul E. McKenney echo Compressing vmlinux files in ${i}: `date` >> "$tdir/log-xz" 2>&1 649e3e1a997SPaul E. McKenney for j in $i/*/vmlinux 650e3e1a997SPaul E. McKenney do 651e3e1a997SPaul E. McKenney xz "$j" >> "$tdir/log-xz" 2>&1 & 652e3e1a997SPaul E. McKenney ncompresses=$((ncompresses+1)) 65399c80a96SPaul E. McKenney if test $ncompresses -ge $compress_concurrency 654e3e1a997SPaul E. McKenney then 655e3e1a997SPaul E. McKenney echo Waiting for batch $batchno of $ncompresses compressions `date` | tee -a "$tdir/log-xz" | tee -a $T/log 656e3e1a997SPaul E. McKenney wait 657e3e1a997SPaul E. McKenney ncompresses=0 658e3e1a997SPaul E. McKenney batchno=$((batchno+1)) 659e3e1a997SPaul E. McKenney fi 660e3e1a997SPaul E. McKenney done 661e3e1a997SPaul E. McKenney done 662e3e1a997SPaul E. McKenney if test $ncompresses -gt 0 663e3e1a997SPaul E. McKenney then 664e3e1a997SPaul E. McKenney echo Waiting for final batch $batchno of $ncompresses compressions `date` | tee -a "$tdir/log-xz" | tee -a $T/log 665e3e1a997SPaul E. McKenney fi 666e3e1a997SPaul E. McKenney wait 667cb0982e2SPaul E. McKenney if test -s $T/xz-todo-copy 668cb0982e2SPaul E. McKenney then 669cb0982e2SPaul E. McKenney # The trick here is that we need corresponding 670cb0982e2SPaul E. McKenney # vmlinux files from corresponding scenarios. 671cb0982e2SPaul E. McKenney echo Linking vmlinux.xz files to re-use scenarios `date` | tee -a "$tdir/log-xz" | tee -a $T/log 672cb0982e2SPaul E. McKenney dirstash="`pwd`" 673cb0982e2SPaul E. McKenney for i in `cat $T/xz-todo-copy` 674cb0982e2SPaul E. McKenney do 675cb0982e2SPaul E. McKenney cd $i 676cb0982e2SPaul E. McKenney find . -name vmlinux -print > $T/xz-todo-copy-vmlinux 677cb0982e2SPaul E. McKenney for v in `cat $T/xz-todo-copy-vmlinux` 678cb0982e2SPaul E. McKenney do 679cb0982e2SPaul E. McKenney rm -f "$v" 680cb0982e2SPaul E. McKenney cp -l `cat $i/re-run`/"$i/$v".xz "`dirname "$v"`" 681cb0982e2SPaul E. McKenney done 682cb0982e2SPaul E. McKenney cd "$dirstash" 683cb0982e2SPaul E. McKenney done 684cb0982e2SPaul E. McKenney fi 685b380b10bSPaul E. McKenney echo Size after compressing $n2compress files: `du -sh $tdir | awk '{ print $1 }'` `date` 2>&1 | tee -a "$tdir/log-xz" | tee -a $T/log 686e3e1a997SPaul E. McKenney echo Total duration `get_starttime_duration $starttime`. | tee -a $T/log 687e3e1a997SPaul E. McKenney else 688e3e1a997SPaul E. McKenney echo No compression needed: `date` >> "$tdir/log-xz" 2>&1 689e3e1a997SPaul E. McKenney fi 690e3e1a997SPaul E. McKenneyfi 691bfc19c13SPaul E. McKenneyif test -n "$tdir" 692bfc19c13SPaul E. McKenneythen 693e3e1a997SPaul E. McKenney cp $T/log "$tdir" 694bfc19c13SPaul E. McKenneyfi 695bfc19c13SPaul E. McKenneyexit $ret 696