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